]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Merge branch 'testing' into 0.9.x
authorEvan Prodromou <evan@status.net>
Thu, 2 Sep 2010 20:56:52 +0000 (16:56 -0400)
committerEvan Prodromou <evan@status.net>
Thu, 2 Sep 2010 20:56:52 +0000 (16:56 -0400)
309 files changed:
EVENTS.txt
actions/newnotice.php
classes/Notice.php
db/08to09_pg.sql
js/util.js
lib/apiaction.php
lib/command.php
lib/noticeform.php
lib/usernoprofileexception.php
locale/af/LC_MESSAGES/statusnet.po
locale/ar/LC_MESSAGES/statusnet.po
locale/arz/LC_MESSAGES/statusnet.po
locale/bg/LC_MESSAGES/statusnet.po
locale/br/LC_MESSAGES/statusnet.po
locale/ca/LC_MESSAGES/statusnet.po
locale/cs/LC_MESSAGES/statusnet.po
locale/da/LC_MESSAGES/statusnet.po
locale/de/LC_MESSAGES/statusnet.po
locale/el/LC_MESSAGES/statusnet.po
locale/en_GB/LC_MESSAGES/statusnet.po
locale/eo/LC_MESSAGES/statusnet.po
locale/es/LC_MESSAGES/statusnet.po
locale/fa/LC_MESSAGES/statusnet.po
locale/fi/LC_MESSAGES/statusnet.po
locale/fr/LC_MESSAGES/statusnet.po
locale/ga/LC_MESSAGES/statusnet.po
locale/gl/LC_MESSAGES/statusnet.po
locale/he/LC_MESSAGES/statusnet.po
locale/hsb/LC_MESSAGES/statusnet.po
locale/ia/LC_MESSAGES/statusnet.po
locale/is/LC_MESSAGES/statusnet.po
locale/it/LC_MESSAGES/statusnet.po
locale/ja/LC_MESSAGES/statusnet.po
locale/ko/LC_MESSAGES/statusnet.po
locale/mk/LC_MESSAGES/statusnet.po
locale/nb/LC_MESSAGES/statusnet.po
locale/nl/LC_MESSAGES/statusnet.po
locale/nn/LC_MESSAGES/statusnet.po
locale/pl/LC_MESSAGES/statusnet.po
locale/pt/LC_MESSAGES/statusnet.po
locale/pt_BR/LC_MESSAGES/statusnet.po
locale/ru/LC_MESSAGES/statusnet.po
locale/statusnet.pot
locale/sv/LC_MESSAGES/statusnet.po
locale/te/LC_MESSAGES/statusnet.po
locale/tr/LC_MESSAGES/statusnet.po
locale/uk/LC_MESSAGES/statusnet.po
locale/vi/LC_MESSAGES/statusnet.po
locale/zh_CN/LC_MESSAGES/statusnet.po
locale/zh_TW/LC_MESSAGES/statusnet.po
plugins/DisqusPlugin.php [new file with mode: 0644]
plugins/EchoPlugin.php [new file with mode: 0644]
plugins/NoticeTitle/NoticeTitlePlugin.php [new file with mode: 0644]
plugins/NoticeTitle/Notice_title.php [new file with mode: 0644]
plugins/OStatus/OStatusPlugin.php
plugins/OStatus/classes/Ostatus_profile.php
plugins/TinyMCE/TinyMCEPlugin.php [new file with mode: 0644]
plugins/TinyMCE/icons/placeholder.png [new file with mode: 0644]
plugins/TinyMCE/icons/placeholder.xcf [new file with mode: 0644]
plugins/TinyMCE/js/jquery.tinymce.js [new file with mode: 0644]
plugins/TinyMCE/js/langs/en.js [new file with mode: 0644]
plugins/TinyMCE/js/license.txt [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advhr/css/advhr.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advhr/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advhr/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advhr/js/rule.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advhr/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advhr/rule.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/css/advimage.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/image.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/img/sample.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/js/image.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advimage/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlink/css/advlink.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlink/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlink/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlink/js/advlink.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlink/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlink/link.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlist/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/advlist/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/autoresize/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/autoresize/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/autosave/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/autosave/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/autosave/langs/en.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/bbcode/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/bbcode/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/contextmenu/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/contextmenu/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/directionality/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/directionality/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/emotions.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/js/emotions.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/emotions/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/dialog.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/img/example.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/js/dialog.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/langs/en.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/example/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullpage/css/fullpage.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullpage/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullpage/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullpage/fullpage.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullpage/js/fullpage.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullpage/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullscreen/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullscreen/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/fullscreen/fullscreen.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/iespell/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/iespell/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/window.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/inlinepopups/template.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/layer/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/layer/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/linkautodetect/changelog.txt [new file with mode: 0644]
plugins/TinyMCE/js/plugins/linkautodetect/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/linkautodetect/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/css/content.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/css/media.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/flash.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/flv_player.swf [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/quicktime.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/realmedia.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/shockwave.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/trans.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/img/windowsmedia.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/js/embed.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/js/media.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/media/media.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/noneditable/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/noneditable/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/pagebreak/css/content.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/pagebreak/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/pagebreak/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/pagebreak/img/pagebreak.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/pagebreak/img/trans.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/js/pastetext.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/js/pasteword.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/pastetext.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/paste/pasteword.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/preview/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/preview/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/preview/example.html [new file with mode: 0644]
plugins/TinyMCE/js/plugins/preview/jscripts/embed.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/preview/preview.html [new file with mode: 0644]
plugins/TinyMCE/js/plugins/print/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/print/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/save/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/save/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/searchreplace/css/searchreplace.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/searchreplace/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/searchreplace/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/searchreplace/js/searchreplace.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/searchreplace/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/searchreplace/searchreplace.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/spellchecker/css/content.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/spellchecker/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/spellchecker/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif [new file with mode: 0644]
plugins/TinyMCE/js/plugins/style/css/props.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/style/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/style/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/style/js/props.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/style/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/style/props.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/tabfocus/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/tabfocus/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/cell.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/css/cell.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/css/row.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/css/table.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/js/cell.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/js/merge_cells.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/js/row.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/js/table.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/merge_cells.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/row.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/table/table.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/blank.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/css/template.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/js/template.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/template/template.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/visualchars/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/visualchars/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/wordcount/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/wordcount/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/abbr.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/acronym.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/attributes.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/cite.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/css/attributes.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/css/popup.css [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/del.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin_src.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/ins.htm [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/abbr.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/acronym.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/attributes.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/cite.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/del.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/element_common.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/js/ins.js [new file with mode: 0644]
plugins/TinyMCE/js/plugins/xhtmlxtras/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/about.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/anchor.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/charmap.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/color_picker.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/editor_template.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/editor_template_src.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/image.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/img/icons.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/about.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/anchor.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/charmap.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/color_picker.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/image.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/link.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/js/source_editor.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/langs/en.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/langs/en_dlg.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/link.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/content.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/dialog.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/default/ui.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/content.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/dialog.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_black.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_silver.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/advanced/source_editor.htm [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/editor_template.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/editor_template_src.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/img/icons.gif [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/langs/en.js [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/skins/default/content.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/skins/default/ui.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/skins/o2k7/content.css [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png [new file with mode: 0644]
plugins/TinyMCE/js/themes/simple/skins/o2k7/ui.css [new file with mode: 0644]
plugins/TinyMCE/js/tiny_mce.js [new file with mode: 0644]
plugins/TinyMCE/js/tiny_mce_popup.js [new file with mode: 0644]
plugins/TinyMCE/js/tiny_mce_src.js [new file with mode: 0644]
plugins/TinyMCE/js/utils/editable_selects.js [new file with mode: 0644]
plugins/TinyMCE/js/utils/form_utils.js [new file with mode: 0644]
plugins/TinyMCE/js/utils/mctabs.js [new file with mode: 0644]
plugins/TinyMCE/js/utils/validate.js [new file with mode: 0644]
plugins/TinyMCE/locale/Sample.po [new file with mode: 0644]
scripts/update_po_templates.php

index 7784e7d42e6801cae55268d9ca9489ff2feea942..1a3b2594a2efe55ef5be80810e1321c76385ee99 100644 (file)
@@ -1045,3 +1045,24 @@ StartActivityEnd: before the closing </entry> in a notice activity entry (last c
 EndActivityEnd: after the closing </entry> in a notice activity entry
 - &$notice: notice being output
 - &$xs: XMLStringer for output
+
+StartNoticeSaveWeb: before saving a notice through the Web interface
+- $action: action being executed (instance of NewNoticeAction)
+- &$authorId: integer ID of the author
+- &$text: text of the notice
+- &$options: additional options (location, replies, etc.)
+
+EndNoticeSaveWeb: after saving a notice through the Web interface
+- $action: action being executed (instance of NewNoticeAction)
+- $notice: notice that was saved
+
+StartRssEntryArray: at the start of copying a notice to an array
+- $notice: the notice being copied
+- &$entry: the entry (empty at beginning)
+
+EndRssEntryArray: at the end of copying a notice to an array
+- $notice: the notice being copied
+- &$entry: the entry, with all the fields filled up
+
+NoticeDeleteRelated: at the beginning of deleting related fields to a notice
+- $notice: notice being deleted
index 748d104ff9391de95bd017d1014dc2eb311a5e23..ea832cf4e1300ec0ce75424c40f9f4e8530e1164 100644 (file)
@@ -131,6 +131,8 @@ class NewnoticeAction extends Action
         $user = common_current_user();
         assert($user); // XXX: maybe an error instead...
         $content = $this->trimmed('status_textarea');
+        $options = array();
+        Event::handle('StartSaveNewNoticeWeb', array($this, $user, &$content, &$options));
 
         if (!$content) {
             $this->clientError(_('No content!'));
@@ -157,11 +159,9 @@ class NewnoticeAction extends Action
                                        Notice::maxContent()));
         }
 
-        $replyto = $this->trimmed('inreplyto');
-        #If an ID of 0 is wrongly passed here, it will cause a database error,
-        #so override it...
-        if ($replyto == 0) {
-            $replyto = 'false';
+        $replyto = intval($this->trimmed('inreplyto'));
+        if ($replyto) {
+            $options['reply_to'] = $replyto;
         }
 
         $upload = null;
@@ -169,7 +169,10 @@ class NewnoticeAction extends Action
 
         if (isset($upload)) {
 
-            $content_shortened .= ' ' . $upload->shortUrl();
+            if (Event::handle('StartSaveNewNoticeAppendAttachment', array($this, $upload, &$content_shortened, &$options))) {
+                $content_shortened .= ' ' . $upload->shortUrl();
+            }
+            Event::handle('EndSaveNewNoticeAppendAttachment', array($this, $upload, &$content_shortened, &$options));
 
             if (Notice::contentTooLong($content_shortened)) {
                 $upload->delete();
@@ -182,8 +185,6 @@ class NewnoticeAction extends Action
             }
         }
 
-        $options = array('reply_to' => ($replyto == 'false') ? null : $replyto);
-
         if ($user->shareLocation()) {
             // use browser data if checked; otherwise profile data
             if ($this->arg('notice_data-geo')) {
@@ -203,11 +204,20 @@ class NewnoticeAction extends Action
             $options = array_merge($options, $locOptions);
         }
 
-        $notice = Notice::saveNew($user->id, $content_shortened, 'web', $options);
+        $author_id = $user->id;
+        $text      = $content_shortened;
 
-        if (isset($upload)) {
-            $upload->attachToNotice($notice);
+        if (Event::handle('StartNoticeSaveWeb', array($this, &$author_id, &$text, &$options))) {
+
+            $notice = Notice::saveNew($user->id, $content_shortened, 'web', $options);
+
+            if (isset($upload)) {
+                $upload->attachToNotice($notice);
+            }
+
+            Event::handle('EndNoticeSaveWeb', array($this, $notice));
         }
+        Event::handle('EndSaveNewNoticeWeb', array($this, $user, &$content_shortened, &$options));
 
         if ($this->boolean('ajax')) {
             header('Content-Type: text/xml;charset=utf-8');
index 0eeebfadf374aa7e61c89ca7f56f524f77b15bcb..5a70f70b6461c16b888301fc53d1213590e57d57 100644 (file)
@@ -121,16 +121,19 @@ class Notice extends Memcached_DataObject
             $deleted->insert();
         }
 
-        // Clear related records
+        if (Event::handle('NoticeDeleteRelated', array($this))) {
 
-        $this->clearReplies();
-        $this->clearRepeats();
-        $this->clearFaves();
-        $this->clearTags();
-        $this->clearGroupInboxes();
+            // Clear related records
 
-        // NOTE: we don't clear inboxes
-        // NOTE: we don't clear queue items
+            $this->clearReplies();
+            $this->clearRepeats();
+            $this->clearFaves();
+            $this->clearTags();
+            $this->clearGroupInboxes();
+
+            // NOTE: we don't clear inboxes
+            // NOTE: we don't clear queue items
+        }
 
         $result = parent::delete();
 
@@ -245,6 +248,8 @@ class Notice extends Memcached_DataObject
         if (!empty($options)) {
             $options = $options + $defaults;
             extract($options);
+        } else {
+            extract($defaults);
         }
 
         if (!isset($is_local)) {
index 498a94e68a505450e7ecc62b73d052748bf96f44..d3eb644437f7b5ea6e6684fa5462e67d95bbbfa0 100644 (file)
@@ -120,3 +120,21 @@ create table inbox (
 
 );
 
+create table user_location_prefs (
+    user_id integer not null /*comment 'user who has the preference'*/ references "user" (id),
+    share_location int default 1 /* comment 'Whether to share location data'*/,
+    created timestamp not null /*comment 'date this record was created'*/,
+    modified timestamp /* comment 'date this record was modified'*/,
+
+    primary key (user_id)
+);
+create table inbox (
+
+    user_id integer not null /* comment 'user receiving the notice' */ references "user" (id),
+    notice_ids bytea /* comment 'packed list of notice ids' */,
+
+    primary key (user_id)
+
+);
+
index 6a67da4bcd25ac82bac1cc13a1854b59dd1c0129..ad8a44c82ad5d9fa76fe47197bb30796d45a685f 100644 (file)
@@ -110,7 +110,7 @@ var SN = { // StatusNet
                 return;
             }
 
-            var remaining = MaxLength - form.find('#'+SN.C.S.NoticeDataText).val().length;
+            var remaining = MaxLength - SN.U.CharacterCount(form);
             var counter = form.find('#'+SN.C.S.NoticeTextCount);
 
             if (remaining.toString() != counter.text()) {
@@ -134,6 +134,10 @@ var SN = { // StatusNet
             }
         },
 
+        CharacterCount: function(form) {
+            return form.find('#'+SN.C.S.NoticeDataText).val().length;
+        },
+
         ClearCounterBlackout: function(form) {
             // Allow keyup events to poke the counter again
             SN.C.I.CounterBlackout = false;
index 479a86ad8046f8a324fb39b2798a47b3cca1de14..cc98b9b6ec57d380c2a33637a11c4f19cd5d53b6 100644 (file)
@@ -462,66 +462,71 @@ class ApiAction extends Action
 
     function twitterRssEntryArray($notice)
     {
-        $profile = $notice->getProfile();
-
         $entry = array();
 
-        // We trim() to avoid extraneous whitespace in the output
+        if (Event::handle('StartRssEntryArray', array($notice, &$entry))) {
 
-        $entry['content'] = common_xml_safe_str(trim($notice->rendered));
-        $entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content));
-        $entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
-        $entry['published'] = common_date_iso8601($notice->created);
+            $profile = $notice->getProfile();
 
-        $taguribase = TagURI::base();
-        $entry['id'] = "tag:$taguribase:$entry[link]";
+            // We trim() to avoid extraneous whitespace in the output
 
-        $entry['updated'] = $entry['published'];
-        $entry['author'] = $profile->getBestName();
+            $entry['content'] = common_xml_safe_str(trim($notice->rendered));
+            $entry['title'] = $profile->nickname . ': ' . common_xml_safe_str(trim($notice->content));
+            $entry['link'] = common_local_url('shownotice', array('notice' => $notice->id));
+            $entry['published'] = common_date_iso8601($notice->created);
 
-        // Enclosures
-        $attachments = $notice->attachments();
-        $enclosures = array();
-
-        foreach ($attachments as $attachment) {
-            $enclosure_o=$attachment->getEnclosure();
-            if ($enclosure_o) {
-                 $enclosure = array();
-                 $enclosure['url'] = $enclosure_o->url;
-                 $enclosure['mimetype'] = $enclosure_o->mimetype;
-                 $enclosure['size'] = $enclosure_o->size;
-                 $enclosures[] = $enclosure;
-            }
-        }
+            $taguribase = TagURI::base();
+            $entry['id'] = "tag:$taguribase:$entry[link]";
 
-        if (!empty($enclosures)) {
-            $entry['enclosures'] = $enclosures;
-        }
+            $entry['updated'] = $entry['published'];
+            $entry['author'] = $profile->getBestName();
+
+            // Enclosures
+            $attachments = $notice->attachments();
+            $enclosures = array();
+
+            foreach ($attachments as $attachment) {
+                $enclosure_o=$attachment->getEnclosure();
+                if ($enclosure_o) {
+                    $enclosure = array();
+                    $enclosure['url'] = $enclosure_o->url;
+                    $enclosure['mimetype'] = $enclosure_o->mimetype;
+                    $enclosure['size'] = $enclosure_o->size;
+                    $enclosures[] = $enclosure;
+                }
+            }
 
-        // Tags/Categories
-        $tag = new Notice_tag();
-        $tag->notice_id = $notice->id;
-        if ($tag->find()) {
-            $entry['tags']=array();
-            while ($tag->fetch()) {
-                $entry['tags'][]=$tag->tag;
+            if (!empty($enclosures)) {
+                $entry['enclosures'] = $enclosures;
             }
-        }
-        $tag->free();
 
-        // RSS Item specific
-        $entry['description'] = $entry['content'];
-        $entry['pubDate'] = common_date_rfc2822($notice->created);
-        $entry['guid'] = $entry['link'];
+            // Tags/Categories
+            $tag = new Notice_tag();
+            $tag->notice_id = $notice->id;
+            if ($tag->find()) {
+                $entry['tags']=array();
+                while ($tag->fetch()) {
+                    $entry['tags'][]=$tag->tag;
+                }
+            }
+            $tag->free();
+
+            // RSS Item specific
+            $entry['description'] = $entry['content'];
+            $entry['pubDate'] = common_date_rfc2822($notice->created);
+            $entry['guid'] = $entry['link'];
+
+            if (isset($notice->lat) && isset($notice->lon)) {
+                // This is the format that GeoJSON expects stuff to be in.
+                // showGeoRSS() below uses it for XML output, so we reuse it
+                $entry['geo'] = array('type' => 'Point',
+                                      'coordinates' => array((float) $notice->lat,
+                                                             (float) $notice->lon));
+            } else {
+                $entry['geo'] = null;
+            }
 
-        if (isset($notice->lat) && isset($notice->lon)) {
-            // This is the format that GeoJSON expects stuff to be in.
-            // showGeoRSS() below uses it for XML output, so we reuse it
-            $entry['geo'] = array('type' => 'Point',
-                                  'coordinates' => array((float) $notice->lat,
-                                                         (float) $notice->lon));
-        } else {
-            $entry['geo'] = null;
+            Event::handle('EndRssEntryArray', array($notice, &$entry));
         }
 
         return $entry;
index a769dc1fc641275c8dbb45afa899d28d9a9abe72..2b61a0c80878cfb5330a51eff89d7dc4978d6be2 100644 (file)
@@ -49,7 +49,7 @@ class Command
         }
     }
 
-    
+
     /**
      * Override this with the meat!
      *
@@ -80,15 +80,16 @@ class Command
 
                 $notice = Notice::staticGet(substr($arg,1));
                 if (!$notice) {
-                    throw new CommandException(_('Notice with that id does not exist'));
+                    // TRANS: Command exception text shown when a notice ID is requested that does not exist.
+                    throw new CommandException(_('Notice with that id does not exist.'));
                 }
             }
-            
+
             if (Validate::uri($this->other)) {
                 // A specific notice by URI lookup
                 $notice = Notice::staticGet('uri', $arg);
             }
-            
+
             if (!$notice) {
                 // Local or remote profile name to get their last notice.
                 // May throw an exception and report 'no such user'
@@ -96,13 +97,15 @@ class Command
 
                 $notice = $recipient->getCurrentNotice();
                 if (!$notice) {
-                    throw new CommandException(_('User has no last notice'));
+                    // TRANS: Command exception text shown when a last user notice is requested and it does not exist.
+                    throw new CommandException(_('User has no last notice.'));
                 }
             }
         }
         Event::handle('EndCommandGetNotice', array($this, $arg, &$notice));
         if (!$notice) {
-            throw new CommandException(_('Notice with that id does not exist'));
+            // TRANS: Command exception text shown when a notice ID is requested that does not exist.
+            throw new CommandException(_('Notice with that id does not exist.'));
         }
         return $notice;
     }
@@ -124,7 +127,7 @@ class Command
         if (!$profile) {
             // TRANS: Message given requesting a profile for a non-existing user.
             // TRANS: %s is the nickname of the user for which the profile could not be found.
-            throw new CommandException(sprintf(_('Could not find a user with nickname %s'), $arg));
+            throw new CommandException(sprintf(_('Could not find a user with nickname %s.'), $arg));
         }
         return $profile;
     }
@@ -144,7 +147,7 @@ class Command
         if (!$user){
             // TRANS: Message given getting a non-existing user.
             // TRANS: %s is the nickname of the user that could not be found.
-            throw new CommandException(sprintf(_('Could not find a local user with nickname %s'),
+            throw new CommandException(sprintf(_('Could not find a local user with nickname %s.'),
                                $arg));
         }
         return $user;
@@ -163,6 +166,7 @@ class Command
         }
         Event::handle('EndCommandGetGroup', array($this, $arg, &$group));
         if (!$group) {
+            // TRANS: Command exception text shown when a group is requested that does not exist.
             throw new CommandException(_('No such group.'));
         }
         return $group;
@@ -177,6 +181,7 @@ class UnimplementedCommand extends Command
 {
     function handle($channel)
     {
+        // TRANS: Error text shown when an unimplemented command is given.
         $channel->error($this->user, _("Sorry, this command is not yet implemented."));
     }
 }
@@ -222,6 +227,7 @@ class NudgeCommand extends Command
     {
         $recipient = $this->getUser($this->other);
         if ($recipient->id == $this->user->id) {
+            // TRANS: Command exception text shown when a user tries to nudge themselves.
             throw new CommandException(_('It does not make a lot of sense to nudge yourself!'));
         } else {
             if ($recipient->email && $recipient->emailnotifynudge) {
@@ -231,7 +237,7 @@ class NudgeCommand extends Command
             // XXX: notify by SMS
             // TRANS: Message given having nudged another user.
             // TRANS: %s is the nickname of the user that was nudged.
-            $channel->output($this->user, sprintf(_('Nudge sent to %s'),
+            $channel->output($this->user, sprintf(_('Nudge sent to %s.'),
                            $recipient->nickname));
         }
     }
@@ -257,6 +263,10 @@ class StatsCommand extends Command
         $subbed_count = $profile->subscriberCount();
         $notice_count = $profile->noticeCount();
 
+        // TRANS: User statistics text.
+        // TRANS: %1$s is the number of other user the user is subscribed to.
+        // TRANS: %2$s is the number of users that are subscribed to the user.
+        // TRANS: %3$s is the number of notices the user has sent.
         $channel->output($this->user, sprintf(_("Subscriptions: %1\$s\n".
                                    "Subscribers: %2\$s\n".
                                    "Notices: %3\$s"),
@@ -282,6 +292,7 @@ class FavCommand extends Command
         $fave = Fave::addNew($this->user->getProfile(), $notice);
 
         if (!$fave) {
+            // TRANS: Error message text shown when a favorite could not be set.
             $channel->error($this->user, _('Could not create favorite.'));
             return;
         }
@@ -299,6 +310,7 @@ class FavCommand extends Command
 
         $this->user->blowFavesCache();
 
+        // TRANS: Text shown when a notice has been marked as favourite successfully.
         $channel->output($this->user, _('Notice marked as fave.'));
     }
 
@@ -320,10 +332,12 @@ class JoinCommand extends Command
         $cur   = $this->user;
 
         if ($cur->isMember($group)) {
-            $channel->error($cur, _('You are already a member of that group'));
+            // TRANS: Error text shown a user tries to join a group they already are a member of.
+            $channel->error($cur, _('You are already a member of that group.'));
             return;
         }
         if (Group_block::isBlocked($group, $cur->getProfile())) {
+            // TRANS: Error text shown when a user tries to join a group they are blocked from joining.
           $channel->error($cur, _('You have been blocked from that group by the admin.'));
             return;
         }
@@ -336,14 +350,14 @@ class JoinCommand extends Command
         } catch (Exception $e) {
             // TRANS: Message given having failed to add a user to a group.
             // TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-            $channel->error($cur, sprintf(_('Could not join user %1$s to group %2$s'),
+            $channel->error($cur, sprintf(_('Could not join user %1$s to group %2$s.'),
                                           $cur->nickname, $group->nickname));
             return;
         }
 
         // TRANS: Message given having added a user to a group.
         // TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-        $channel->output($cur, sprintf(_('%1$s joined group %2$s'),
+        $channel->output($cur, sprintf(_('%1$s joined group %2$s.'),
                                               $cur->nickname,
                                               $group->nickname));
     }
@@ -365,11 +379,13 @@ class DropCommand extends Command
         $cur   = $this->user;
 
         if (!$group) {
+            // TRANS: Error text shown when trying to leave a group that does not exist.
             $channel->error($cur, _('No such group.'));
             return;
         }
 
         if (!$cur->isMember($group)) {
+            // TRANS: Error text shown when trying to leave an existing group the user is not a member of.
             $channel->error($cur, _('You are not a member of that group.'));
             return;
         }
@@ -382,14 +398,14 @@ class DropCommand extends Command
         } catch (Exception $e) {
             // TRANS: Message given having failed to remove a user from a group.
             // TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-            $channel->error($cur, sprintf(_('Could not remove user %1$s from group %2$s'),
+            $channel->error($cur, sprintf(_('Could not remove user %1$s from group %2$s.'),
                                           $cur->nickname, $group->nickname));
             return;
         }
 
         // TRANS: Message given having removed a user from a group.
         // TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-        $channel->output($cur, sprintf(_('%1$s left group %2$s'),
+        $channel->output($cur, sprintf(_('%1$s left group %2$s.'),
                                               $cur->nickname,
                                               $group->nickname));
     }
@@ -454,12 +470,14 @@ class MessageCommand extends Command
             } catch (CommandException $f) {
                 throw $e;
             }
+            // TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
             throw new CommandException(sprintf(_('%s is a remote profile; you can only send direct messages to users on the same server.'), $this->other));
         }
 
         $len = mb_strlen($this->text);
 
         if ($len == 0) {
+            // TRANS: Command exception text shown when trying to send a direct message to another user without content.
             $channel->error($this->user, _('No content!'));
             return;
         }
@@ -467,20 +485,24 @@ class MessageCommand extends Command
         $this->text = common_shorten_links($this->text);
 
         if (Message::contentTooLong($this->text)) {
+            // XXX: i18n. Needs plural support.
             // TRANS: Message given if content is too long.
             // TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-            $channel->error($this->user, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d'),
+            $channel->error($this->user, sprintf(_('Message too long - maximum is %1$d characters, you sent %2$d.'),
                                                  Message::maxContent(), mb_strlen($this->text)));
             return;
         }
 
         if (!$other) {
+            // TRANS: Error text shown when trying to send a direct message to a user that does not exist.
             $channel->error($this->user, _('No such user.'));
             return;
         } else if (!$this->user->mutuallySubscribed($other)) {
+            // TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
             $channel->error($this->user, _('You can\'t send a message to this user.'));
             return;
         } else if ($this->user->id == $other->id) {
+            // TRANS: Error text shown when trying to send a direct message to self.
             $channel->error($this->user, _('Don\'t send a message to yourself; just say it to yourself quietly instead.'));
             return;
         }
@@ -489,8 +511,9 @@ class MessageCommand extends Command
             $message->notify();
             // TRANS: Message given have sent a direct message to another user.
             // TRANS: %s is the name of the other user.
-            $channel->output($this->user, sprintf(_('Direct message to %s sent'), $this->other));
+            $channel->output($this->user, sprintf(_('Direct message to %s sent.'), $this->other));
         } else {
+            // TRANS: Error text shown sending a direct message fails with an unknown reason.
             $channel->error($this->user, _('Error sending direct message.'));
         }
     }
@@ -511,12 +534,14 @@ class RepeatCommand extends Command
 
         if($this->user->id == $notice->profile_id)
         {
-            $channel->error($this->user, _('Cannot repeat your own notice'));
+            // TRANS: Error text shown when trying to repeat an own notice.
+            $channel->error($this->user, _('Cannot repeat your own notice.'));
             return;
         }
 
         if ($this->user->getProfile()->hasRepeated($notice->id)) {
-            $channel->error($this->user, _('Already repeated that notice'));
+            // TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+            $channel->error($this->user, _('Already repeated that notice.'));
             return;
         }
 
@@ -526,8 +551,9 @@ class RepeatCommand extends Command
 
             // TRANS: Message given having repeated a notice from another user.
             // TRANS: %s is the name of the user for which the notice was repeated.
-            $channel->output($this->user, sprintf(_('Notice from %s repeated'), $recipient->nickname));
+            $channel->output($this->user, sprintf(_('Notice from %s repeated.'), $recipient->nickname));
         } else {
+            // TRANS: Error text shown when repeating a notice fails with an unknown reason.
             $channel->error($this->user, _('Error repeating notice.'));
         }
     }
@@ -552,6 +578,7 @@ class ReplyCommand extends Command
         $len = mb_strlen($this->text);
 
         if ($len == 0) {
+            // TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
             $channel->error($this->user, _('No content!'));
             return;
         }
@@ -559,7 +586,10 @@ class ReplyCommand extends Command
         $this->text = common_shorten_links($this->text);
 
         if (Notice::contentTooLong($this->text)) {
-            $channel->error($this->user, sprintf(_('Notice too long - maximum is %d characters, you sent %d'),
+            // XXX: i18n. Needs plural support.
+            // TRANS: Message given if content of a notice for a reply is too long.
+            // TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+            $channel->error($this->user, sprintf(_('Notice too long - maximum is %1$d characters, you sent %2$d.'),
                                                  Notice::maxContent(), mb_strlen($this->text)));
             return;
         }
@@ -568,8 +598,11 @@ class ReplyCommand extends Command
                                   array('reply_to' => $notice->id));
 
         if ($notice) {
-            $channel->output($this->user, sprintf(_('Reply to %s sent'), $recipient->nickname));
+            // TRANS: Text shown having sent a reply to a notice successfully.
+            // TRANS: %s is the nickname of the user of the notice the reply was sent to.
+            $channel->output($this->user, sprintf(_('Reply to %s sent.'), $recipient->nickname));
         } else {
+            // TRANS: Error text shown when a reply to a notice fails with an unknown reason.
             $channel->error($this->user, _('Error saving notice.'));
         }
 
@@ -593,7 +626,8 @@ class GetCommand extends Command
 
         $notice = $target->getCurrentNotice();
         if (!$notice) {
-            $channel->error($this->user, _('User has no last notice'));
+            // TRANS: Error text shown when a last user notice is requested and it does not exist.
+            $channel->error($this->user, _('User has no last notice.'));
             return;
         }
         $notice_content = $notice->content;
@@ -617,7 +651,8 @@ class SubCommand extends Command
     {
 
         if (!$this->other) {
-            $channel->error($this->user, _('Specify the name of the user to subscribe to'));
+            // TRANS: Error text shown when no username was provided when issuing a subscribe command.
+            $channel->error($this->user, _('Specify the name of the user to subscribe to.'));
             return;
         }
 
@@ -625,13 +660,16 @@ class SubCommand extends Command
 
         $remote = Remote_profile::staticGet('id', $target->id);
         if ($remote) {
+            // TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
             throw new CommandException(_("Can't subscribe to OMB profiles by command."));
         }
 
         try {
             Subscription::start($this->user->getProfile(),
                                 $target);
-            $channel->output($this->user, sprintf(_('Subscribed to %s'), $this->other));
+            // TRANS: Text shown after having subscribed to another user successfully.
+            // TRANS: %s is the name of the user the subscription was requested for.
+            $channel->output($this->user, sprintf(_('Subscribed to %s.'), $this->other));
         } catch (Exception $e) {
             $channel->error($this->user, $e->getMessage());
         }
@@ -652,7 +690,8 @@ class UnsubCommand extends Command
     function handle($channel)
     {
         if(!$this->other) {
-            $channel->error($this->user, _('Specify the name of the user to unsubscribe from'));
+            // TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+            $channel->error($this->user, _('Specify the name of the user to unsubscribe from.'));
             return;
         }
 
@@ -661,7 +700,9 @@ class UnsubCommand extends Command
         try {
             Subscription::cancel($this->user->getProfile(),
                                  $target);
-            $channel->output($this->user, sprintf(_('Unsubscribed from %s'), $this->other));
+            // TRANS: Text shown after having unsubscribed from another user successfully.
+            // TRANS: %s is the name of the user the unsubscription was requested for.
+            $channel->output($this->user, sprintf(_('Unsubscribed from %s.'), $this->other));
         } catch (Exception $e) {
             $channel->error($this->user, $e->getMessage());
         }
@@ -679,11 +720,14 @@ class OffCommand extends Command
     function handle($channel)
     {
         if ($other) {
+            // TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
             $channel->error($this->user, _("Command not yet implemented."));
         } else {
             if ($channel->off($this->user)) {
+                // TRANS: Text shown when issuing the command "off" successfully.
                 $channel->output($this->user, _('Notification off.'));
             } else {
+                // TRANS: Error text shown when the command "off" fails for an unknown reason.
                 $channel->error($this->user, _('Can\'t turn off notification.'));
             }
         }
@@ -702,11 +746,14 @@ class OnCommand extends Command
     function handle($channel)
     {
         if ($other) {
+            // TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
             $channel->error($this->user, _("Command not yet implemented."));
         } else {
             if ($channel->on($this->user)) {
+                // TRANS: Text shown when issuing the command "on" successfully.
                 $channel->output($this->user, _('Notification on.'));
             } else {
+                // TRANS: Error text shown when the command "on" fails for an unknown reason.
                 $channel->error($this->user, _('Can\'t turn on notification.'));
             }
         }
@@ -720,7 +767,8 @@ class LoginCommand extends Command
         $disabled = common_config('logincommand','disabled');
         $disabled = isset($disabled) && $disabled;
         if($disabled) {
-            $channel->error($this->user, _('Login command is disabled'));
+            // TRANS: Error text shown when issuing the login command while login is disabled.
+            $channel->error($this->user, _('Login command is disabled.'));
             return;
         }
 
@@ -731,7 +779,9 @@ class LoginCommand extends Command
         }
 
         $channel->output($this->user,
-            sprintf(_('This link is useable only once, and is good for only 2 minutes: %s'),
+            // TRANS: Text shown after issuing the login command successfully.
+            // TRANS: %s is a logon link..
+            sprintf(_('This link is useable only once and is valid for only 2 minutes: %s.'),
                     common_local_url('otp',
                         array('user_id' => $login_token->user_id, 'token' => $login_token->token))));
     }
@@ -739,7 +789,6 @@ class LoginCommand extends Command
 
 class LoseCommand extends Command
 {
-
     var $other = null;
 
     function __construct($user, $other)
@@ -751,14 +800,17 @@ class LoseCommand extends Command
     function execute($channel)
     {
         if(!$this->other) {
-            $channel->error($this->user, _('Specify the name of the user to unsubscribe from'));
+            // TRANS: Error text shown when no username was provided when issuing the command.
+            $channel->error($this->user, _('Specify the name of the user to unsubscribe from.'));
             return;
         }
 
         $result = Subscription::cancel($this->getProfile($this->other), $this->user->getProfile());
 
         if ($result) {
-            $channel->output($this->user, sprintf(_('Unsubscribed  %s'), $this->other));
+            // TRANS: Text shown after issuing the lose command successfully (stop another user from following the current user).
+            // TRANS: %s is the name of the user the unsubscription was requested for.
+            $channel->output($this->user, sprintf(_('Unsubscribed %s.'), $this->other));
         } else {
             $channel->error($this->user, $result);
         }
@@ -775,8 +827,12 @@ class SubscriptionsCommand extends Command
             $nicknames[]=$profile->nickname;
         }
         if(count($nicknames)==0){
+            // TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
             $out=_('You are not subscribed to anyone.');
         }else{
+            // TRANS: Text shown after requesting other users a user is subscribed to.
+            // TRANS: This message support plural forms. This message is followed by a
+            // TRANS: hard coded space and a comma separated list of subscribed users.
             $out = ngettext('You are subscribed to this person:',
                 'You are subscribed to these people:',
                 count($nicknames));
@@ -797,8 +853,13 @@ class SubscribersCommand extends Command
             $nicknames[]=$profile->nickname;
         }
         if(count($nicknames)==0){
+            // TRANS: Text shown after requesting other users that are subscribed to a user
+            // TRANS: (followers) without having any subscribers.
             $out=_('No one is subscribed to you.');
         }else{
+            // TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+            // TRANS: This message support plural forms. This message is followed by a
+            // TRANS: hard coded space and a comma separated list of subscribing users.
             $out = ngettext('This person is subscribed to you:',
                 'These people are subscribed to you:',
                 count($nicknames));
@@ -819,8 +880,13 @@ class GroupsCommand extends Command
             $groups[]=$group->nickname;
         }
         if(count($groups)==0){
+            // TRANS: Text shown after requesting groups a user is subscribed to without having
+            // TRANS: any group subscriptions.
             $out=_('You are not a member of any groups.');
         }else{
+            // TRANS: Text shown after requesting groups a user is subscribed to.
+            // TRANS: This message support plural forms. This message is followed by a
+            // TRANS: hard coded space and a comma separated list of subscribed groups.
             $out = ngettext('You are a member of this group:',
                 'You are a member of these groups:',
                 count($nicknames));
@@ -834,6 +900,7 @@ class HelpCommand extends Command
 {
     function handle($channel)
     {
+       // TRANS: Help text for commands.
         $channel->output($this->user,
                          _("Commands:\n".
                            "on - turn on notifications\n".
index 84c20a5b3ff1ed13d49695113b661f74fd67f0ec..514066356933ad0a32400a8b73e74a37b9c9d1fa 100644 (file)
@@ -169,7 +169,8 @@ class NoticeForm extends Form
     function formData()
     {
         if (Event::handle('StartShowNoticeFormData', array($this))) {
-            $this->out->element('label', array('for' => 'notice_data-text'),
+            $this->out->element('label', array('for' => 'notice_data-text',
+                                               'id' => 'notice_data-text-label'),
                                 sprintf(_('What\'s up, %s?'), $this->user->nickname));
             // XXX: vary by defined max size
             $this->out->element('textarea', array('id' => 'notice_data-text',
index 6744d2529df8b5d277e37b8b95e8c5f0eba60353..e0186fef971a05664bfc98a33984ca83789e5325 100644 (file)
@@ -55,7 +55,9 @@ class UserNoProfileException extends ServerException
     {
         $this->user = $user;
 
-        $message = sprintf(_("User %s (%d) has no profile record."),
+        // TRANS: Exception text shown when no profile can be found for a user.
+        // TRANS: %1$s is a user nickname, $2$d is a user ID (number).
+        $message = sprintf(_("User %1$s (%2$d) has no profile record."),
                            $user->nickname, $user->id);
 
         parent::__construct($message);
index cf8caed59667e2ac6cd45e05751c94e84e50f67f..96b0d87fbfab840dca7220d5e4e121de97f75039 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:11:11+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:28:42+0000\n"
 "Language-Team: Afrikaans\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: af\n"
 "X-Message-Group: out-statusnet\n"
@@ -88,6 +88,7 @@ msgstr "Stoor"
 msgid "No such page."
 msgstr "Hierdie bladsy bestaan nie."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -107,7 +108,7 @@ msgstr "Hierdie bladsy bestaan nie."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Onbekende gebruiker."
@@ -340,7 +341,8 @@ msgstr "Geen status met die ID gevind nie."
 msgid "This status is already a favorite."
 msgstr "Hierdie status is reeds 'n gunsteling."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Dit was nie moontlik om 'n gunsteling te skep nie."
 
@@ -376,16 +378,6 @@ msgstr "U kan nie ophou om uself te volg nie."
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-#, fuzzy
-msgid "Could not determine source user."
-msgstr "Kon nie die gebruiker opdateer nie."
-
-#: actions/apifriendshipsshow.php:142
-#, fuzzy
-msgid "Could not find target user."
-msgstr "Kon nie die gebruiker opdateer nie."
-
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
 #: actions/register.php:212
@@ -437,11 +429,6 @@ msgstr "Ligging is te lank is (maksimum 255 karakters)."
 msgid "Too many aliases! Maximum %d."
 msgstr "Te veel aliasse! Die maksimum aantal is %d."
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "Ongeldige alias: \"%s\""
-
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
 #, php-format
@@ -456,32 +443,23 @@ msgstr "Die alias kan nie dieselfde as die gebruikersnaam wees nie."
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
 msgstr "Nie gevind nie."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "U is reeds 'n lid van die groep."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr ""
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s."
-msgstr "Dit was nie moontlik om die groep by te werk nie."
-
 #: actions/apigroupleave.php:115
 msgid "You are not a member of this group."
 msgstr "U is nie 'n lid van die groep nie."
 
-#: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s."
-msgstr "Kon nie die groep skep nie."
-
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
 #, php-format
@@ -506,11 +484,6 @@ msgstr "%s groepe"
 msgid "groups on %s"
 msgstr "groepe op %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Die deblokkering van die gebruiker het gefaal."
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
@@ -541,11 +514,6 @@ msgstr ""
 msgid "Invalid nickname / password!"
 msgstr "Ongeldige gebruikersnaam of wagwoord!"
 
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Moenie die applikasie verwyder nie"
-
 #: actions/apioauthauthorize.php:185
 msgid "Database error inserting OAuth application user."
 msgstr ""
@@ -634,11 +602,13 @@ msgstr "U mag nie 'n ander gebruiker se status verwyder nie."
 msgid "No such notice."
 msgstr "Die kennisgewing bestaan nie."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "U kan nie u eie kennisgewings herhaal nie."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "U het reeds die kennisgewing herhaal."
 
@@ -654,7 +624,7 @@ msgstr "Geen status met die ID gevind nie."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -664,7 +634,7 @@ msgstr "Die kennisgewing is te lank. Gebruik maksimum %d karakters."
 msgid "Not found."
 msgstr "Nie gevind nie."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -678,26 +648,11 @@ msgstr "Nie-ondersteunde formaat."
 msgid "%1$s / Favorites from %2$s"
 msgstr "%1$s / Gunstelinge van %2$s"
 
-#: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%1$s / Gunstelinge van %2$s"
-
-#: actions/apitimelinementions.php:118
-#, fuzzy, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Gunstelinge van %2$s"
-
 #: actions/apitimelinementions.php:131
 #, php-format
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
 msgstr ""
 
-#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
-#, fuzzy, php-format
-msgid "%s public timeline"
-msgstr "%s tydlyn"
-
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
@@ -713,21 +668,6 @@ msgstr "Na %s herhaal"
 msgid "Repeats of %s"
 msgstr "Herhalings van %s"
 
-#: actions/apitimelinetag.php:105 actions/tag.php:67
-#, fuzzy, php-format
-msgid "Notices tagged with %s"
-msgstr "met die etiket %s"
-
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Opdaterings van %1$s op %2$s."
-
-#: actions/apitrends.php:87
-#, fuzzy
-msgid "API method under construction."
-msgstr "Die API-funksie is nie gevind nie."
-
 #: actions/attachment.php:73
 msgid "No such attachment."
 msgstr "Die aanhangsel bestaan nie."
@@ -758,13 +698,6 @@ msgstr "Avatar"
 msgid "You can upload your personal avatar. The maximum file size is %s."
 msgstr ""
 
-#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
-#: actions/grouplogo.php:181 actions/remotesubscribe.php:191
-#: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
-msgid "User without matching profile."
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
 msgid "Avatar settings"
@@ -871,6 +804,8 @@ msgstr "Blokkeer hierdie gebruiker"
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -880,26 +815,11 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Die groep bestaan nie."
 
-#: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
-msgid "%s blocked profiles"
-msgstr "%s geblokkeerde gebruikers"
-
-#: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
-msgid "%1$s blocked profiles, page %2$d"
-msgstr "%1$s en vriende, bladsy %2$d"
-
-#: actions/blockedfromgroup.php:115
-#, fuzzy
-msgid "A list of the users blocked from joining this group."
-msgstr "Blok hierdie gebruiker van hierdie groep"
-
 #: actions/blockedfromgroup.php:288
 msgid "Unblock user from group"
 msgstr "Gee gebruiker weer toegang tot die groep"
@@ -914,7 +834,7 @@ msgstr "Deblokkeer hierdie gebruiker"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
 msgstr "groepe op %s"
 
@@ -922,28 +842,12 @@ msgstr "groepe op %s"
 msgid "No confirmation code."
 msgstr "Geen bevestigingskode."
 
-#: actions/confirmaddress.php:80
-#, fuzzy
-msgid "Confirmation code not found."
-msgstr "Geen bevestigingskode."
-
-#: actions/confirmaddress.php:85
-#, fuzzy
-msgid "That confirmation code is not for you!"
-msgstr "Geen bevestigingskode."
-
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
 #, php-format
 msgid "Unrecognized address type %s."
 msgstr ""
 
-#. TRANS: Client error for an already confirmed email/jabbel/sms address.
-#: actions/confirmaddress.php:96
-#, fuzzy
-msgid "That address has already been confirmed."
-msgstr "Die E-posadres bestaan reeds."
-
 #. TRANS: Server error thrown on database error updating e-mail preferences.
 #. TRANS: Server error thrown on database error removing a registered e-mail address.
 #. TRANS: Server error thrown on database error updating IM preferences.
@@ -1101,7 +1005,7 @@ msgid "Invalid logo URL."
 msgstr "Die logo-URL is ongeldig."
 
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
 msgstr "IM is nie beskikbaar nie."
 
@@ -1125,11 +1029,6 @@ msgstr "Werf se tema"
 msgid "Theme for the site."
 msgstr "Tema vir die werf."
 
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "Werf se tema"
-
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
@@ -1160,16 +1059,6 @@ msgstr "Aan"
 msgid "Off"
 msgstr "Af"
 
-#: actions/designadminpanel.php:545 lib/designsettings.php:156
-#, fuzzy
-msgid "Turn background image on or off."
-msgstr "Verander die agtergrond-prent"
-
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-#, fuzzy
-msgid "Tile background image"
-msgstr "Verander die agtergrond-prent"
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "Verander kleure"
@@ -1202,11 +1091,6 @@ msgstr ""
 msgid "Use defaults"
 msgstr "Gebruik verstekwaardes"
 
-#: actions/designadminpanel.php:677 lib/designsettings.php:248
-#, fuzzy
-msgid "Restore default designs"
-msgstr "Gebruik verstekwaardes"
-
 #: actions/designadminpanel.php:683 lib/designsettings.php:254
 msgid "Reset back to default"
 msgstr "Stel terug na standaard"
@@ -1437,7 +1321,6 @@ msgstr "Nuut"
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
 msgstr "E-posadresse"
 
@@ -1471,29 +1354,16 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr ""
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-#, fuzzy
-msgid "Publish a MicroID for my email address."
-msgstr "Dit is nie u e-posadres nie."
-
 #. TRANS: Confirmation message for successful e-mail preferences save.
 #: actions/emailsettings.php:334
-#, fuzzy
 msgid "Email preferences saved."
-msgstr "Voorkeure is gestoor."
+msgstr "E-posadresse"
 
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
 msgstr "Geen e-posadres."
 
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-#, fuzzy
-msgid "Cannot normalize that email address"
-msgstr "Dit was nie moontlik om die Jabber-ID te normaliseer nie"
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
@@ -1505,20 +1375,13 @@ msgstr "Nie 'n geldige e-posadres nie."
 msgid "That is already your email address."
 msgstr "Dit is al reeds u e-posadres."
 
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-#, fuzzy
-msgid "That email address already belongs to another user."
-msgstr "Die Jabber-ID word reeds deur 'n ander gebruiker gebruik."
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
 #: actions/emailsettings.php:391 actions/imsettings.php:348
 #: actions/smssettings.php:373
-#, fuzzy
 msgid "Couldn't insert confirmation code."
-msgstr "Geen bevestigingskode."
+msgstr "Kon nie e-posbevestiging verwyder nie."
 
 #. TRANS: Message given saving valid e-mail address that is to be confirmed.
 #: actions/emailsettings.php:398
@@ -1527,24 +1390,8 @@ msgid ""
 "inbox (and spam box!) for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-#, fuzzy
-msgid "No pending confirmation to cancel."
-msgstr "Geen bevestigingskode."
-
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Dit is die verkeerde IM-adres."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
 msgstr "Geen bevestigingskode."
 
@@ -1556,7 +1403,6 @@ msgstr "Dit is nie u e-posadres nie."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
 msgstr "Inkomende e-posadres is verwyder."
 
@@ -1576,22 +1422,6 @@ msgstr "Kon nie gebruikersdata opdateer nie."
 msgid "Incoming email address removed."
 msgstr "Inkomende e-posadres is verwyder."
 
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-#, fuzzy
-msgid "New incoming email address added."
-msgstr "Geen inkomende e-posadres."
-
-#: actions/favor.php:79
-#, fuzzy
-msgid "This notice is already a favorite!"
-msgstr "Hierdie kennisgewing is nie 'n gunsteling nie!"
-
-#: actions/favor.php:92 lib/disfavorform.php:140
-#, fuzzy
-msgid "Disfavor favorite"
-msgstr "Voeg by gunstelinge"
-
 #: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
@@ -1629,11 +1459,6 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "%s se gunsteling kennisgewings"
 
-#: actions/favoritesrss.php:115
-#, fuzzy, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr "Opdaterings van %1$s op %2$s."
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1661,11 +1486,6 @@ msgstr "Geen kennisgewing."
 msgid "No attachments."
 msgstr "Geen aanhangsels."
 
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "Geen aanhangsels."
-
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr ""
@@ -1674,11 +1494,6 @@ msgstr ""
 msgid "User being listened to does not exist."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
-#, fuzzy
-msgid "You can use the local subscription!"
-msgstr "U kan slegs lokale gebruikers verwyder."
-
 #: actions/finishremotesubscribe.php:99
 msgid "That user has blocked you from subscribing."
 msgstr ""
@@ -1695,11 +1510,6 @@ msgstr ""
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Kon nie die profiel stoor nie."
-
 #: actions/getfile.php:79
 msgid "No such file."
 msgstr "Die lêer bestaan nie."
@@ -1716,16 +1526,6 @@ msgstr "Ongeldige rol."
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
-#: actions/grantrole.php:75
-#, fuzzy
-msgid "You cannot grant user roles on this site."
-msgstr "Jy kan nie gebruikers op hierdie webwerf stilmaak nie."
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "Hierdie gebruiker is reeds stilgemaak."
-
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
 #: lib/profileformaction.php:79
@@ -1747,16 +1547,6 @@ msgstr "Geen groep verskaf nie."
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-#, fuzzy
-msgid "User is already blocked from group."
-msgstr "Hierdie gebruiker is reeds stilgemaak."
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "U is nie 'n lid van die groep nie."
-
 #: actions/groupblock.php:134 actions/groupmembers.php:360
 msgid "Block user from group"
 msgstr "Blok gebruiker toegang tot die groep"
@@ -1769,53 +1559,21 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-#, fuzzy
-msgid "Do not block this user from this group"
-msgstr "Blok hierdie gebruiker van hierdie groep"
-
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
 msgid "Block this user from this group"
 msgstr "Blok hierdie gebruiker van hierdie groep"
 
-#: actions/groupblock.php:206
-#, fuzzy
-msgid "Database error blocking user from group."
-msgstr "Gee gebruiker weer toegang tot die groep"
-
 #: actions/groupbyid.php:74 actions/userbyid.php:70
 msgid "No ID."
 msgstr "Geen ID."
 
-#: actions/groupdesignsettings.php:68
-#, fuzzy
-msgid "You must be logged in to edit a group."
-msgstr "U moet aangeteken wees alvorens u 'n groep kan skep."
-
-#: actions/groupdesignsettings.php:144
-#, fuzzy
-msgid "Group design"
-msgstr "Groepe"
-
 #: actions/groupdesignsettings.php:155
 msgid ""
 "Customize the way your group looks with a background image and a colour "
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Dit was nie moontlik om u ontwerp by te werk nie."
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "Voorkeure is gestoor."
-
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
 msgstr "Groepslogo"
@@ -1843,16 +1601,6 @@ msgstr "Die opdatering van die logo het gefaal."
 msgid "%s group members"
 msgstr "lede van die groep %s"
 
-#: actions/groupmembers.php:103
-#, fuzzy, php-format
-msgid "%1$s group members, page %2$d"
-msgstr "%1$s groepe, bladsy %2$d"
-
-#: actions/groupmembers.php:118
-#, fuzzy
-msgid "A list of the users in this group."
-msgstr "Blok hierdie gebruiker van hierdie groep"
-
 #: actions/groupmembers.php:182 lib/groupnav.php:107
 msgid "Admin"
 msgstr "Administrateur"
@@ -1861,11 +1609,6 @@ msgstr "Administrateur"
 msgid "Block"
 msgstr "Blokkeer"
 
-#: actions/groupmembers.php:487
-#, fuzzy
-msgid "Make user an admin of the group"
-msgstr "U moet 'n administrateur wees alvorens u 'n groep kan wysig."
-
 #: actions/groupmembers.php:519
 msgid "Make Admin"
 msgstr "Maak Admin"
@@ -1883,12 +1626,6 @@ msgstr "Maak hierdie gebruiker 'n administrateur"
 msgid "%s timeline"
 msgstr "%s tydlyn"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "Opdaterings van %1$s op %2$s."
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
@@ -1920,11 +1657,6 @@ msgid ""
 "Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
 
-#: actions/groupsearch.php:58
-#, fuzzy
-msgid "Group search"
-msgstr "Soek gebruikers"
-
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
 msgid "No results."
@@ -1948,11 +1680,6 @@ msgstr ""
 msgid "Only an admin can unblock group members."
 msgstr ""
 
-#: actions/groupunblock.php:95
-#, fuzzy
-msgid "User is not blocked from group."
-msgstr "Gee gebruiker weer toegang tot die groep"
-
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
 msgstr ""
@@ -1983,11 +1710,6 @@ msgstr "IM is nie beskikbaar nie."
 msgid "IM address"
 msgstr "IP-adres"
 
-#: actions/imsettings.php:113
-#, fuzzy
-msgid "Current confirmed Jabber/GTalk address."
-msgstr "Huidige bevestigde e-posadres."
-
 #. TRANS: Form note in IM settings form.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:124
@@ -2008,7 +1730,6 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
 msgstr "Voorkeure is gestoor."
 
@@ -2078,13 +1799,11 @@ msgstr "Dit is die verkeerde IM-adres."
 
 #. TRANS: Server error thrown on database error canceling IM address confirmation.
 #: actions/imsettings.php:397
-#, fuzzy
 msgid "Couldn't delete IM confirmation."
 msgstr "Kon nie e-posbevestiging verwyder nie."
 
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
 msgstr "Geen bevestigingskode."
 
@@ -2096,20 +1815,9 @@ msgstr "Dit is nie u Jabber-ID nie."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
 msgstr "Inkomende e-posadres is verwyder."
 
-#: actions/inbox.php:59
-#, fuzzy, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr "%1$s, bladsy %2$d"
-
-#: actions/inbox.php:62
-#, fuzzy, php-format
-msgid "Inbox for %s"
-msgstr "Vriend van 'n vriend (FOAF) vir %s"
-
 #: actions/inbox.php:115
 msgid "This is your inbox, which lists your incoming private messages."
 msgstr ""
@@ -2118,33 +1826,18 @@ msgstr ""
 msgid "Invites have been disabled."
 msgstr ""
 
-#: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "U moet aanteken alvorens u by groep kan aansluit."
-
 #: actions/invite.php:72
 #, php-format
 msgid "Invalid email address: %s"
 msgstr "Ongeldige e-posadres: %s"
 
-#: actions/invite.php:110
-#, fuzzy
-msgid "Invitation(s) sent"
-msgstr "Uitnodigings"
-
 #: actions/invite.php:112
 msgid "Invite new users"
 msgstr "Nooi nuwe gebruikers"
 
-#: actions/invite.php:128
-#, fuzzy
-msgid "You are already subscribed to these users:"
-msgstr "U volg hierdie gebruiker:"
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2237,9 +1930,7 @@ msgstr "U moet aanteken alvorens u by groep kan aansluit."
 msgid "No nickname or ID."
 msgstr "Geen gebruikersnaam of ID nie."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s het by groep %2$s aangesluit"
@@ -2248,13 +1939,12 @@ msgstr "%1$s het by groep %2$s aangesluit"
 msgid "You must be logged in to leave a group."
 msgstr "U moet aanteken alvorens u 'n groep kan verlaat."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "U is nie 'n lid van daardie groep nie."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s het die groep %2$s verlaat"
@@ -2297,11 +1987,6 @@ msgid ""
 "changing your settings."
 msgstr ""
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Verkeerde gebruikersnaam of wagwoord."
-
 #: actions/login.php:295
 #, php-format
 msgid ""
@@ -2312,11 +1997,6 @@ msgstr ""
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, fuzzy, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "%1$s het die groep %2$s verlaat"
-
 #: actions/makeadmin.php:133
 #, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
@@ -2328,7 +2008,6 @@ msgid "Can't make %1$s an admin for group %2$s."
 msgstr ""
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
 msgstr "Geen resultate nie."
 
@@ -2336,16 +2015,6 @@ msgstr "Geen resultate nie."
 msgid "New Application"
 msgstr "Nuwe appplikasie"
 
-#: actions/newapplication.php:64
-#, fuzzy
-msgid "You must be logged in to register an application."
-msgstr "U moet aangeteken wees alvorens u 'n applikasie kan wysig."
-
-#: actions/newapplication.php:143
-#, fuzzy
-msgid "Use this form to register a new application."
-msgstr "Gebruik die vorm om u applikasie te wysig."
-
 #: actions/newapplication.php:176
 msgid "Source URL is required."
 msgstr "'n Bron-URL is verpligtend."
@@ -2358,21 +2027,19 @@ msgstr "Dit was nie moontlik om die applikasie te skep nie."
 msgid "New group"
 msgstr "Nuwe groep"
 
-#: actions/newgroup.php:110
-#, fuzzy
-msgid "Use this form to create a new group."
-msgstr "Gebruik hierdie vorm om die groep te wysig."
-
 #: actions/newmessage.php:71 actions/newmessage.php:231
 msgid "New message"
 msgstr "Nuwe boodskap"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "U kan nie 'n boodskap aan hierdie gebruiker stuur nie."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Geen inhoud nie!"
 
@@ -2380,7 +2047,8 @@ msgstr "Geen inhoud nie!"
 msgid "No recipient specified."
 msgstr "Geen ontvanger gespesifiseer nie."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2389,25 +2057,10 @@ msgstr ""
 msgid "Message sent"
 msgstr "Boodskap is gestuur."
 
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Direkte boodskappe aan %s"
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax-fout"
 
-#: actions/newnotice.php:69
-#, fuzzy
-msgid "New notice"
-msgstr "Geen kennisgewing."
-
-#: actions/newnotice.php:217
-#, fuzzy
-msgid "Notice posted"
-msgstr "Hierdie kennisgewing is verwyder."
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2419,11 +2072,6 @@ msgstr ""
 msgid "Text search"
 msgstr "Teks soektog"
 
-#: actions/noticesearch.php:91
-#, fuzzy, php-format
-msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Opdaterings van %1$s op %2$s."
-
 #: actions/noticesearch.php:121
 #, php-format
 msgid ""
@@ -2443,11 +2091,6 @@ msgstr ""
 msgid "Updates with \"%s\""
 msgstr "Opdaterings met \"%s\""
 
-#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
-msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Opdaterings van %1$s op %2$s."
-
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
@@ -2461,39 +2104,14 @@ msgstr "Die por is gestuur"
 msgid "Nudge sent!"
 msgstr "Die por is gestuur!"
 
-#: actions/oauthappssettings.php:59
-#, fuzzy
-msgid "You must be logged in to list your applications."
-msgstr "U moet aangeteken wees alvorens u 'n applikasie kan wysig."
-
-#: actions/oauthappssettings.php:74
-#, fuzzy
-msgid "OAuth applications"
-msgstr "Die applikasie bestaan nie."
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, fuzzy, php-format
-msgid "You have not registered any applications yet."
-msgstr "Dit was nie moontlik om die applikasie te skep nie."
-
-#: actions/oauthconnectionssettings.php:72
-#, fuzzy
-msgid "Connected applications"
-msgstr "Skrap applikasie"
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "U is nie die eienaar van hierdie applikasie nie."
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2507,11 +2125,6 @@ msgstr ""
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
-#: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
-msgid "Notice has no profile."
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
 msgid "%1$s's status on %2$s"
@@ -2529,27 +2142,10 @@ msgstr ""
 msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
-#. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
-#, fuzzy
-msgid "Not a supported data format."
-msgstr "Nie-ondersteunde formaat."
-
 #: actions/opensearch.php:64
 msgid "People Search"
 msgstr "Mense soek"
 
-#: actions/opensearch.php:67
-#, fuzzy
-msgid "Notice Search"
-msgstr "Mense soek"
-
-#: actions/othersettings.php:60
-#, fuzzy
-msgid "Other settings"
-msgstr "Avatar-instellings"
-
 #: actions/othersettings.php:71
 msgid "Manage various other options."
 msgstr ""
@@ -2566,54 +2162,14 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Wysig profiel-instellings"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Ligging is te lank is (maksimum 255 karakters)."
-
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "Geen groep verskaf nie."
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Geen profiel verskaf nie."
-
 #: actions/otp.php:90
 msgid "No login token requested."
 msgstr ""
 
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Ongeldige token."
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "Teken aan"
-
-#: actions/outbox.php:58
-#, fuzzy, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr "%1$s, bladsy %2$d"
-
-#: actions/outbox.php:61
-#, fuzzy, php-format
-msgid "Outbox for %s"
-msgstr "Vriend van 'n vriend (FOAF) vir %s"
-
 #: actions/outbox.php:116
 msgid "This is your outbox, which lists private messages you have sent."
 msgstr ""
@@ -2689,24 +2245,19 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
 msgstr "Tema-gids"
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Avatar-gids"
+msgstr "Tema-gids"
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
-msgid "Background directory not writable: %s."
-msgstr "Agtergrond-gids"
-
-#: actions/pathsadminpanel.php:177
 #, php-format
-msgid "Locales directory not readable: %s."
-msgstr ""
+msgid "Background directory not writable: %s."
+msgstr "Tema-gids"
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2728,11 +2279,6 @@ msgstr ""
 msgid "Path"
 msgstr "Pad"
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Werf se tema"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2829,11 +2375,6 @@ msgstr "SSL-bediener"
 msgid "Server to direct SSL requests to"
 msgstr ""
 
-#: actions/pathsadminpanel.php:352
-#, fuzzy
-msgid "Save paths"
-msgstr "Tema-pad"
-
 #: actions/peoplesearch.php:52
 #, php-format
 msgid ""
@@ -2845,31 +2386,16 @@ msgstr ""
 msgid "People search"
 msgstr "Soek gebruikers"
 
-#: actions/peopletag.php:68
-#, fuzzy, php-format
-msgid "Not a valid people tag: %s."
-msgstr "Nie 'n geldige e-posadres nie."
-
 #: actions/peopletag.php:142
 #, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
 msgstr ""
 
-#: actions/postnotice.php:95
-#, fuzzy
-msgid "Invalid notice content."
-msgstr "Ongeldige token."
-
 #: actions/postnotice.php:101
 #, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#: actions/profilesettings.php:60
-#, fuzzy
-msgid "Profile settings"
-msgstr "Wysig profiel-instellings"
-
 #: actions/profilesettings.php:71
 msgid ""
 "You can update your personal profile info here so people know more about you."
@@ -2879,13 +2405,6 @@ msgstr ""
 msgid "Profile information"
 msgstr ""
 
-#: actions/profilesettings.php:108 lib/groupeditform.php:154
-#, fuzzy
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
-msgstr ""
-"Die gebruikersnaam mag slegs uit kleinletters en syfers bestaan en mag geen "
-"spasies bevat nie."
-
 #: actions/profilesettings.php:111 actions/register.php:455
 #: actions/showgroup.php:256 actions/tagother.php:104
 #: lib/groupeditform.php:157 lib/userprofile.php:150
@@ -2962,45 +2481,15 @@ msgid ""
 "Automatically subscribe to whoever subscribes to me (best for non-humans)"
 msgstr ""
 
-#: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
-msgid "Bio is too long (max %d chars)."
-msgstr "Die beskrywing is te lank (die maksimum is %d karakters)."
-
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-#, fuzzy
-msgid "Language is too long (max 50 chars)."
-msgstr "Die naam is te lank (maksimum 255 karakters)."
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
 msgid "Invalid tag: \"%s\""
 msgstr "Ongeldige etiket: \"$s\""
 
-#: actions/profilesettings.php:306
-#, fuzzy
-msgid "Couldn't update user for autosubscribe."
-msgstr "Kon nie gebruikersdata opdateer nie."
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Dit was nie moontlik om die applikasie by te werk nie."
-
-#: actions/profilesettings.php:375
-#, fuzzy
-msgid "Couldn't save profile."
-msgstr "Kon nie die profiel stoor nie."
-
-#: actions/profilesettings.php:383
-#, fuzzy
-msgid "Couldn't save tags."
-msgstr "Kon nie gebruiker opdateer nie."
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -3011,21 +2500,6 @@ msgstr "Voorkeure is gestoor."
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-#, fuzzy
-msgid "Could not retrieve public stream."
-msgstr "Dit was nie moontlik om die aliasse te skep nie."
-
-#: actions/public.php:130
-#, fuzzy, php-format
-msgid "Public timeline, page %d"
-msgstr "Populêre kennisgewings, bladsy %d"
-
-#: actions/public.php:132 lib/publicgroupnav.php:79
-#, fuzzy
-msgid "Public timeline"
-msgstr "%s tydlyn"
-
 #: actions/public.php:160
 msgid "Public Stream Feed (RSS 1.0)"
 msgstr ""
@@ -3038,15 +2512,6 @@ msgstr ""
 msgid "Public Stream Feed (Atom)"
 msgstr ""
 
-#: actions/public.php:188
-#, fuzzy, php-format
-msgid ""
-"This is the public timeline for %%site.name%% but no one has posted anything "
-"yet."
-msgstr ""
-"Hierdie is die tydslyn vir %s en vriende, maar niemand het nog iets gepos "
-"nie."
-
 #: actions/public.php:191
 msgid "Be the first to post!"
 msgstr "U kan die eerste een wees om 'n boodskap te plaas!"
@@ -3088,11 +2553,6 @@ msgstr ""
 msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
 msgstr ""
 
-#: actions/publictagcloud.php:72
-#, fuzzy
-msgid "Be the first to post one!"
-msgstr "U kan die eerste een wees om 'n boodskap te plaas!"
-
 #: actions/publictagcloud.php:75
 #, php-format
 msgid ""
@@ -3100,44 +2560,14 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:134
-#, fuzzy
-msgid "Tag cloud"
-msgstr "Verander kleure"
-
-#: actions/recoverpassword.php:36
-#, fuzzy
-msgid "You are already logged in!"
-msgstr "U is reeds aangeteken."
-
-#: actions/recoverpassword.php:62
-#, fuzzy
-msgid "No such recovery code."
-msgstr "Die kennisgewing bestaan nie."
-
-#: actions/recoverpassword.php:66
-#, fuzzy
-msgid "Not a recovery code."
-msgstr "Nie 'n geregistreerde gebruiker nie."
-
 #: actions/recoverpassword.php:73
 msgid "Recovery code for unknown user."
 msgstr ""
 
-#: actions/recoverpassword.php:86
-#, fuzzy
-msgid "Error with confirmation code."
-msgstr "Geen bevestigingskode."
-
 #: actions/recoverpassword.php:97
 msgid "This confirmation code is too old. Please start again."
 msgstr ""
 
-#: actions/recoverpassword.php:111
-#, fuzzy
-msgid "Could not update user with confirmed email address."
-msgstr "Huidige bevestigde e-posadres."
-
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
@@ -3148,34 +2578,17 @@ msgstr ""
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-#, fuzzy
-msgid "Password recovery"
-msgstr "Verander wagwoord"
-
-#: actions/recoverpassword.php:191
-#, fuzzy
-msgid "Nickname or email address"
-msgstr "Geen e-posadres."
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr ""
 
-#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
-#, fuzzy
-msgid "Recover"
-msgstr "Verwyder"
-
 #: actions/recoverpassword.php:208
-#, fuzzy
 msgid "Reset password"
-msgstr "Nuwe wagwoord"
+msgstr "Herstel wagwoord"
 
 #: actions/recoverpassword.php:209
-#, fuzzy
 msgid "Recover password"
-msgstr "Nuwe wagwoord"
+msgstr "Herstel wagwoord"
 
 #: actions/recoverpassword.php:210 actions/recoverpassword.php:335
 msgid "Password recovery requested"
@@ -3185,20 +2598,10 @@ msgstr ""
 msgid "Unknown action"
 msgstr "Onbekende aksie"
 
-#: actions/recoverpassword.php:236
-#, fuzzy
-msgid "6 or more characters, and don't forget it!"
-msgstr "6 of meer karakters"
-
 #: actions/recoverpassword.php:243
 msgid "Reset"
 msgstr "Herstel"
 
-#: actions/recoverpassword.php:252
-#, fuzzy
-msgid "Enter a nickname or email address."
-msgstr "Dit is nie u e-posadres nie."
-
 #: actions/recoverpassword.php:282
 msgid "No user with that email address or username."
 msgstr ""
@@ -3207,37 +2610,12 @@ msgstr ""
 msgid "No registered email address for that user."
 msgstr ""
 
-#: actions/recoverpassword.php:313
-#, fuzzy
-msgid "Error saving address confirmation."
-msgstr "Fout tydens stoor van gebruiker; ongeldig."
-
 #: actions/recoverpassword.php:338
 msgid ""
 "Instructions for recovering your password have been sent to the email "
 "address registered to your account."
 msgstr ""
 
-#: actions/recoverpassword.php:357
-#, fuzzy
-msgid "Unexpected password reset."
-msgstr "Die vorm is onverwags ingestuur."
-
-#: actions/recoverpassword.php:365
-#, fuzzy
-msgid "Password must be 6 chars or more."
-msgstr "Wagwoord moet 6 of meer karakters bevat."
-
-#: actions/recoverpassword.php:369
-#, fuzzy
-msgid "Password and confirmation do not match."
-msgstr "Wagwoorde is nie dieselfde nie."
-
-#: actions/recoverpassword.php:388 actions/register.php:255
-#, fuzzy
-msgid "Error setting user."
-msgstr "Fout tydens stoor van gebruiker; ongeldig."
-
 #: actions/recoverpassword.php:395
 msgid "New password successfully saved. You are now logged in."
 msgstr ""
@@ -3284,16 +2662,6 @@ msgstr ""
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
 msgstr ""
 
-#: actions/register.php:437
-#, fuzzy
-msgid "6 or more characters. Required."
-msgstr "6 of meer karakters"
-
-#: actions/register.php:441
-#, fuzzy
-msgid "Same as password above. Required."
-msgstr "Dieselfde as wagwoord hierbo"
-
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
 #: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:132
@@ -3378,20 +2746,10 @@ msgstr ""
 msgid "Subscribe to a remote user"
 msgstr ""
 
-#: actions/remotesubscribe.php:129
-#, fuzzy
-msgid "User nickname"
-msgstr "Geen gebruikersnaam nie."
-
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
 msgstr ""
 
-#: actions/remotesubscribe.php:133
-#, fuzzy
-msgid "Profile URL"
-msgstr "Profiel"
-
 #: actions/remotesubscribe.php:134
 msgid "URL of your profile on another compatible microblogging service"
 msgstr ""
@@ -3421,21 +2779,6 @@ msgstr ""
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Geen profiel verskaf nie."
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "U kan nie u eie kennisgewings herhaal nie."
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "U het reeds die kennisgewing herhaal."
-
 #: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Herhalend"
@@ -3444,41 +2787,6 @@ msgstr "Herhalend"
 msgid "Repeated!"
 msgstr "Herhaal!"
 
-#: actions/replies.php:126 actions/repliesrss.php:68
-#: lib/personalgroupnav.php:105
-#, fuzzy, php-format
-msgid "Replies to %s"
-msgstr "Herhalings van %s"
-
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "%1$s, bladsy %2$d"
-
-#: actions/replies.php:145
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Voer vir vriende van %s (RSS 1.0)"
-
-#: actions/replies.php:152
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Voer vir vriende van %s (RSS 2.0)"
-
-#: actions/replies.php:159
-#, fuzzy, php-format
-msgid "Replies feed for %s (Atom)"
-msgstr "Voer vir vriende van %s (Atom)"
-
-#: actions/replies.php:199
-#, fuzzy, php-format
-msgid ""
-"This is the timeline showing replies to %1$s but %2$s hasn't received a "
-"notice to them yet."
-msgstr ""
-"Hierdie is die tydslyn vir %s en vriende, maar niemand het nog iets gepos "
-"nie."
-
 #: actions/replies.php:204
 #, php-format
 msgid ""
@@ -3493,16 +2801,6 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "Opdaterings van %1$s op %2$s."
-
-#: actions/revokerole.php:75
-#, fuzzy
-msgid "You cannot revoke user roles on this site."
-msgstr "Jy kan nie gebruikers op hierdie webwerf stilmaak nie."
-
 #: actions/revokerole.php:82
 msgid "User doesn't have this role."
 msgstr ""
@@ -3511,16 +2809,6 @@ msgstr ""
 msgid "StatusNet"
 msgstr "StatusNet"
 
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Jy kan nie gebruikers op hierdie webwerf stilmaak nie."
-
-#: actions/sandbox.php:72
-#, fuzzy
-msgid "User is already sandboxed."
-msgstr "Hierdie gebruiker is reeds stilgemaak."
-
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
@@ -3531,11 +2819,6 @@ msgstr "Sessies"
 msgid "Session settings for this StatusNet site."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:175
-#, fuzzy
-msgid "Handle sessions"
-msgstr "Sessies"
-
 #: actions/sessionsadminpanel.php:177
 msgid "Whether to handle sessions ourselves."
 msgstr ""
@@ -3548,22 +2831,6 @@ msgstr ""
 msgid "Turn on debugging output for sessions."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/useradminpanel.php:294
-#, fuzzy
-msgid "Save site settings"
-msgstr "Stoor toegangsinstellings"
-
-#: actions/showapplication.php:82
-#, fuzzy
-msgid "You must be logged in to view an application."
-msgstr "U moet aangeteken wees alvorens u 'n applikasie kan wysig."
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Die applikasie is nie gevind nie."
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
@@ -3596,20 +2863,10 @@ msgstr "Statistieke"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-#, fuzzy
-msgid "Application actions"
-msgstr "Die applikasie is nie gevind nie."
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-#, fuzzy
-msgid "Application info"
-msgstr "Die applikasie is nie gevind nie."
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3626,47 +2883,12 @@ msgstr ""
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:283
-#, fuzzy
-msgid "Authorize URL"
-msgstr "Outeur"
-
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Is u seker u wil hierdie kennisgewing verwyder?"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s se gunsteling kennisgewings"
-
-#: actions/showfavorites.php:132
-#, fuzzy
-msgid "Could not retrieve favorite notices."
-msgstr "Dit was nie moontlik om 'n gunsteling te skep nie."
-
-#: actions/showfavorites.php:171
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Voer vir vriende van %s (RSS 1.0)"
-
-#: actions/showfavorites.php:178
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Voer vir vriende van %s (RSS 2.0)"
-
-#: actions/showfavorites.php:185
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr "Voer vir vriende van %s (Atom)"
-
 #: actions/showfavorites.php:206
 msgid ""
 "You haven't chosen any favorite notices yet. Click the fave button on "
@@ -3724,21 +2946,6 @@ msgstr "Aliasse"
 msgid "Group actions"
 msgstr "Groepsaksies"
 
-#: actions/showgroup.php:338
-#, fuzzy, php-format
-msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Voer vir vriende van %s (RSS 1.0)"
-
-#: actions/showgroup.php:344
-#, fuzzy, php-format
-msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Voer vir vriende van %s (RSS 2.0)"
-
-#: actions/showgroup.php:350
-#, fuzzy, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr "Voer vir vriende van %s (Atom)"
-
 #: actions/showgroup.php:355
 #, php-format
 msgid "FOAF for %s group"
@@ -3793,16 +3000,6 @@ msgstr "Die boodskap bestaan nie."
 msgid "Only the sender and recipient may read this message."
 msgstr ""
 
-#: actions/showmessage.php:108
-#, fuzzy, php-format
-msgid "Message to %1$s on %2$s"
-msgstr "Opdaterings van %1$s op %2$s."
-
-#: actions/showmessage.php:113
-#, fuzzy, php-format
-msgid "Message from %1$s on %2$s"
-msgstr "Opdaterings van %1$s op %2$s."
-
 #: actions/shownotice.php:90
 msgid "Notice deleted."
 msgstr "Hierdie kennisgewing is verwyder."
@@ -3817,38 +3014,11 @@ msgstr "met die etiket %s"
 msgid "%1$s, page %2$d"
 msgstr "%1$s, bladsy %2$d"
 
-#: actions/showstream.php:122
-#, fuzzy, php-format
-msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Voer vir vriende van %s (RSS 1.0)"
-
-#: actions/showstream.php:129
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Voer vir vriende van %s (RSS 1.0)"
-
-#: actions/showstream.php:136
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Voer vir vriende van %s (RSS 2.0)"
-
-#: actions/showstream.php:143
-#, fuzzy, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr "Voer vir vriende van %s (Atom)"
-
 #: actions/showstream.php:148
 #, php-format
 msgid "FOAF for %s"
 msgstr "Vriend van 'n vriend (FOAF) vir %s"
 
-#: actions/showstream.php:200
-#, fuzzy, php-format
-msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr ""
-"Hierdie is die tydslyn vir %s en vriende, maar niemand het nog iets gepos "
-"nie."
-
 #: actions/showstream.php:205
 msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
@@ -3900,11 +3070,6 @@ msgstr ""
 msgid "Site name must have non-zero length."
 msgstr ""
 
-#: actions/siteadminpanel.php:141
-#, fuzzy
-msgid "You must have a valid contact email address."
-msgstr "Nie 'n geldige e-posadres nie."
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -3922,11 +3087,6 @@ msgstr ""
 msgid "General"
 msgstr "Algemeen"
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Werf se tema"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -3947,11 +3107,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Inkomende e-posadres is verwyder."
-
 #: actions/siteadminpanel.php:245
 msgid "Local"
 msgstr "Lokaal"
@@ -3964,11 +3119,6 @@ msgstr "Standaardtydsone"
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
-#: actions/siteadminpanel.php:262
-#, fuzzy
-msgid "Default language"
-msgstr "Standaardtydsone"
-
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
 msgstr ""
@@ -3993,39 +3143,14 @@ msgstr "Duplikaatlimiet"
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "Kennisgewings"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Nuwe boodskap"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Dit was nie moontlik om u ontwerp-instellings te stoor nie."
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Verwyder kennisgewing"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "Verwyder kennisgewing"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
 msgid "SMS settings"
@@ -4038,47 +3163,16 @@ msgstr "SMS-instellings"
 msgid "You can receive SMS messages through email from %%site.name%%."
 msgstr ""
 
-#. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
-#: actions/smssettings.php:97
-#, fuzzy
-msgid "SMS is not available."
-msgstr "IM is nie beskikbaar nie."
-
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "IP-adres"
-
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-#, fuzzy
-msgid "Current confirmed SMS-enabled phone number."
-msgstr "Huidige bevestigde e-posadres."
-
 #. TRANS: Form guide in IM settings form.
 #: actions/smssettings.php:133
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-#, fuzzy
-msgid "Confirmation code"
-msgstr "Geen bevestigingskode."
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Bevestig"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
@@ -4091,7 +3185,6 @@ msgstr ""
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
 msgstr "Voorkeure is gestoor."
 
@@ -4102,35 +3195,11 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Voorkeure is gestoor."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
 msgstr "Geen telefoonnommer."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-#, fuzzy
-msgid "No carrier selected."
-msgstr "Hierdie kennisgewing is verwyder."
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-#, fuzzy
-msgid "That is already your phone number."
-msgstr "Dit is al reeds u Jabber-ID."
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-#, fuzzy
-msgid "That phone number already belongs to another user."
-msgstr "Die Jabber-ID word reeds deur 'n ander gebruiker gebruik."
-
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
 msgid ""
@@ -4138,30 +3207,15 @@ msgid ""
 "for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-#, fuzzy
-msgid "That is the wrong confirmation number."
-msgstr "Dit is die verkeerde IM-adres."
-
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
 msgstr "SMS-bevestiging"
 
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-#, fuzzy
-msgid "That is not your phone number."
-msgstr "Dit is nie u Jabber-ID nie."
-
 #. TRANS: Message given after successfully removing a registered SMS phone number.
 #: actions/smssettings.php:470
-#, fuzzy
 msgid "The SMS phone number was removed."
-msgstr "SMS-nommer"
+msgstr "Inkomende e-posadres is verwyder."
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
@@ -4182,12 +3236,6 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-#, fuzzy
-msgid "No code entered"
-msgstr "Geen inhoud nie!"
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
@@ -4198,20 +3246,10 @@ msgstr ""
 msgid "Manage snapshot configuration"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:127
-#, fuzzy
-msgid "Invalid snapshot run value."
-msgstr "Ongeldige rol."
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-#, fuzzy
-msgid "Invalid snapshot report URL."
-msgstr "Die logo-URL is ongeldig."
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4244,31 +3282,10 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Stoor toegangsinstellings"
-
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "U volg hierdie gebruiker:"
-
-#. TRANS: Exception thrown when a subscription could not be stored on the server.
-#: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
-msgid "Could not save subscription."
-msgstr "Kon nie die profiel stoor nie."
-
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Die lêer bestaan nie."
-
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
@@ -4282,11 +3299,6 @@ msgstr ""
 msgid "%s subscribers"
 msgstr ""
 
-#: actions/subscribers.php:52
-#, fuzzy, php-format
-msgid "%1$s subscribers, page %2$d"
-msgstr "%1$s en vriende, bladsy %2$d"
-
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
 msgstr ""
@@ -4314,16 +3326,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Beskrywing"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "%1$s groepe, bladsy %2$d"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr ""
@@ -4356,26 +3358,6 @@ msgstr "Jabber"
 msgid "SMS"
 msgstr "SMS"
 
-#: actions/tag.php:69
-#, fuzzy, php-format
-msgid "Notices tagged with %1$s, page %2$d"
-msgstr "%1$s, bladsy %2$d"
-
-#: actions/tag.php:87
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Voer vir vriende van %s (RSS 1.0)"
-
-#: actions/tag.php:93
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Voer vir vriende van %s (RSS 2.0)"
-
-#: actions/tag.php:99
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr "Voer vir vriende van %s (Atom)"
-
 #: actions/tagother.php:39
 msgid "No ID argument."
 msgstr "Geen ID-argument."
@@ -4409,40 +3391,10 @@ msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
 msgstr ""
 
-#: actions/tagother.php:200
-#, fuzzy
-msgid "Could not save tags."
-msgstr "Kon nie die profiel stoor nie."
-
-#: actions/tagother.php:236
-#, fuzzy
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr "Gebruik die vorm om u applikasie te wysig."
-
 #: actions/tagrss.php:35
 msgid "No such tag."
 msgstr "Onbekende etiket."
 
-#: actions/unblock.php:59
-#, fuzzy
-msgid "You haven't blocked that user."
-msgstr "U het reeds die gebruiker geblokkeer."
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Hierdie gebruiker is reeds stilgemaak."
-
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "Daar is geen profiel met daardie ID nie."
-
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
 msgstr ""
@@ -4494,44 +3446,14 @@ msgstr ""
 msgid "New users"
 msgstr "Nuwe gebruikers"
 
-#: actions/useradminpanel.php:235
-#, fuzzy
-msgid "New user welcome"
-msgstr "Nuwe gebruikers"
-
-#: actions/useradminpanel.php:236
-#, fuzzy
-msgid "Welcome text for new users (Max 255 chars)."
-msgstr "Die naam is te lank (maksimum 255 karakters)."
-
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Beskrywing"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "Jy kan nie gebruikers op hierdie webwerf stilmaak nie."
-
 #: actions/useradminpanel.php:251
 msgid "Invitations"
 msgstr "Uitnodigings"
 
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "Uitnodigings"
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
 
-#: actions/userauthorization.php:105
-#, fuzzy
-msgid "Authorize subscription"
-msgstr "Beskrywing"
-
 #: actions/userauthorization.php:110
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
@@ -4547,21 +3469,10 @@ msgstr "Lisensie"
 msgid "Accept"
 msgstr "Aanvaar"
 
-#: actions/userauthorization.php:218 lib/subscribeform.php:115
-#: lib/subscribeform.php:139
-#, fuzzy
-msgid "Subscribe to this user"
-msgstr "U volg hierdie gebruiker:"
-
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Verwerp"
 
-#: actions/userauthorization.php:220
-#, fuzzy
-msgid "Reject this subscription"
-msgstr "Verwyder die gebruiker"
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
@@ -4577,11 +3488,6 @@ msgid ""
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:266
-#, fuzzy
-msgid "Subscription rejected"
-msgstr "Beskrywing word vereis."
-
 #: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4609,26 +3515,11 @@ msgstr ""
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:345
-#, fuzzy, php-format
-msgid "Avatar URL ‘%s’ is not valid."
-msgstr "Die \"callback\"-URL is nie geldig nie."
-
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Kan nie die avatar-URL \"%s\" lees nie."
 
-#: actions/userauthorization.php:355
-#, fuzzy, php-format
-msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Kan nie die avatar-URL \"%s\" lees nie."
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Profiel"
-
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
 "Customize the way your profile looks with a background image and a colour "
@@ -4649,11 +3540,6 @@ msgstr "%1$s groepe, bladsy %2$d"
 msgid "Search for more groups"
 msgstr "Soek vir meer groepe"
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "U is nie 'n lid van enige groep nie."
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4756,65 +3642,16 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Ongeldige grootte."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Groepsprofiel"
-
 #. TRANS: Exception thrown when trying to leave a group the user is not a member of.
 #: classes/Group_member.php:55
 msgid "Not part of group."
 msgstr "Nie lid van die groep nie."
 
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Groepsprofiel"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Dit was nie moontlik om die groep by te werk nie."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Dit was nie moontlik om die aliasse te skep nie."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "U inkomende boodskappe"
-
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-#, fuzzy
-msgid "Could not insert message."
-msgstr "Kan nie boodskap verwerk nie."
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-#, fuzzy
-msgid "Could not update message with new URI."
-msgstr "Kan nie boodskap verwerk nie."
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4823,59 +3660,53 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr ""
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr ""
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-#, fuzzy
-msgid "You are banned from posting notices on this site."
-msgstr "Jy kan nie gebruikers op hierdie webwerf stilmaak nie."
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr ""
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4894,18 +3725,6 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Dit was nie moontlik om u ontwerp-instellings te stoor nie."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
@@ -4916,38 +3735,11 @@ msgstr ""
 msgid "Already subscribed!"
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-#, fuzzy
-msgid "User has blocked you."
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
 #. TRANS: Exception thrown when trying to unsibscribe without a subscription.
 #: classes/Subscription.php:171
 msgid "Not subscribed!"
 msgstr ""
 
-#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
-#: classes/Subscription.php:178
-#, fuzzy
-msgid "Could not delete self-subscription."
-msgstr ""
-"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
-
-#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
-#: classes/Subscription.php:206
-#, fuzzy
-msgid "Could not delete subscription OMB token."
-msgstr ""
-"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
-
-#. TRANS: Exception thrown when a subscription could not be deleted on the server.
-#: classes/Subscription.php:218
-#, fuzzy
-msgid "Could not delete subscription."
-msgstr ""
-"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
-
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
 #: classes/User.php:365
@@ -4960,35 +3752,11 @@ msgstr "Welkom by %1$s, @%2$s!"
 msgid "Could not create group."
 msgstr "Kon nie die groep skep nie."
 
-#. TRANS: Server exception thrown when updating a group URI failed.
-#: classes/User_group.php:506
-#, fuzzy
-msgid "Could not set group URI."
-msgstr "Kon nie die groep skep nie."
-
-#. TRANS: Server exception thrown when setting group membership failed.
-#: classes/User_group.php:529
-#, fuzzy
-msgid "Could not set group membership."
-msgstr "Kon nie die groep skep nie."
-
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "Kon nie die profiel stoor nie."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
 msgstr "Verander u profiel gegewens"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "Die opdatering van die avatar het gefaal."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:123
 msgid "Change your password"
@@ -5042,13 +3810,6 @@ msgctxt "MENU"
 msgid "Personal"
 msgstr "Persoonlik"
 
-#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change your email, avatar, password, profile"
-msgstr "Verander u wagwoord"
-
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
 msgctxt "TOOLTIP"
@@ -5085,13 +3846,6 @@ msgctxt "MENU"
 msgid "Invite"
 msgstr "Uitnodig"
 
-#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:474
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Logout from the site"
-msgstr "Meld by die webwerf aan"
-
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
 msgctxt "MENU"
@@ -5143,25 +3897,6 @@ msgctxt "MENU"
 msgid "Search"
 msgstr "Soek"
 
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Verwyder kennisgewing"
-
-#. TRANS: DT element for local views block. String is hidden in default CSS.
-#: lib/action.php:592
-#, fuzzy
-msgid "Local views"
-msgstr "Lokaal"
-
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Populêre kennisgewings"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
 msgid "Secondary site navigation"
@@ -5202,11 +3937,6 @@ msgstr "Bron"
 msgid "Contact"
 msgstr "Kontak"
 
-#: lib/action.php:794
-#, fuzzy
-msgid "Badge"
-msgstr "Aanpor"
-
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
 msgid "StatusNet software license"
@@ -5265,12 +3995,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-#, fuzzy
-msgid "Pagination"
-msgstr "Registratie"
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5300,18 +4024,6 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Jy kan nie gebruikers op hierdie webwerf stilmaak nie."
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Registrasie nie toegelaat nie."
-
 #. TRANS: Client error message.
 #: lib/adminpanelaction.php:229
 msgid "showForm() not implemented."
@@ -5322,125 +4034,34 @@ msgstr ""
 msgid "saveSettings() not implemented."
 msgstr ""
 
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Dit was nie moontlik om u ontwerp-instellings te stoor nie."
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "SMS-bevestiging"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
 msgctxt "MENU"
 msgid "Site"
 msgstr "Webtuiste"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "SMS-bevestiging"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
 msgctxt "MENU"
 msgid "Design"
 msgstr "Ontwerp"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "SMS-bevestiging"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "Gebruiker"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "SMS-bevestiging"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "SMS-bevestiging"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "SMS-bevestiging"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Verwyder kennisgewing"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "SMS-bevestiging"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-#, fuzzy
-msgid "Edit application"
-msgstr "Wysig applikasie"
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-#, fuzzy
-msgid "Icon for this application"
-msgstr "Moenie die applikasie verwyder nie"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
 #, php-format
 msgid "Describe your application in %d characters"
 msgstr ""
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:213
-#, fuzzy
-msgid "Describe your application"
-msgstr "Skrap applikasie"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "U is nie die eienaar van hierdie applikasie nie."
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Bron"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-#, fuzzy
-msgid "Organization responsible for this application"
-msgstr "U is nie die eienaar van hierdie applikasie nie."
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
 msgid "URL for the homepage of the organization"
@@ -5486,18 +4107,6 @@ msgstr ""
 msgid "Cancel"
 msgstr "Kanselleer"
 
-#. TRANS: Application access type
-#: lib/applicationlist.php:136
-#, fuzzy
-msgid "read-write"
-msgstr "Lees-skryf"
-
-#. TRANS: Application access type
-#: lib/applicationlist.php:138
-#, fuzzy
-msgid "read-only"
-msgstr "Lees-alleen"
-
 #. TRANS: Used in application list. %1$s is a modified date, %2$s is access type (read-write or read-only)
 #: lib/applicationlist.php:144
 #, php-format
@@ -5506,7 +4115,6 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
 msgstr "Verwyder"
@@ -5526,11 +4134,6 @@ msgstr "Outeur"
 msgid "Provider"
 msgstr "Verskaffer"
 
-#: lib/attachmentnoticesection.php:67
-#, fuzzy
-msgid "Notices where this attachment appears"
-msgstr "Etikette vir hierdie aanhangsel"
-
 #: lib/attachmenttagcloudsection.php:48
 msgid "Tags for this attachment"
 msgstr "Etikette vir hierdie aanhangsel"
@@ -5551,50 +4154,40 @@ msgstr "Opdragresultate"
 msgid "Command complete"
 msgstr "Opdrag voltooi"
 
-#: lib/channel.php:240
-#, fuzzy
-msgid "Command failed"
-msgstr "Opdrag voltooi"
-
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
 msgstr ""
 
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
 #. TRANS: Message given requesting a profile for a non-existing user.
 #. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
+#: lib/command.php:130
 #, php-format
-msgid "Could not find a user with nickname %s"
+msgid "Could not find a user with nickname %s."
 msgstr ""
 
 #. TRANS: Message given getting a non-existing user.
 #. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
+#: lib/command.php:150
 #, php-format
-msgid "Could not find a local user with nickname %s"
+msgid "Could not find a local user with nickname %s."
 msgstr ""
 
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Die por is gestuur"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5602,56 +4195,39 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "U is reeds 'n lid van die groep."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr ""
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr ""
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Volle naam: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Ligging: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Tuisblad: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Oor: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5660,156 +4236,106 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+#: lib/command.php:491 lib/xmppmanager.php:403
+#, php-format
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "Boodskap is te lank. Die maksimum is %1$d karakters. U het %2$d karakters "
 "gestuur."
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, fuzzy, php-format
-msgid "Direct message to %s sent"
-msgstr "Direkte boodskappe aan %s"
-
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr ""
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "U kan nie u eie kennisgewings herhaal nie."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "U het reeds die kennisgewing herhaal."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Hierdie kennisgewing is verwyder."
-
-#: lib/command.php:531
-#, fuzzy
-msgid "Error repeating notice."
-msgstr "U kan nie u eie kennisgewings herhaal nie."
-
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+#. TRANS: Text shown having sent a reply to a notice successfully.
+#. TRANS: %s is the nickname of the user of the notice the reply was sent to.
+#: lib/command.php:603
+#, php-format
+msgid "Reply to %s sent."
 msgstr ""
-"Boodskap is te lank. Die maksimum is %1$d karakters. U het %2$d karakters "
-"gestuur."
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Na %s herhaal"
 
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Fout tydens stoor van gebruiker; ongeldig."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
+#. TRANS: Text shown after having subscribed to another user successfully.
+#. TRANS: %s is the name of the user the subscription was requested for.
+#: lib/command.php:672
 #, php-format
-msgid "Subscribed to %s"
+msgid "Subscribed to %s."
 msgstr ""
 
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr ""
-
-#: lib/command.php:682 lib/command.php:705
-#, fuzzy
-msgid "Command not yet implemented."
-msgstr "Opdrag voltooi"
-
-#: lib/command.php:685
-#, fuzzy
-msgid "Notification off."
-msgstr "Geen bevestigingskode."
-
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-#, fuzzy
-msgid "Notification on."
-msgstr "Geen bevestigingskode."
-
-#: lib/command.php:710
-#, fuzzy
-msgid "Can't turn on notification."
-msgstr "U kan nie u eie kennisgewings herhaal nie."
-
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
+#. TRANS: Text shown after issuing the lose command successfully (stop another user from following the current user).
+#. TRANS: %s is the name of the user the unsubscription was requested for.
+#: lib/command.php:813
 #, php-format
-msgid "Unsubscribed  %s"
+msgid "Unsubscribed %s."
 msgstr ""
 
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "U volg hierdie gebruiker:"
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "U volg hierdie gebruiker:"
 msgstr[1] "U volg hierdie gebruikers:"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Hierdie gebruiker volg u:"
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Hierdie gebruiker volg u:"
 msgstr[1] "Hierdie gebruikers volg u:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "U is nie 'n lid van enige groep nie."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "U is 'n lid van hierdie groep:"
 msgstr[1] "U is 'n lid van hierdie groepe:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5851,11 +4377,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Geen bevestigingskode."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5880,25 +4401,10 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Konnekteer"
-
-#: lib/connectsettingsaction.php:121
-#, fuzzy
-msgid "Authorized connected applications"
-msgstr "Skrap applikasie"
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr "Databasisfout"
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Oplaai"
-
 #: lib/designsettings.php:109
 msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
@@ -5908,21 +4414,6 @@ msgstr ""
 msgid "Design defaults restored."
 msgstr ""
 
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
-msgid "Disfavor this notice"
-msgstr "Verwyder hierdie kennisgewing"
-
-#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
-msgid "Favor this notice"
-msgstr "Verwyder hierdie kennisgewing"
-
-#: lib/favorform.php:140
-#, fuzzy
-msgid "Favor"
-msgstr "Gunstelinge"
-
 #: lib/feed.php:85
 msgid "RSS 1.0"
 msgstr "RSS 1.0"
@@ -6008,11 +4499,6 @@ msgstr "Geblokkeer"
 msgid "%s blocked users"
 msgstr "%s geblokkeerde gebruikers"
 
-#: lib/groupnav.php:108
-#, fuzzy, php-format
-msgid "Edit %s group properties"
-msgstr "Groep %s wysig"
-
 #: lib/groupnav.php:113
 msgid "Logo"
 msgstr "Logo"
@@ -6027,11 +4513,6 @@ msgstr ""
 msgid "Add or edit %s design"
 msgstr ""
 
-#: lib/groupsbymemberssection.php:71
-#, fuzzy
-msgid "Groups with most members"
-msgstr "Groepe waarvan %s lid is"
-
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
 msgstr ""
@@ -6046,21 +4527,6 @@ msgstr ""
 msgid "This page is not available in a media type you accept"
 msgstr ""
 
-#: lib/imagefile.php:72
-#, fuzzy
-msgid "Unsupported image file format."
-msgstr "Nie-ondersteunde formaat."
-
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Die kennisgewing is te lank. Gebruik maksimum %d karakters."
-
-#: lib/imagefile.php:93
-#, fuzzy
-msgid "Partial upload."
-msgstr "Geen lêer opgelaai nie."
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -6069,11 +4535,6 @@ msgstr ""
 msgid "Not an image or corrupt file."
 msgstr ""
 
-#: lib/imagefile.php:122
-#, fuzzy
-msgid "Lost our file."
-msgstr "Die lêer bestaan nie."
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr "Onbekende lêertipe"
@@ -6091,11 +4552,6 @@ msgstr "kB"
 msgid "[%s]"
 msgstr "[%s]"
 
-#: lib/jabber.php:567
-#, fuzzy, php-format
-msgid "Unknown inbox source %d."
-msgstr "Onbekende taal \"%s\"."
-
 #: lib/joinform.php:114
 msgid "Join"
 msgstr "Aansluit"
@@ -6104,21 +4560,10 @@ msgstr "Aansluit"
 msgid "Leave"
 msgstr "Verlaat"
 
-#: lib/logingroupnav.php:80
-#, fuzzy
-msgid "Login with a username and password"
-msgstr "Ongeldige gebruikersnaam of wagwoord."
-
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
 msgstr ""
 
-#. TRANS: Subject for address confirmation email
-#: lib/mail.php:174
-#, fuzzy
-msgid "Email address confirmation"
-msgstr "E-posadres"
-
 #. TRANS: Body for address confirmation email.
 #: lib/mail.php:177
 #, php-format
@@ -6137,12 +4582,6 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#. TRANS: Subject of new-subscriber notification e-mail
-#: lib/mail.php:243
-#, fuzzy, php-format
-msgid "%1$s is now listening to your notices on %2$s."
-msgstr "%s volg niemand nie."
-
 #: lib/mail.php:248
 #, php-format
 msgid ""
@@ -6258,12 +4697,6 @@ msgid ""
 "%5$s\n"
 msgstr ""
 
-#. TRANS: Subject for favorite notification email
-#: lib/mail.php:589
-#, fuzzy, php-format
-msgid "%s (@%s) added your notice as a favorite"
-msgstr "Hierdie kennisgewing is nie 'n gunsteling nie!"
-
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
 #, php-format
@@ -6358,11 +4791,6 @@ msgstr "Jammer, dit is nie u inkomende e-posadres nie."
 msgid "Sorry, no incoming email allowed."
 msgstr "Jammer, inkomende e-pos word nie toegelaat nie."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Nie-ondersteunde formaat."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6401,12 +4829,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
-msgid "Could not determine file's MIME type."
-msgstr ""
-"Dit was nie moontlik om die boodskap van u gunstelinge te verwyder nie."
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6417,52 +4839,37 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-#, fuzzy
-msgid "Send a direct notice"
-msgstr "Stuur 'n direkte boodskap aan hierdie gebruiker"
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr "Aan"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Beskikbare karakters"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Stuur"
 
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "Verwyder kennisgewing"
-
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Hallo, %s."
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Aanheg"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Heg 'n lêer aan"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr ""
 
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "Moenie die applikasie verwyder nie"
-
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6497,6 +4904,10 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "op"
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "in konteks"
@@ -6505,43 +4916,18 @@ msgstr "in konteks"
 msgid "Repeated by"
 msgstr "Herhaal deur"
 
-#: lib/noticelist.php:630
-#, fuzzy
-msgid "Reply to this notice"
-msgstr "Verwyder hierdie kennisgewing"
-
 #: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Antwoord"
 
-#: lib/noticelist.php:675
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Hierdie kennisgewing is verwyder."
-
-#: lib/nudgeform.php:116
-#, fuzzy
-msgid "Nudge this user"
-msgstr "Verwyder die gebruiker"
-
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr "Aanpor"
 
-#: lib/nudgeform.php:128
-#, fuzzy
-msgid "Send a nudge to this user"
-msgstr "Stuur 'n direkte boodskap aan hierdie gebruiker"
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr ""
 
-#: lib/oauthstore.php:291
-#, fuzzy
-msgid "Error inserting avatar"
-msgstr "Fout tydens stoor van gebruiker; ongeldig."
-
 #: lib/oauthstore.php:306
 msgid "Error updating remote profile"
 msgstr ""
@@ -6550,16 +4936,6 @@ msgstr ""
 msgid "Error inserting remote profile"
 msgstr ""
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Verwyder kennisgewing"
-
-#: lib/oauthstore.php:490
-#, fuzzy
-msgid "Couldn't insert new subscription."
-msgstr "Kon nie e-posbevestiging verwyder nie."
-
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr "Persoonlik"
@@ -6584,11 +4960,6 @@ msgstr "U inkomende boodskappe"
 msgid "Outbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:131
-#, fuzzy
-msgid "Your sent messages"
-msgstr "U inkomende boodskappe"
-
 #: lib/personaltagcloudsection.php:56
 #, php-format
 msgid "Tags in %s's notices"
@@ -6598,25 +4969,10 @@ msgstr ""
 msgid "Unknown"
 msgstr "Onbekend"
 
-#: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
-#, fuzzy
-msgid "Subscriptions"
-msgstr "Beskrywing"
-
-#: lib/profileaction.php:126
-#, fuzzy
-msgid "All subscriptions"
-msgstr "Beskrywing"
-
 #: lib/profileaction.php:144 lib/profileaction.php:214 lib/subgroupnav.php:90
 msgid "Subscribers"
 msgstr ""
 
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "Alle lede"
-
 #: lib/profileaction.php:191
 msgid "User ID"
 msgstr "Gebruikers-ID"
@@ -6658,30 +5014,10 @@ msgstr "Uitgelig"
 msgid "Popular"
 msgstr "Gewild"
 
-#: lib/redirectingaction.php:95
-#, fuzzy
-msgid "No return-to arguments."
-msgstr "Geen ID-argument."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Verwyder hierdie kennisgewing"
-
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Ja"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Verwyder hierdie kennisgewing"
-
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "Blok hierdie gebruiker van hierdie groep"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
@@ -6690,16 +5026,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr ""
 
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Deblokkeer hierdie gebruiker"
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Soek"
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr "Term(e)"
@@ -6708,11 +5034,6 @@ msgstr "Term(e)"
 msgid "Search"
 msgstr "Soek"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Soek"
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Gebruikers"
@@ -6725,11 +5046,6 @@ msgstr ""
 msgid "Find content of notices"
 msgstr ""
 
-#: lib/searchgroupnav.php:85
-#, fuzzy
-msgid "Find groups on this site"
-msgstr "groepe op %s"
-
 #: lib/section.php:89
 msgid "Untitled section"
 msgstr ""
@@ -6746,16 +5062,6 @@ msgstr "Maak stil"
 msgid "Silence this user"
 msgstr "Maak die gebruikers stil"
 
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "Hierdie gebruiker volg u:"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "U volg hierdie gebruiker:"
-
 #: lib/subgroupnav.php:99
 #, php-format
 msgid "Groups %s is a member of"
@@ -6792,13 +5098,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Die opdatering van die avatar het gefaal."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6835,35 +5134,10 @@ msgstr "Mees aktiewe gebruikers"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Deblokkeer hierdie gebruiker"
-
-#: lib/unsilenceform.php:67
-#, fuzzy
-msgid "Unsilence"
-msgstr "Maak stil"
-
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Maak die gebruikers stil"
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-#, fuzzy
-msgid "Unsubscribe from this user"
-msgstr "Deblokkeer hierdie gebruiker"
-
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr ""
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Hierdie gebruiker het nie 'n profiel nie."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Wysig Avatar"
@@ -6911,56 +5185,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "'n paar sekondes gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "ongeveer 'n minuut gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "ongeveer %d minute gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "ongeveer 'n uur gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "ongeveer %d uur gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "ongeveer een dag gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "ongeveer %d dae gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "ongeveer een maand gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "ongeveer %d maande gelede"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "ongeveer een jaar gelede"
 
@@ -6974,10 +5248,3 @@ msgstr "%s is nie 'n geldige kleur nie!"
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
 "%s is nie 'n geldige kleur nie. Gebruik drie of ses heksadesimale karakters."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Boodskap is te lank. Die maksimum is %1$d karakters. U het %2$d karakters "
-"gestuur."
index e0d4701a3ae3f9645c3a3f5a2775441027ee3ceb..940252cd5b85b50177d091ae8ae8b94f77402fef 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:01+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:28:49+0000\n"
 "Language-Team: Arabic\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ar\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +91,7 @@ msgstr "احفظ"
 msgid "No such page."
 msgstr "لا صفحة كهذه."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +111,7 @@ msgstr "لا صفحة كهذه."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "لا مستخدم كهذا."
@@ -172,27 +173,17 @@ msgid ""
 msgstr ""
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"%s لم يضف أي إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
-"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
 
 #. TRANS: H1 text
 #: actions/all.php:182
 msgid "You and friends"
 msgstr "أنت والأصدقاء"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
-#: actions/allrss.php:121 actions/apitimelinefriends.php:216
-#: actions/apitimelinehome.php:122
-#, php-format
-msgid "Updates from %1$s and friends on %2$s!"
-msgstr ""
-
 #: actions/apiaccountratelimitstatus.php:72
 #: actions/apiaccountupdatedeliverydevice.php:94
 #: actions/apiaccountupdateprofile.php:97
@@ -268,16 +259,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-msgid "Unable to save your design settings."
-msgstr ""
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:187
 #: actions/apiaccountupdateprofilecolors.php:142
 msgid "Could not update your design."
@@ -319,11 +300,6 @@ msgstr "كل الرسائل المباشرة التي أرسلت إلى %s"
 msgid "No message text!"
 msgstr "لا نص في الرسالة!"
 
-#: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, php-format
-msgid "That's too long. Max message size is %d chars."
-msgstr ""
-
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
 msgstr "لم يُعثر على المستخدم المستلم."
@@ -332,16 +308,12 @@ msgstr "لم يُعثر على المستخدم المستلم."
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
 
-#: actions/apifavoritecreate.php:109 actions/apifavoritedestroy.php:110
-#: actions/apistatusesdestroy.php:121
-msgid "No status found with that ID."
-msgstr ""
-
 #: actions/apifavoritecreate.php:120
 msgid "This status is already a favorite."
 msgstr "هذه الحالة مفضلة بالفعل."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "تعذّر إنشاء مفضلة."
 
@@ -353,20 +325,6 @@ msgstr "تلك الحالة ليست مفضلة."
 msgid "Could not delete favorite."
 msgstr "تعذّر حذف المفضلة."
 
-#: actions/apifriendshipscreate.php:109
-#, fuzzy
-msgid "Could not follow user: profile not found."
-msgstr "لم يمكن حفظ الملف."
-
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:109
-msgid "Could not unfollow user: User not found."
-msgstr ""
-
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
 msgstr "لا يمكنك عدم متابعة نفسك."
@@ -383,12 +341,6 @@ msgstr "تعذّر تحديد المستخدم المصدر."
 msgid "Could not find target user."
 msgstr "تعذّر إيجاد المستخدم الهدف."
 
-#: actions/apigroupcreate.php:167 actions/editgroup.php:186
-#: actions/newgroup.php:126 actions/profilesettings.php:215
-#: actions/register.php:212
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-
 #: actions/apigroupcreate.php:176 actions/editgroup.php:190
 #: actions/newgroup.php:130 actions/profilesettings.php:238
 #: actions/register.php:215
@@ -414,18 +366,6 @@ msgstr "الصفحة الرئيسية ليست عنونًا صالحًا."
 msgid "Full name is too long (max 255 chars)."
 msgstr "الاسم الكامل طويل جدا (الأقصى 255 حرفًا)"
 
-#: actions/apigroupcreate.php:216 actions/editapplication.php:190
-#: actions/newapplication.php:172
-#, php-format
-msgid "Description is too long (max %d chars)."
-msgstr ""
-
-#: actions/apigroupcreate.php:227 actions/editgroup.php:208
-#: actions/newgroup.php:148 actions/profilesettings.php:232
-#: actions/register.php:234
-msgid "Location is too long (max 255 chars)."
-msgstr ""
-
 #: actions/apigroupcreate.php:246 actions/editgroup.php:219
 #: actions/newgroup.php:159
 #, php-format
@@ -437,12 +377,6 @@ msgstr "كنيات كيرة! العدد الأقصى هو %d."
 msgid "Invalid alias: \"%s\"."
 msgstr "كنية غير صالحة: \"%s\"."
 
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr ""
-
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
@@ -454,15 +388,9 @@ msgstr ""
 msgid "Group not found."
 msgstr "المجموعة غير موجودة."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-msgid "You are already a member of that group."
-msgstr ""
-
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
-
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعة %2$s."
@@ -471,7 +399,10 @@ msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعة %2$s."
 msgid "You are not a member of this group."
 msgstr "لست عضوًا في هذه المجموعة"
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "لم يمكن إزالة المستخدم %1$s من المجموعة %2$s."
@@ -500,20 +431,10 @@ msgstr "مجموعات %s"
 msgid "groups on %s"
 msgstr "مجموعات %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "ارفع ملفًا"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "حجم غير صالح."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -541,9 +462,8 @@ msgid "Database error deleting OAuth application user."
 msgstr "خطأ في قاعدة البيانات أثناء حذف مستخدم تطبيق OAuth."
 
 #: actions/apioauthauthorize.php:185
-#, fuzzy
 msgid "Database error inserting OAuth application user."
-msgstr "خطأ Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ø£Ø«Ù\86اء Ø¥Ø¯Ø®Ø§Ù\84 Ø§Ù\84Ù\85ستخدÙ\85 OAuth app"
+msgstr "خطأ Ù\81Ù\8a Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ø£Ø«Ù\86اء Ø­Ø°Ù\81 Ù\85ستخدÙ\85 ØªØ·Ø¨Ù\8aÙ\82 OAuth."
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -616,24 +536,18 @@ msgstr "اسمح"
 msgid "Allow or deny access to your account information."
 msgstr ""
 
-#: actions/apistatusesdestroy.php:112
-msgid "This method requires a POST or DELETE."
-msgstr ""
-
-#: actions/apistatusesdestroy.php:135
-msgid "You may not delete another user's status."
-msgstr ""
-
 #: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
 #: actions/deletenotice.php:52 actions/shownotice.php:92
 msgid "No such notice."
 msgstr "لا إشعار كهذا."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "لا يمكنك تكرار ملحوظتك الخاصة."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "كرر بالفعل هذه الملاحظة."
 
@@ -649,7 +563,7 @@ msgstr "لا حالة وُجدت بهذه الهوية."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -659,7 +573,7 @@ msgstr "هذه طويلة جدًا. أطول حجم للإشعار %d  حرفً
 msgid "Not found."
 msgstr "لم يوجد."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -668,21 +582,6 @@ msgstr ""
 msgid "Unsupported format."
 msgstr "نسق غير مدعوم."
 
-#: actions/apitimelinefavorites.php:110
-#, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr ""
-
-#: actions/apitimelinefavorites.php:119
-#, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr ""
-
-#: actions/apitimelinementions.php:118
-#, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr ""
-
 #: actions/apitimelinementions.php:131
 #, php-format
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
@@ -713,15 +612,6 @@ msgstr "تكرارات %s"
 msgid "Notices tagged with %s"
 msgstr "الإشعارات الموسومة ب%s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr ""
-
-#: actions/apitrends.php:87
-msgid "API method under construction."
-msgstr ""
-
 #: actions/attachment.php:73
 msgid "No such attachment."
 msgstr "لا مرفق كهذا."
@@ -774,7 +664,7 @@ msgid "Preview"
 msgstr "معاينة"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "احذف"
 
@@ -782,10 +672,6 @@ msgstr "احذف"
 msgid "Upload"
 msgstr "ارفع"
 
-#: actions/avatarsettings.php:231 actions/grouplogo.php:289
-msgid "Crop"
-msgstr ""
-
 #: actions/avatarsettings.php:305
 msgid "No file uploaded."
 msgstr "لم يُرفع ملف."
@@ -864,6 +750,8 @@ msgstr "امنع هذا المستخدم"
 msgid "Failed to save block information."
 msgstr "فشل حفظ معلومات المنع."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -873,25 +761,16 @@ msgstr "فشل حفظ معلومات المنع."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "لا مجموعة كهذه."
 
-#: actions/blockedfromgroup.php:97
-#, php-format
-msgid "%s blocked profiles"
-msgstr ""
-
 #: actions/blockedfromgroup.php:100
 #, php-format
 msgid "%1$s blocked profiles, page %2$d"
 msgstr "%1$s ملفات ممنوعة, الصفحة %2$d"
 
-#: actions/blockedfromgroup.php:115
-msgid "A list of the users blocked from joining this group."
-msgstr ""
-
 #: actions/blockedfromgroup.php:288
 msgid "Unblock user from group"
 msgstr "ألغ منع المستخدم من المجموعة"
@@ -928,11 +807,6 @@ msgstr "رمز التأكيد ليس لك!"
 msgid "Unrecognized address type %s."
 msgstr ""
 
-#. TRANS: Client error for an already confirmed email/jabbel/sms address.
-#: actions/confirmaddress.php:96
-msgid "That address has already been confirmed."
-msgstr ""
-
 #. TRANS: Server error thrown on database error updating e-mail preferences.
 #. TRANS: Server error thrown on database error removing a registered e-mail address.
 #. TRANS: Server error thrown on database error updating IM preferences.
@@ -1047,7 +921,7 @@ msgid "Do not delete this notice"
 msgstr "لا تحذف هذا الإشعار"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "احذف هذا الإشعار"
 
@@ -1081,10 +955,6 @@ msgstr "احذف هذا المستخدم"
 msgid "Design"
 msgstr "التصميم"
 
-#: actions/designadminpanel.php:74
-msgid "Design settings for this StatusNet site."
-msgstr ""
-
 #: actions/designadminpanel.php:318
 msgid "Invalid logo URL."
 msgstr "مسار شعار غير صالح."
@@ -1152,10 +1022,6 @@ msgstr "عطّل"
 msgid "Turn background image on or off."
 msgstr "مكّن صورة الخلفية أو عطّلها."
 
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-msgid "Tile background image"
-msgstr ""
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "تغيير الألوان"
@@ -1249,10 +1115,6 @@ msgstr "الاسم مطلوب."
 msgid "Name is too long (max 255 chars)."
 msgstr "الاسم طويل جدا (الأقصى 255 حرفا)."
 
-#: actions/editapplication.php:183 actions/newapplication.php:162
-msgid "Name already in use. Try another one."
-msgstr ""
-
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
 msgstr "الوصف مطلوب."
@@ -1277,14 +1139,6 @@ msgstr "المنظمة طويلة جدا (الأقصى 255 حرفا)."
 msgid "Organization homepage is required."
 msgstr "صفحة المنظمة الرئيسية مطلوبة."
 
-#: actions/editapplication.php:218 actions/newapplication.php:206
-msgid "Callback is too long."
-msgstr ""
-
-#: actions/editapplication.php:225 actions/newapplication.php:215
-msgid "Callback URL is not valid."
-msgstr ""
-
 #: actions/editapplication.php:258
 msgid "Could not update application."
 msgstr "لم يمكن تحديث التطبيق."
@@ -1307,11 +1161,6 @@ msgstr "يجب أن تكون إداريا لتعدل المجموعة."
 msgid "Use this form to edit the group."
 msgstr "استخدم هذا النموذج لتعديل المجموعة."
 
-#: actions/editgroup.php:205 actions/newgroup.php:145
-#, php-format
-msgid "description is too long (max %d chars)."
-msgstr ""
-
 #: actions/editgroup.php:228 actions/newgroup.php:168
 #, php-format
 msgid "Invalid alias: \"%s\""
@@ -1470,11 +1319,6 @@ msgstr "حُفظت تفضيلات البريد الإلكرتوني."
 msgid "No email address."
 msgstr "لا عنوان بريد إلكتروني."
 
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-msgid "Cannot normalize that email address"
-msgstr ""
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
@@ -1506,14 +1350,6 @@ msgid ""
 "inbox (and spam box!) for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-msgid "No pending confirmation to cancel."
-msgstr ""
-
 #. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
 #: actions/emailsettings.php:424
 msgid "That is the wrong email address."
@@ -1546,16 +1382,6 @@ msgstr "لا عنوان بريد إلكتروني وارد."
 msgid "Couldn't update user record."
 msgstr "تعذّر تحديث سجل المستخدم."
 
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-msgid "Incoming email address removed."
-msgstr ""
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
-
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr "هذا الإشعار مفضلة مسبقًا!"
@@ -1649,10 +1475,6 @@ msgstr "المستخدم الذي تستمع إليه غير موجود."
 msgid "You can use the local subscription!"
 msgstr "تستطيع استخدام الاشتراك المحلي!"
 
-#: actions/finishremotesubscribe.php:99
-msgid "That user has blocked you from subscribing."
-msgstr ""
-
 #: actions/finishremotesubscribe.php:110
 msgid "You are not authorized."
 msgstr "لا تملك تصريحًا."
@@ -1677,19 +1499,13 @@ msgstr "لا ملف كهذا."
 msgid "Cannot read file."
 msgstr "تعذّرت قراءة الملف."
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "حجم غير صالح."
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Ù\84ا Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø¥Ø³Ù\83ات المستخدمين على هذا الموقع."
+msgstr "Ù\84ا Ù\8aÙ\85Ù\83Ù\86Ù\83 Ø³Ø­Ø¨ Ø£Ø¯Ù\88ار المستخدمين على هذا الموقع."
 
 #: actions/grantrole.php:82
 msgid "User already has this role."
@@ -1716,10 +1532,6 @@ msgstr "لا مجموعة مُحدّدة."
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-msgid "User is already blocked from group."
-msgstr ""
-
 #: actions/groupblock.php:100
 msgid "User is not a member of group."
 msgstr "المستخدم ليس عضوًا في المجموعة."
@@ -1762,12 +1574,6 @@ msgstr "يجب أن تلج لتُعدّل المجموعات."
 msgid "Group design"
 msgstr "تصميم المجموعة"
 
-#: actions/groupdesignsettings.php:155
-msgid ""
-"Customize the way your group looks with a background image and a colour "
-"palette of your choice."
-msgstr ""
-
 #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
 #: lib/designsettings.php:391 lib/designsettings.php:413
 msgid "Couldn't update your design."
@@ -1842,12 +1648,6 @@ msgstr "اجعل هذا المستخدم إداريًا"
 msgid "%s timeline"
 msgstr "مسار %s الزمني"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr ""
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
@@ -1973,11 +1773,6 @@ msgstr ""
 msgid "IM preferences"
 msgstr "تفضيلات المحادثة الفورية"
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:160
-msgid "Send me notices through Jabber/GTalk."
-msgstr ""
-
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:166
 msgid "Post a notice when my Jabber/GTalk status changes."
@@ -1988,11 +1783,6 @@ msgstr ""
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
 msgstr ""
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -2003,26 +1793,11 @@ msgstr "حُفِظت التفضيلات."
 msgid "No Jabber ID."
 msgstr "لا هوية جابر."
 
-#. TRANS: Message given saving IM address that cannot be normalised.
-#: actions/imsettings.php:317
-msgid "Cannot normalize that Jabber ID"
-msgstr ""
-
 #. TRANS: Message given saving IM address that not valid.
 #: actions/imsettings.php:322
 msgid "Not a valid Jabber ID"
 msgstr "ليست هوية جابر صالحة"
 
-#. TRANS: Message given saving IM address that is already set.
-#: actions/imsettings.php:326
-msgid "That is already your Jabber ID."
-msgstr ""
-
-#. TRANS: Message given saving IM address that is already set for another user.
-#: actions/imsettings.php:330
-msgid "Jabber ID already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid IM address that is to be confirmed.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:358
@@ -2076,11 +1851,6 @@ msgstr "هذا صندوق بريدك الوارد، والذي يسرد رسائ
 msgid "Invites have been disabled."
 msgstr "تم تعطيل الدعوات."
 
-#: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "يجب أن تلج لتُعدّل المجموعات."
-
 #: actions/invite.php:72
 #, php-format
 msgid "Invalid email address: %s"
@@ -2094,13 +1864,9 @@ msgstr "أُرسلت الدعوة"
 msgid "Invite new users"
 msgstr "دعوة مستخدمين جدد"
 
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2147,12 +1913,6 @@ msgctxt "BUTTON"
 msgid "Send"
 msgstr "أرسل"
 
-#. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
-#: actions/invite.php:228
-#, php-format
-msgid "%1$s has invited you to join them on %2$s"
-msgstr ""
-
 #. TRANS: Body text for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:231
 #, php-format
@@ -2189,14 +1949,7 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "يجب أن تلج لتنضم إلى مجموعة."
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "لا اسم مستعار."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s انضم للمجموعة %2$s"
@@ -2205,13 +1958,12 @@ msgstr "%1$s انضم للمجموعة %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "يجب أن تلج لتغادر مجموعة."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "لست عضوا في تلك المجموعة."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s ترك المجموعة %2$s"
@@ -2255,11 +2007,6 @@ msgid ""
 msgstr ""
 "لأسباب أمنية، من فضلك أعد إدخال اسم مستخدمك وكلمة سرك قبل تغيير إعداداتك."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "لُج باسم مستخدم وكلمة سر"
-
 #: actions/login.php:295
 #, php-format
 msgid ""
@@ -2270,11 +2017,6 @@ msgstr ""
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr ""
-
 #: actions/makeadmin.php:133
 #, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
@@ -2301,10 +2043,6 @@ msgstr "يجب أن تكون مسجل الدخول لتسجل تطبيقا."
 msgid "Use this form to register a new application."
 msgstr "استخدم هذا النموذج لتسجل تطبيقا جديدا."
 
-#: actions/newapplication.php:176
-msgid "Source URL is required."
-msgstr ""
-
 #: actions/newapplication.php:258 actions/newapplication.php:267
 msgid "Could not create application."
 msgstr "لم يمكن إنشاء التطبيق."
@@ -2321,12 +2059,15 @@ msgstr "استخدم هذا النموذج لإنشاء مجموعة جديدة.
 msgid "New message"
 msgstr "رسالة جديدة"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "لا يمكنك إرسال رسائل إلى هذا المستخدم."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "لا محتوى!"
 
@@ -2334,7 +2075,8 @@ msgstr "لا محتوى!"
 msgid "No recipient specified."
 msgstr "لا مستلم حُدّد."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2343,12 +2085,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "أُرسلت الرسالة"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "رسالة مباشرة ل%s تم إرسالها."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "خطأ أجاكس"
 
@@ -2356,7 +2100,7 @@ msgstr "خطأ أجاكس"
 msgid "New notice"
 msgstr "إشعار جديد"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "أُرسل الإشعار"
 
@@ -2397,11 +2141,6 @@ msgstr ""
 msgid "Updates with \"%s\""
 msgstr ""
 
-#: actions/noticesearchrss.php:98
-#, php-format
-msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr ""
-
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
@@ -2427,15 +2166,6 @@ msgstr "تطبيقات OAuth"
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
@@ -2457,11 +2187,6 @@ msgstr ""
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
-#: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
-msgid "Notice has no profile."
-msgstr "ليس للمستخدم ملف شخصي."
-
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
 msgid "%1$s's status on %2$s"
@@ -2469,9 +2194,9 @@ msgstr "حالة %1$s في يوم %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "نوع المحتوى "
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2480,8 +2205,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "ليس نسق بيانات مدعوم."
 
@@ -2521,10 +2246,6 @@ msgstr "اعرض تصاميم الملف الشخصي"
 msgid "Show or hide profile designs."
 msgstr "أظهر أو أخفِ تصاميم الملفات الشخصية."
 
-#: actions/othersettings.php:153
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr ""
-
 #: actions/otp.php:69
 msgid "No user ID specified."
 msgstr "لا هوية مستخدم محددة."
@@ -2625,10 +2346,6 @@ msgstr "حُفظت كلمة السر."
 msgid "Paths"
 msgstr "المسارات"
 
-#: actions/pathsadminpanel.php:70
-msgid "Path and server settings for this StatusNet site."
-msgstr ""
-
 #: actions/pathsadminpanel.php:157
 #, php-format
 msgid "Theme directory not readable: %s."
@@ -2649,10 +2366,6 @@ msgstr "لا يمكن الكتابة في دليل الخلفيات: %s."
 msgid "Locales directory not readable: %s."
 msgstr "لا يمكن قراءة دليل المحليات: %s."
 
-#: actions/pathsadminpanel.php:183
-msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
-
 #: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
 msgid "Site"
 msgstr "الموقع"
@@ -2899,28 +2612,15 @@ msgid ""
 "Automatically subscribe to whoever subscribes to me (best for non-humans)"
 msgstr "اشترك تلقائيًا بأي شخص يشترك بي (يفضل أن يستخدم لغير البشر)"
 
-#: actions/profilesettings.php:228 actions/register.php:230
-#, php-format
-msgid "Bio is too long (max %d chars)."
-msgstr ""
-
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr "لم تُختر المنطقة الزمنية."
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
 msgid "Invalid tag: \"%s\""
 msgstr "وسم غير صالح: \"%s\""
 
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
 #: actions/profilesettings.php:363
 msgid "Couldn't save location prefs."
 msgstr "لم يمكن حفظ تفضيلات الموقع."
@@ -2943,10 +2643,6 @@ msgstr "حُفظت الإعدادات."
 msgid "Beyond the page limit (%s)."
 msgstr "بعد حد الصفحة (%s)."
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
 #: actions/public.php:130
 #, php-format
 msgid "Public timeline, page %d"
@@ -3061,10 +2757,6 @@ msgstr "خطأ في رمز التأكيد."
 msgid "This confirmation code is too old. Please start again."
 msgstr "رمز التأكيد هذا قديم جدًا. من فضلك ابدأ من جديد."
 
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
@@ -3107,10 +2799,6 @@ msgstr "طُلبت استعادة كلمة السر"
 msgid "Unknown action"
 msgstr "إجراء غير معروف"
 
-#: actions/recoverpassword.php:236
-msgid "6 or more characters, and don't forget it!"
-msgstr ""
-
 #: actions/recoverpassword.php:243
 msgid "Reset"
 msgstr "أعد الضبط"
@@ -3119,10 +2807,6 @@ msgstr "أعد الضبط"
 msgid "Enter a nickname or email address."
 msgstr "أدخل اسمًا مستعارًا أو عنوان بريد إلكتروني."
 
-#: actions/recoverpassword.php:282
-msgid "No user with that email address or username."
-msgstr ""
-
 #: actions/recoverpassword.php:299
 msgid "No registered email address for that user."
 msgstr "لا يوجد عنوان بريد إلكتروني مُسجّل لهذا المستخدم."
@@ -3137,18 +2821,10 @@ msgid ""
 "address registered to your account."
 msgstr ""
 
-#: actions/recoverpassword.php:357
-msgid "Unexpected password reset."
-msgstr ""
-
 #: actions/recoverpassword.php:365
 msgid "Password must be 6 chars or more."
 msgstr "يجب أن تكون كلمة السر 6 محارف أو أكثر."
 
-#: actions/recoverpassword.php:369
-msgid "Password and confirmation do not match."
-msgstr ""
-
 #: actions/recoverpassword.php:388 actions/register.php:255
 msgid "Error setting user."
 msgstr "خطأ أثناء ضبط المستخدم."
@@ -3177,10 +2853,6 @@ msgstr "سجّل"
 msgid "Registration not allowed."
 msgstr "لا يُسمح بالتسجيل."
 
-#: actions/register.php:205
-msgid "You can't register if you don't agree to the license."
-msgstr ""
-
 #: actions/register.php:219
 msgid "Email address already exists."
 msgstr "عنوان البريد الإلكتروني موجود مسبقًا."
@@ -3195,10 +2867,6 @@ msgid ""
 "link up to friends and colleagues. "
 msgstr ""
 
-#: actions/register.php:432
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr ""
-
 #: actions/register.php:437
 msgid "6 or more characters. Required."
 msgstr "6 حروف أو أكثر. مطلوب."
@@ -3344,7 +3012,7 @@ msgstr "لا يمكنك تكرار ملاحظتك الشخصية."
 msgid "You already repeated that notice."
 msgstr "أنت كررت هذه الملاحظة بالفعل."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "مكرر"
 
@@ -3373,11 +3041,6 @@ msgstr ""
 msgid "Replies feed for %s (RSS 2.0)"
 msgstr ""
 
-#: actions/replies.php:159
-#, php-format
-msgid "Replies feed for %s (Atom)"
-msgstr ""
-
 #: actions/replies.php:199
 #, php-format
 msgid ""
@@ -3399,11 +3062,6 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr ""
-
 #: actions/revokerole.php:75
 msgid "You cannot revoke user roles on this site."
 msgstr "لا يمكنك سحب أدوار المستخدمين على هذا الموقع."
@@ -3416,14 +3074,6 @@ msgstr "ليس للمستخدم هذا الدور."
 msgid "StatusNet"
 msgstr "ستاتس نت"
 
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-msgid "You cannot sandbox users on this site."
-msgstr ""
-
-#: actions/sandbox.php:72
-msgid "User is already sandboxed."
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
@@ -3434,10 +3084,6 @@ msgstr "الجلسات"
 msgid "Session settings for this StatusNet site."
 msgstr "إعدادات جلسة موقع StatusNet هذا."
 
-#: actions/sessionsadminpanel.php:175
-msgid "Handle sessions"
-msgstr ""
-
 #: actions/sessionsadminpanel.php:177
 msgid "Whether to handle sessions ourselves."
 msgstr ""
@@ -3459,10 +3105,6 @@ msgstr "اذف إعدادت الموقع"
 msgid "You must be logged in to view an application."
 msgstr "يجب أن تكون مسجل الدخول لرؤية تطبيق."
 
-#: actions/showapplication.php:157
-msgid "Application profile"
-msgstr ""
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
@@ -3495,10 +3137,6 @@ msgstr "إحصاءات"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
@@ -3542,10 +3180,6 @@ msgstr "أمتأكد من أنك تريد إعادة ضبط مفتاح المس
 msgid "%1$s's favorite notices, page %2$d"
 msgstr "إشعارات %1$s المُفضلة، الصفحة %2$d"
 
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
-msgstr ""
-
 #: actions/showfavorites.php:171
 #, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
@@ -3568,23 +3202,19 @@ msgid ""
 msgstr ""
 
 #: actions/showfavorites.php:208
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
 msgstr ""
-"%s لم يضف أي إشعارات إلى مفضلته إلى الآن. أرسل شيئًا شيقًا ليضيفه إلى "
-"مفضلته. :)"
 
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s لم يضف أي إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
-"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3618,10 +3248,6 @@ msgstr "ملاحظة"
 msgid "Aliases"
 msgstr "الكنى"
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
 #, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
@@ -3637,11 +3263,6 @@ msgstr ""
 msgid "Notice feed for %s group (Atom)"
 msgstr ""
 
-#: actions/showgroup.php:355
-#, php-format
-msgid "FOAF for %s group"
-msgstr ""
-
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
 msgstr "الأعضاء"
@@ -3699,25 +3320,10 @@ msgstr "لا رسالة كهذه."
 msgid "Only the sender and recipient may read this message."
 msgstr "يحق للمُرسل والمستلم فقط قراءة هذه الرسالة."
 
-#: actions/showmessage.php:108
-#, php-format
-msgid "Message to %1$s on %2$s"
-msgstr ""
-
-#: actions/showmessage.php:113
-#, php-format
-msgid "Message from %1$s on %2$s"
-msgstr ""
-
 #: actions/shownotice.php:90
 msgid "Notice deleted."
 msgstr "حُذف الإشعار."
 
-#: actions/showstream.php:73
-#, php-format
-msgid " tagged %s"
-msgstr ""
-
 #: actions/showstream.php:79
 #, php-format
 msgid "%1$s, page %2$d"
@@ -3743,11 +3349,6 @@ msgstr ""
 msgid "Notice feed for %s (Atom)"
 msgstr ""
 
-#: actions/showstream.php:148
-#, php-format
-msgid "FOAF for %s"
-msgstr ""
-
 #: actions/showstream.php:200
 #, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
@@ -3893,10 +3494,6 @@ msgstr "حد النص"
 msgid "Maximum number of characters for notices."
 msgstr "أقصى عدد للحروف في الإشعارات."
 
-#: actions/siteadminpanel.php:278
-msgid "Dupe limit"
-msgstr ""
-
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
@@ -3951,16 +3548,6 @@ msgstr "الرسائل القصيرة غير متوفرة."
 msgid "SMS address"
 msgstr "عنوان الرسائل القصيرة"
 
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-msgid "Current confirmed SMS-enabled phone number."
-msgstr ""
-
-#. TRANS: Form guide in IM settings form.
-#: actions/smssettings.php:133
-msgid "Awaiting confirmation on this phone number."
-msgstr ""
-
 #. TRANS: Field label for SMS address input in SMS settings form.
 #: actions/smssettings.php:142
 msgid "Confirmation code"
@@ -4009,21 +3596,6 @@ msgstr "حُفظت تفضيلات الرسائل القصيرة."
 msgid "No phone number."
 msgstr "لا رقم هاتف."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-msgid "That is already your phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-msgid "That phone number already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
 msgid ""
@@ -4057,11 +3629,6 @@ msgstr "تمت إزالة رقم هاتف الرسائل القصيرة."
 msgid "Mobile carrier"
 msgstr ""
 
-#. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
-#: actions/smssettings.php:516
-msgid "Select a carrier"
-msgstr ""
-
 #. TRANS: Form instructions for mobile carrier dropdown menu in SMS settings.
 #. TRANS: %s is an administrative contact's e-mail address.
 #: actions/smssettings.php:525
@@ -4082,23 +3649,10 @@ msgstr "لم تدخل رمزًا"
 msgid "Snapshots"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:65
-#, fuzzy
-msgid "Manage snapshot configuration"
-msgstr "غيّر ضبط الموقع"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-msgid "Invalid snapshot report URL."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4131,15 +3685,6 @@ msgstr "بلّغ عن المسار"
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "اذف إعدادت الموقع"
-
-#: actions/subedit.php:70
-msgid "You are not subscribed to that profile."
-msgstr ""
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
 msgid "Could not save subscription."
@@ -4175,11 +3720,6 @@ msgstr "مشتركو %1$s, الصفحة %2$d"
 msgid "These are the people who listen to your notices."
 msgstr "هؤلاء هم الأشخاص الذين يستمعون إلى إشعاراتك."
 
-#: actions/subscribers.php:67
-#, php-format
-msgid "These are the people who listen to %s's notices."
-msgstr ""
-
 #: actions/subscribers.php:108
 msgid ""
 "You have no subscribers. Try subscribing to people you know and they might "
@@ -4227,11 +3767,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, php-format
-msgid "%s is not listening to anyone."
-msgstr ""
-
 #: actions/subscriptions.php:208
 msgid "Jabber"
 msgstr "جابر"
@@ -4264,11 +3799,6 @@ msgstr ""
 msgid "No ID argument."
 msgstr "لا مدخل هوية."
 
-#: actions/tagother.php:65
-#, php-format
-msgid "Tag %s"
-msgstr ""
-
 #: actions/tagother.php:77 lib/userprofile.php:76
 msgid "User profile"
 msgstr "ملف المستخدم الشخصي"
@@ -4282,12 +3812,6 @@ msgstr "صورة"
 msgid "Tag user"
 msgstr "اوسم المستخدم"
 
-#: actions/tagother.php:151
-msgid ""
-"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
-"separated"
-msgstr ""
-
 #: actions/tagother.php:193
 msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
@@ -4297,10 +3821,6 @@ msgstr ""
 msgid "Could not save tags."
 msgstr "تعذّر حفظ الوسوم."
 
-#: actions/tagother.php:236
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr ""
-
 #: actions/tagrss.php:35
 msgid "No such tag."
 msgstr "لا وسم كهذا."
@@ -4317,11 +3837,6 @@ msgstr "المستخدم ليس في صندوق الرمل."
 msgid "User is not silenced."
 msgstr "المستخدم ليس مُسكتًا."
 
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "لا طلب استيثاق."
-
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
 msgstr "غير مشترك"
@@ -4338,10 +3853,6 @@ msgctxt "TITLE"
 msgid "User"
 msgstr "المستخدم"
 
-#: actions/useradminpanel.php:70
-msgid "User settings for this StatusNet site."
-msgstr ""
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4401,10 +3912,6 @@ msgstr "الدعوات مُفعلة"
 msgid "Whether to allow users to invite new users."
 msgstr ""
 
-#: actions/userauthorization.php:105
-msgid "Authorize subscription"
-msgstr ""
-
 #: actions/userauthorization.php:110
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
@@ -4437,10 +3944,6 @@ msgstr "ارفض هذا الاشتراك"
 msgid "No authorization request!"
 msgstr "لا طلب استيثاق!"
 
-#: actions/userauthorization.php:254
-msgid "Subscription authorized"
-msgstr ""
-
 #: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4479,11 +3982,6 @@ msgstr ""
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:345
-#, php-format
-msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
-
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
@@ -4528,17 +4026,6 @@ msgstr "%s ليس عضوًا في أي مجموعة."
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
 msgstr "جرّب [البحث عن مجموعات](%%action.groupsearch%%) والانضمام إليها."
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom group notice feed.
-#. TRANS: %1$s is a group name, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom user notice feed.
-#. TRANS: %1$s is a user name, %2$s is a site name.
-#: actions/userrss.php:97 lib/atomgroupnoticefeed.php:70
-#: lib/atomusernoticefeed.php:76
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
 #: actions/version.php:75
 #, php-format
 msgid "StatusNet %s"
@@ -4627,12 +4114,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "حجم غير صالح."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4675,11 +4156,6 @@ msgstr "أنت ممنوع من إرسال رسائل مباشرة."
 msgid "Could not insert message."
 msgstr "تعذّر إدراج الرسالة."
 
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4688,59 +4164,48 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "خطأ Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ø£Ø«Ù\86اء Ø¥Ø¯Ø®Ø§Ù\84 Ø§Ù\84Ù\85ستخدÙ\85 OAuth app"
+msgstr "خطأ Ù\81Ù\8a Ù\82اعدة Ø§Ù\84بÙ\8aاÙ\86ات Ø£Ø«Ù\86اء Ø­Ø°Ù\81 Ù\85ستخدÙ\85 ØªØ·Ø¨Ù\8aÙ\82 OAuth."
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "مشكلة في حفظ الإشعار. طويل جدًا."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "مشكلة في حفظ الإشعار. مستخدم غير معروف."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-msgid "You are banned from posting notices on this site."
-msgstr ""
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "مشكلة أثناء حفظ الإشعار."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "مشكلة أثناء حفظ الإشعار."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "آر تي @%1$s %2$s"
@@ -4759,18 +4224,6 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "ليس للمستخدم ملف شخصي."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "تعذّر حفظ إشعار الموقع."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
@@ -4793,21 +4246,18 @@ msgstr "غير مشترك!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "لم يمكن حذف اشتراك ذاتي."
+msgstr "تعذّر حفظ الاشتراك."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "تعذّر حذف الاشتراك."
+msgstr "تعذّر حفظ الاشتراك."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "تعذّر حذف الاشتراك."
+msgstr "تعذّر حفظ الاشتراك."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -4823,9 +4273,8 @@ msgstr "تعذّر إنشاء المجموعة."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "تعذÙ\91ر Ø¶Ø¨Ø· Ø¹Ø¶Ù\88Ù\8aØ© المجموعة."
+msgstr "تعذÙ\91ر Ø¥Ù\86شاء المجموعة."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
@@ -4834,9 +4283,8 @@ msgstr "تعذّر ضبط عضوية المجموعة."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "تعذّر حفظ الاشتراك."
+msgstr "تعذر تحديث المجموعة المحلية."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
@@ -4884,11 +4332,6 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr "صفحة غير مُعنونة"
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-msgid "Primary site navigation"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -5016,11 +4459,6 @@ msgstr "المشاهدات المحلية"
 msgid "Page notice"
 msgstr "إشعار الصفحة"
 
-#. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
-#: lib/action.php:762
-msgid "Secondary site navigation"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
 msgid "Help"
@@ -5067,13 +4505,11 @@ msgstr "رخصة برنامج StatusNet"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** خدمة تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
-"broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5123,11 +4559,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5167,16 +4598,6 @@ msgstr "لا يمكنك إجراء تغييرات على هذا الموقع."
 msgid "Changes to that panel are not allowed."
 msgstr "التغييرات لهذه اللوحة غير مسموح بها."
 
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-msgid "showForm() not implemented."
-msgstr ""
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-msgid "saveSettings() not implemented."
-msgstr ""
-
 #. TRANS: Client error message thrown if design settings could not be deleted in
 #. TRANS: the admin panel Design.
 #: lib/adminpanelaction.php:284
@@ -5235,12 +4656,6 @@ msgstr "ضبط الجلسات"
 msgid "Edit site notice"
 msgstr "عدّل إشعار الموقع"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "ضبط المسارات"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
@@ -5256,12 +4671,6 @@ msgstr "عدّل التطبيق"
 msgid "Icon for this application"
 msgstr "أيقونة لهذا التطبيق"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, php-format
-msgid "Describe your application in %d characters"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
 msgid "Describe your application"
@@ -5277,16 +4686,6 @@ msgstr "مسار صفحة هذا التطبيق"
 msgid "Source URL"
 msgstr "مسار المصدر"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:242
-msgid "URL for the homepage of the organization"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
 msgid "URL to redirect to after authentication"
@@ -5345,10 +4744,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "اسحب"
+msgstr "أزÙ\84"
 
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
@@ -5365,10 +4763,6 @@ msgstr "المؤلف"
 msgid "Provider"
 msgstr "المزود"
 
-#: lib/attachmentnoticesection.php:67
-msgid "Notices where this attachment appears"
-msgstr ""
-
 #: lib/attachmenttagcloudsection.php:48
 msgid "Tags for this attachment"
 msgstr "وسوم هذا المرفق"
@@ -5393,44 +4787,16 @@ msgstr "اكتمل الأمر"
 msgid "Command failed"
 msgstr "فشل الأمر"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "الملاحظة بهذا الرقم غير موجودة"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "ليس للمستخدم إشعار أخير"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "لم يمكن إيجاد مستخدم بالاسم %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "لم يمكن إيجاد مستخدم بالاسم %s"
-
-#: lib/command.php:180
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
-
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "التنبيه تم إرساله إلى %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5441,55 +4807,34 @@ msgstr ""
 "المشتركون: %2$s\n"
 "الإشعارات: %3$s"
 
-#: lib/command.php:302
-msgid "Notice marked as fave."
-msgstr ""
-
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "أنت بالفعل عضو في هذه المجموعة"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "لم يمكن ضم المستخدم %1$s إلى المجموعة %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "لم يمكن إزالة المستخدم %1$s من المجموعة %2$s."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "الاسم الكامل: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "الموقع: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "الصفحة الرئيسية: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "عن: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5498,116 +4843,91 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "رسالة مباشرة إلى %s تم إرسالها"
-
-#: lib/command.php:494
-msgid "Error sending direct message."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "لا يمكنك تكرار ملاحظتك الخاصة"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "كرر بالفعل هذا الإشعار"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "الإشعار من %s مكرر"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "خطأ تكرار الإشعار."
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "رُد على رسالة %s"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "خطأ أثناء حفظ الإشعار."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "مُشترك ب%s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr ""
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "الأمر لم يُجهزّ بعد."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "الإشعار مُطفأ."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "تعذّر إطفاء الإشعارات."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "الإشعار يعمل."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "تعذّر تشغيل الإشعار."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "ألغِ الاشتراك"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "لست مُشتركًا بأي أحد."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "لست مشتركًا بأحد."
@@ -5617,11 +4937,16 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
 msgstr[4] ""
 msgstr[5] ""
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "لا أحد مشترك بك."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "لا أحد مشترك بك."
@@ -5631,11 +4956,16 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
 msgstr[4] ""
 msgstr[5] ""
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "لست عضوًا في أي مجموعة."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "لست عضوًا في أي مجموعة."
@@ -5645,7 +4975,7 @@ msgstr[3] "أنت عضو في هذه المجموعات:"
 msgstr[4] ""
 msgstr[5] ""
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5725,10 +5055,6 @@ msgstr ""
 "tracks - لم يطبق بعد.\n"
 "tracking - لم يطبق بعد.\n"
 
-#: lib/common.php:135
-msgid "No configuration file found. "
-msgstr ""
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5757,10 +5083,6 @@ msgstr "تحديثات عبر الرسائل القصيرة"
 msgid "Connections"
 msgstr "اتصالات"
 
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr "خطأ قاعدة بيانات"
@@ -5839,24 +5161,10 @@ msgstr "اذهب"
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-msgid "URL of the homepage or blog of the group or topic"
-msgstr ""
-
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
 msgstr "صِف المجموعة أو الموضوع"
 
-#: lib/groupeditform.php:170
-#, php-format
-msgid "Describe the group or topic in %d characters"
-msgstr ""
-
-#: lib/groupeditform.php:179
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr ""
-
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
@@ -5870,11 +5178,6 @@ msgstr "مجموعات"
 msgid "Blocked"
 msgstr "ممنوع"
 
-#: lib/groupnav.php:102
-#, php-format
-msgid "%s blocked users"
-msgstr ""
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -5912,19 +5215,11 @@ msgstr "وسوم في إشعارات مجموعة %s"
 msgid "This page is not available in a media type you accept"
 msgstr ""
 
-#: lib/imagefile.php:72
-msgid "Unsupported image file format."
-msgstr ""
-
 #: lib/imagefile.php:88
 #, php-format
 msgid "That file is too big. The maximum file size is %s."
 msgstr "هذا الملف كبير جدًا. إن أقصى حجم للملفات هو %s."
 
-#: lib/imagefile.php:93
-msgid "Partial upload."
-msgstr ""
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -5933,10 +5228,6 @@ msgstr ""
 msgid "Not an image or corrupt file."
 msgstr ""
 
-#: lib/imagefile.php:122
-msgid "Lost our file."
-msgstr ""
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr "نوع ملف غير معروف"
@@ -6211,17 +5502,13 @@ msgid ""
 "P.S. You can turn off these email notifications here: %8$s\n"
 msgstr ""
 
-#: lib/mailbox.php:89
-msgid "Only the user can read their own mailboxes."
-msgstr ""
-
 #: lib/mailbox.php:139
 msgid ""
 "You have no private messages. You can send private message to engage other "
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "من"
 
@@ -6233,14 +5520,6 @@ msgstr "تعذّر تحليل الرسالة."
 msgid "Not a registered user."
 msgstr "ليس مستخدمًا مسجلًا."
 
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
-#: lib/mailhandler.php:50
-msgid "Sorry, no incoming email allowed."
-msgstr ""
-
 #: lib/mailhandler.php:228
 #, php-format
 msgid "Unsupported message type: %s"
@@ -6306,11 +5585,11 @@ msgstr "أرسل إشعارًا مباشرًا"
 msgid "To"
 msgstr "إلى"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "المحارف المتوفرة"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "أرسل"
@@ -6319,28 +5598,28 @@ msgstr "أرسل"
 msgid "Send a notice"
 msgstr "أرسل إشعارًا"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "ما الأخبار يا %s؟"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "أرفق"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "أرفق ملفًا"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "شارك موقعي"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "لا تشارك موقعي"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6375,23 +5654,27 @@ msgstr ""
 msgid "at"
 msgstr "في"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "في السياق"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "مكرر بواسطة"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "رُد على هذا الإشعار"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "رُد"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "الإشعار مكرر"
 
@@ -6403,10 +5686,6 @@ msgstr "نبّه هذا المستخدم"
 msgid "Nudge"
 msgstr "نبّه"
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "خطأ أثناء إدراج الملف الشخصي الجديد"
@@ -6541,11 +5820,6 @@ msgstr "نعم"
 msgid "Repeat this notice"
 msgstr "كرّر هذا الإشعار"
 
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "امنع هذا المستخدم من هذه المجموعة"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
@@ -6625,11 +5899,6 @@ msgstr "المجموعات التي %s عضو فيها"
 msgid "Invite"
 msgstr "ادعُ"
 
-#: lib/subgroupnav.php:106
-#, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -6652,13 +5921,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "فشل تحديث الأفتار."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6684,18 +5946,13 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "خطأ أثناء تحديث الملف الشخصي البعيد"
+msgstr "خطأ أثناء تحديث الملف الشخصي البعيد."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr "أعلى المرسلين"
 
-#: lib/unsandboxform.php:69
-msgid "Unsandbox"
-msgstr ""
-
 #: lib/unsandboxform.php:80
 msgid "Unsandbox this user"
 msgstr "أزل هذا المستخدم من صندوق الرمل"
@@ -6716,11 +5973,6 @@ msgstr "ألغِ الاشتراك مع هذا المستخدم"
 msgid "Unsubscribe"
 msgstr "ألغِ الاشتراك"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "ليس للمستخدم ملف شخصي."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "عدّل الأفتار"
@@ -6768,56 +6020,32 @@ msgid "Moderator"
 msgstr "مراقب"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "قبل لحظات قليلة"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "قبل دقيقة تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
-#, php-format
-msgid "about %d minutes ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "قبل ساعة تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
-#, php-format
-msgid "about %d hours ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "قبل يوم تقريبا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
-#, php-format
-msgid "about %d days ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "قبل شهر تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
-#, php-format
-msgid "about %d months ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "قبل سنة تقريبًا"
 
@@ -6825,13 +6053,3 @@ msgstr "قبل سنة تقريبًا"
 #, php-format
 msgid "%s is not a valid color!"
 msgstr "%s ليس لونًا صحيحًا!"
-
-#: lib/webcolor.php:123
-#, php-format
-msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 0b06f2817f452b956596489401caf7f82bf81175..c52bcf19e0401cc35e5148952716209c2dd3ede9 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:02+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:28:55+0000\n"
 "Language-Team: Egyptian Spoken Arabic\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: arz\n"
 "X-Message-Group: out-statusnet\n"
@@ -28,18 +28,6 @@ msgstr ""
 msgid "Access"
 msgstr "نفاذ"
 
-#. TRANS: Page notice
-#: actions/accessadminpanel.php:67
-#, fuzzy
-msgid "Site access settings"
-msgstr "اذف إعدادت الموقع"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "سجّل"
-
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
@@ -47,10 +35,9 @@ msgstr "أأمنع المستخدمين المجهولين (غير الوالج
 
 #. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
 #: actions/accessadminpanel.php:167
-#, fuzzy
 msgctxt "LABEL"
 msgid "Private"
-msgstr "خاص"
+msgstr "خصÙ\88صÙ\8aØ©"
 
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
@@ -72,31 +59,13 @@ msgstr "عطّل التسجيل الجديد."
 msgid "Closed"
 msgstr "مُغلق"
 
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "اذف إعدادت الموقع"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "أرسل"
-
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "لا صفحه كهذه"
+msgstr "لا وسم كهذا."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -116,7 +85,7 @@ msgstr "لا صفحه كهذه"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "لا مستخدم كهذا."
@@ -178,27 +147,17 @@ msgid ""
 msgstr ""
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"%s لم يضف أى إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
-"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
 
 #. TRANS: H1 text
 #: actions/all.php:182
 msgid "You and friends"
 msgstr "أنت والأصدقاء"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
-#: actions/allrss.php:121 actions/apitimelinefriends.php:216
-#: actions/apitimelinehome.php:122
-#, php-format
-msgid "Updates from %1$s and friends on %2$s!"
-msgstr ""
-
 #: actions/apiaccountratelimitstatus.php:72
 #: actions/apiaccountupdatedeliverydevice.php:94
 #: actions/apiaccountupdateprofile.php:97
@@ -274,16 +233,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-msgid "Unable to save your design settings."
-msgstr ""
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:187
 #: actions/apiaccountupdateprofilecolors.php:142
 msgid "Could not update your design."
@@ -306,30 +255,15 @@ msgstr "فشل إلغاء منع المستخدم."
 msgid "Direct messages from %s"
 msgstr "رسائل مباشره من %s"
 
-#: actions/apidirectmessage.php:93
-#, php-format
-msgid "All the direct messages sent from %s"
-msgstr ""
-
 #: actions/apidirectmessage.php:101
 #, php-format
 msgid "Direct messages to %s"
 msgstr "رساله مباشره %s"
 
-#: actions/apidirectmessage.php:105
-#, php-format
-msgid "All the direct messages sent to %s"
-msgstr ""
-
 #: actions/apidirectmessagenew.php:118
 msgid "No message text!"
 msgstr "لا نص فى الرسالة!"
 
-#: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, php-format
-msgid "That's too long. Max message size is %d chars."
-msgstr ""
-
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
 msgstr "لم يُعثر على المستخدم المستلم."
@@ -338,16 +272,12 @@ msgstr "لم يُعثر على المستخدم المستلم."
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
 
-#: actions/apifavoritecreate.php:109 actions/apifavoritedestroy.php:110
-#: actions/apistatusesdestroy.php:121
-msgid "No status found with that ID."
-msgstr ""
-
 #: actions/apifavoritecreate.php:120
 msgid "This status is already a favorite."
 msgstr "الحاله دى موجوده فعلا فى التفضيلات."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "تعذّر إنشاء مفضله."
 
@@ -359,20 +289,6 @@ msgstr "الحاله دى مش محطوطه فى التفضيلات."
 msgid "Could not delete favorite."
 msgstr "تعذّر حذف المفضله."
 
-#: actions/apifriendshipscreate.php:109
-#, fuzzy
-msgid "Could not follow user: profile not found."
-msgstr "لم يمكن حفظ الملف."
-
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:109
-msgid "Could not unfollow user: User not found."
-msgstr ""
-
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
 msgstr "ما ينفعش عدم متابعة نفسك."
@@ -381,10 +297,6 @@ msgstr "ما ينفعش عدم متابعة نفسك."
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-msgid "Could not determine source user."
-msgstr ""
-
 #: actions/apifriendshipsshow.php:142
 msgid "Could not find target user."
 msgstr "تعذّر إيجاد المستخدم الهدف."
@@ -420,29 +332,12 @@ msgstr "الصفحه الرئيسيه ليست عنونًا صالحًا."
 msgid "Full name is too long (max 255 chars)."
 msgstr "الاسم الكامل طويل جدا (الأقصى 255 حرفًا)"
 
-#: actions/apigroupcreate.php:216 actions/editapplication.php:190
-#: actions/newapplication.php:172
-#, php-format
-msgid "Description is too long (max %d chars)."
-msgstr ""
-
-#: actions/apigroupcreate.php:227 actions/editgroup.php:208
-#: actions/newgroup.php:148 actions/profilesettings.php:232
-#: actions/register.php:234
-msgid "Location is too long (max 255 chars)."
-msgstr ""
-
 #: actions/apigroupcreate.php:246 actions/editgroup.php:219
 #: actions/newgroup.php:159
 #, php-format
 msgid "Too many aliases! Maximum %d."
 msgstr ""
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "كنيه غير صالحة: \"%s\""
-
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
 #, php-format
@@ -457,28 +352,20 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "لم توجد المجموعة!"
-
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-msgid "You are already a member of that group."
-msgstr ""
-
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "لم يوجد."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "ما نفعش يضم %1$s للجروپ %2$s."
 
-#: actions/apigroupleave.php:115
-msgid "You are not a member of this group."
-msgstr ""
-
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "ما نفعش يتشال اليوزر %1$s من الجروپ %2$s."
@@ -489,12 +376,6 @@ msgstr "ما نفعش يتشال اليوزر %1$s من الجروپ %2$s."
 msgid "%s's groups"
 msgstr "مجموعات %s"
 
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "المجموعات التى %s عضو فيها"
-
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
@@ -507,20 +388,10 @@ msgstr "مجموعات %s"
 msgid "groups on %s"
 msgstr "مجموعات %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "ارفع ملفًا"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "حجم غير صالح."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -543,16 +414,6 @@ msgstr ""
 msgid "Invalid nickname / password!"
 msgstr "نيكنيم / پاسوورد مش مظبوطه!"
 
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "خطأ قاعده البيانات أثناء حذف المستخدم OAuth app"
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "خطأ قاعده البيانات أثناء إدخال المستخدم OAuth app"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -624,24 +485,18 @@ msgstr "اسمح"
 msgid "Allow or deny access to your account information."
 msgstr ""
 
-#: actions/apistatusesdestroy.php:112
-msgid "This method requires a POST or DELETE."
-msgstr ""
-
-#: actions/apistatusesdestroy.php:135
-msgid "You may not delete another user's status."
-msgstr ""
-
 #: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
 #: actions/deletenotice.php:52 actions/shownotice.php:92
 msgid "No such notice."
 msgstr "لا إشعار كهذا."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "مش نافعه تتكرر الملاحظتك بتاعتك."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "الملاحظه اتكررت فعلا."
 
@@ -649,25 +504,15 @@ msgstr "الملاحظه اتكررت فعلا."
 msgid "Status deleted."
 msgstr "حُذِفت الحاله."
 
-#: actions/apistatusesshow.php:145
-msgid "No status with that ID found."
-msgstr ""
-
 #: actions/apistatusesupdate.php:221
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr ""
-
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "لم يوجد."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -676,11 +521,6 @@ msgstr ""
 msgid "Unsupported format."
 msgstr "نسق غير مدعوم."
 
-#: actions/apitimelinefavorites.php:110
-#, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr ""
-
 #: actions/apitimelinefavorites.php:119
 #, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
@@ -721,15 +561,6 @@ msgstr "تكرارات %s"
 msgid "Notices tagged with %s"
 msgstr "الإشعارات الموسومه ب%s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr ""
-
-#: actions/apitrends.php:87
-msgid "API method under construction."
-msgstr ""
-
 #: actions/attachment.php:73
 msgid "No such attachment."
 msgstr "لا مرفق كهذا."
@@ -755,11 +586,6 @@ msgstr "حجم غير صالح."
 msgid "Avatar"
 msgstr "أفتار"
 
-#: actions/avatarsettings.php:78
-#, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
-
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
@@ -782,7 +608,7 @@ msgid "Preview"
 msgstr "عاين"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "احذف"
 
@@ -790,15 +616,6 @@ msgstr "احذف"
 msgid "Upload"
 msgstr "ارفع"
 
-#: actions/avatarsettings.php:231 actions/grouplogo.php:289
-msgid "Crop"
-msgstr ""
-
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "لا ملف شخصى مُحدّد."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
@@ -842,10 +659,9 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Ù\84ا"
+msgstr "Ù\85Ù\84احظة"
 
 #. TRANS: Submit button title for 'No' when blocking a user.
 #. TRANS: Submit button title for 'No' when deleting a user.
@@ -853,19 +669,6 @@ msgstr "لا"
 msgid "Do not block this user"
 msgstr "لا تمنع هذا المستخدم"
 
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "نعم"
-
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
 msgid "Block this user"
@@ -875,6 +678,8 @@ msgstr "امنع هذا المستخدم"
 msgid "Failed to save block information."
 msgstr "فشل حفظ معلومات المنع."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -884,25 +689,16 @@ msgstr "فشل حفظ معلومات المنع."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "لا مجموعه كهذه."
 
-#: actions/blockedfromgroup.php:97
-#, php-format
-msgid "%s blocked profiles"
-msgstr ""
-
 #: actions/blockedfromgroup.php:100
 #, php-format
 msgid "%1$s blocked profiles, page %2$d"
 msgstr "%1$s فايلات معمول ليها بلوك, الصفحه %2$d"
 
-#: actions/blockedfromgroup.php:115
-msgid "A list of the users blocked from joining this group."
-msgstr ""
-
 #: actions/blockedfromgroup.php:288
 msgid "Unblock user from group"
 msgstr "ألغ منع المستخدم من المجموعة"
@@ -915,12 +711,6 @@ msgstr "ألغِ المنع"
 msgid "Unblock this user"
 msgstr "ألغِ منع هذا المستخدم"
 
-#. TRANS: Title for mini-posting window loaded from bookmarklet.
-#: actions/bookmarklet.php:51
-#, fuzzy, php-format
-msgid "Post to %s"
-msgstr "مجموعات %s"
-
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
 msgstr "لا رمز تأكيد."
@@ -939,11 +729,6 @@ msgstr "رمز التأكيد ليس لك!"
 msgid "Unrecognized address type %s."
 msgstr ""
 
-#. TRANS: Client error for an already confirmed email/jabbel/sms address.
-#: actions/confirmaddress.php:96
-msgid "That address has already been confirmed."
-msgstr ""
-
 #. TRANS: Server error thrown on database error updating e-mail preferences.
 #. TRANS: Server error thrown on database error removing a registered e-mail address.
 #. TRANS: Server error thrown on database error updating IM preferences.
@@ -984,14 +769,8 @@ msgid "Notices"
 msgstr "الإشعارات"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
-
-#: actions/deleteapplication.php:71
-#, fuzzy
-msgid "Application not found."
-msgstr "لم يوجد رمز التأكيد."
+msgstr "لازم يكون متسجل دخولك علشان تعدّل application."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
@@ -1005,9 +784,8 @@ msgid "There was a problem with your session token."
 msgstr ""
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "لا تطبيق كهذا."
+msgstr "OAuth applications"
 
 #: actions/deleteapplication.php:149
 msgid ""
@@ -1016,18 +794,6 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "لا تحذف هذا الإشعار"
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "احذف هذا الإشعار"
-
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1063,7 +829,7 @@ msgid "Do not delete this notice"
 msgstr "لا تحذف هذا الإشعار"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "احذف هذا الإشعار"
 
@@ -1106,9 +872,9 @@ msgid "Invalid logo URL."
 msgstr "مسار شعار غير صالح."
 
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "السمه غير متوفرة: %s"
+msgstr "المراسله الفوريه غير متوفره."
 
 #: actions/designadminpanel.php:426
 msgid "Change logo"
@@ -1130,11 +896,6 @@ msgstr "سمه الموقع"
 msgid "Theme for the site."
 msgstr "سمه الموقع."
 
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "سمه الموقع"
-
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
@@ -1148,13 +909,6 @@ msgstr "تغيير صوره الخلفية"
 msgid "Background"
 msgstr "الخلفية"
 
-#: actions/designadminpanel.php:496
-#, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr ""
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1169,10 +923,6 @@ msgstr "عطّل"
 msgid "Turn background image on or off."
 msgstr "مكّن صوره الخلفيه أو عطّلها."
 
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-msgid "Tile background image"
-msgstr ""
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "تغيير الألوان"
@@ -1237,14 +987,13 @@ msgid "Add to favorites"
 msgstr "أضف إلى المفضلات"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Ù\84ا Ù\85ستÙ\86د كهذا."
+msgstr "Ù\84ا Ù\85رÙ\81Ù\82 كهذا."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "تطبيقات OAuth"
+msgstr "OAuth applications"
 
 #: actions/editapplication.php:66
 msgid "You must be logged in to edit an application."
@@ -1275,34 +1024,18 @@ msgstr ""
 msgid "Description is required."
 msgstr "الوصف مطلوب."
 
-#: actions/editapplication.php:194
-msgid "Source URL is too long."
-msgstr ""
-
 #: actions/editapplication.php:200 actions/newapplication.php:185
 msgid "Source URL is not valid."
 msgstr "الSource URL مش مظبوط."
 
-#: actions/editapplication.php:203 actions/newapplication.php:188
-msgid "Organization is required."
-msgstr ""
-
 #: actions/editapplication.php:206 actions/newapplication.php:191
 msgid "Organization is too long (max 255 chars)."
 msgstr "المنظمه طويله جدا (اكتر حاجه 255 رمز)."
 
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
 
-#: actions/editapplication.php:225 actions/newapplication.php:215
-msgid "Callback URL is not valid."
-msgstr ""
-
 #: actions/editapplication.php:258
 msgid "Could not update application."
 msgstr "ما نفعش تحديث الapplication."
@@ -1325,11 +1058,6 @@ msgstr "لازم تكون ادارى علشان تعدّل الجروپ."
 msgid "Use this form to edit the group."
 msgstr "استخدم هذا النموذج لتعديل المجموعه."
 
-#: actions/editgroup.php:205 actions/newgroup.php:145
-#, php-format
-msgid "description is too long (max %d chars)."
-msgstr ""
-
 #: actions/editgroup.php:228 actions/newgroup.php:168
 #, php-format
 msgid "Invalid alias: \"%s\""
@@ -1379,10 +1107,9 @@ msgstr "عنوان البريد الإلكترونى المُؤكد الحالى
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "أزÙ\84"
+msgstr "استرجع"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1390,17 +1117,6 @@ msgid ""
 "a message with further instructions."
 msgstr ""
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "ألغِ"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1411,10 +1127,9 @@ msgstr "عنوان البريد الإلكترونى، مثل \"UserName@example
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "أضف"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1437,16 +1152,14 @@ msgstr "أنشئ عنوان بريد إلكترونى لترسل إليه؛ أل
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "جديد"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "اÙ\84تÙ\81ضÙ\8aÙ\84ات"
+msgstr "عÙ\86اÙ\88Ù\8aÙ\86 Ø§Ù\84برÙ\8aد Ø§Ù\84Ø¥Ù\84Ù\83ترÙ\88Ù\86Ù\8a"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1458,11 +1171,6 @@ msgstr "أرسل لى إشعارات بالاشتراكات الجديده عب
 msgid "Send me email when someone adds my notice as a favorite."
 msgstr "أرسل لى بريدًا إلكرتونيًا عندما يضيف أحدهم إشعارى مفضله."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:193
-msgid "Send me email when someone sends me a private message."
-msgstr ""
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:199
 msgid "Send me email when someone sends me an \"@-reply\"."
@@ -1478,27 +1186,11 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr "أريد أن أرسل الملاحظات عبر البريد الإلكترونى."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-msgid "Publish a MicroID for my email address."
-msgstr ""
-
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "حُفِظت التفضيلات."
-
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
 msgstr "لا عنوان بريد إلكترونى."
 
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-msgid "Cannot normalize that email address"
-msgstr ""
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
@@ -1530,25 +1222,10 @@ msgid ""
 "inbox (and spam box!) for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-msgid "No pending confirmation to cancel."
-msgstr ""
-
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "هذا عنوان محادثه فوريه خاطئ."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "أُلغى التأكيد."
+msgstr "لا رمز تأكيد."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1558,30 +1235,8 @@ msgstr "هذا ليس عنوان بريدك الإلكترونى."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "أزيل هذا العنوان."
-
-#: actions/emailsettings.php:493 actions/smssettings.php:568
-msgid "No incoming email address."
-msgstr ""
-
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-msgid "Couldn't update user record."
-msgstr ""
-
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-msgid "Incoming email address removed."
-msgstr ""
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
+msgstr "لا عنوان بريد إلكترونى."
 
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
@@ -1628,11 +1283,6 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "إشعارات %s المُفضلة"
 
-#: actions/favoritesrss.php:115
-#, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr ""
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1672,14 +1322,6 @@ msgstr "لم أتوقع هذا الرد!"
 msgid "User being listened to does not exist."
 msgstr "المستخدم الذى تستمع إليه غير موجود."
 
-#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
-msgid "You can use the local subscription!"
-msgstr ""
-
-#: actions/finishremotesubscribe.php:99
-msgid "That user has blocked you from subscribing."
-msgstr ""
-
 #: actions/finishremotesubscribe.php:110
 msgid "You are not authorized."
 msgstr "لا تملك تصريحًا."
@@ -1692,11 +1334,6 @@ msgstr ""
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "خطأ أثناء تحديث الملف الشخصى البعيد"
-
 #: actions/getfile.php:79
 msgid "No such file."
 msgstr "لا ملف كهذا."
@@ -1705,25 +1342,10 @@ msgstr "لا ملف كهذا."
 msgid "Cannot read file."
 msgstr "تعذّرت قراءه الملف."
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "حجم غير صالح."
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
-#: actions/grantrole.php:75
-#, fuzzy
-msgid "You cannot grant user roles on this site."
-msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "المستخدم مسكت من قبل."
-
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
 #: lib/profileformaction.php:79
@@ -1745,10 +1367,6 @@ msgstr "لا مجموعه مُحدّده."
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-msgid "User is already blocked from group."
-msgstr ""
-
 #: actions/groupblock.php:100
 msgid "User is not a member of group."
 msgstr "المستخدم ليس عضوًا فى المجموعه."
@@ -1802,20 +1420,10 @@ msgstr ""
 msgid "Couldn't update your design."
 msgstr "تعذّر تحديث تصميمك."
 
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-msgid "Design preferences saved."
-msgstr ""
-
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
 msgstr "شعار المجموعة"
 
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
-
 #: actions/grouplogo.php:365
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
@@ -1850,14 +1458,6 @@ msgstr "إداري"
 msgid "Block"
 msgstr "امنع"
 
-#: actions/groupmembers.php:487
-msgid "Make user an admin of the group"
-msgstr ""
-
-#: actions/groupmembers.php:519
-msgid "Make Admin"
-msgstr ""
-
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
 msgstr "اجعل هذا المستخدم إداريًا"
@@ -1969,10 +1569,6 @@ msgstr "المراسله الفوريه غير متوفره."
 msgid "IM address"
 msgstr "عنوان الرساله الفوريه"
 
-#: actions/imsettings.php:113
-msgid "Current confirmed Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Form note in IM settings form.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:124
@@ -1993,14 +1589,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "التفضيلات"
-
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:160
-msgid "Send me notices through Jabber/GTalk."
-msgstr ""
+msgstr "حُفِظت التفضيلات."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:166
@@ -2027,26 +1617,11 @@ msgstr "حُفِظت التفضيلات."
 msgid "No Jabber ID."
 msgstr "لا هويه جابر."
 
-#. TRANS: Message given saving IM address that cannot be normalised.
-#: actions/imsettings.php:317
-msgid "Cannot normalize that Jabber ID"
-msgstr ""
-
 #. TRANS: Message given saving IM address that not valid.
 #: actions/imsettings.php:322
 msgid "Not a valid Jabber ID"
 msgstr "ليست هويه جابر صالحة"
 
-#. TRANS: Message given saving IM address that is already set.
-#: actions/imsettings.php:326
-msgid "That is already your Jabber ID."
-msgstr ""
-
-#. TRANS: Message given saving IM address that is already set for another user.
-#: actions/imsettings.php:330
-msgid "Jabber ID already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid IM address that is to be confirmed.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:358
@@ -2061,17 +1636,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "هذا عنوان محادثه فوريه خاطئ."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "تعذّر حذف تأكيد البريد الإلكترونى."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "أُلغى التأكيد."
+msgstr "لا رمز تأكيد."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2079,17 +1647,6 @@ msgstr "أُلغى التأكيد."
 msgid "That is not your Jabber ID."
 msgstr "هذه ليست هويتك فى جابر."
 
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-#, fuzzy
-msgid "The IM address was removed."
-msgstr "أزيل هذا العنوان."
-
-#: actions/inbox.php:59
-#, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr ""
-
 #: actions/inbox.php:62
 #, php-format
 msgid "Inbox for %s"
@@ -2099,15 +1656,6 @@ msgstr ""
 msgid "This is your inbox, which lists your incoming private messages."
 msgstr ""
 
-#: actions/invite.php:39
-msgid "Invites have been disabled."
-msgstr ""
-
-#: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "يجب أن تلج لتُعدّل المجموعات."
-
 #: actions/invite.php:72
 #, php-format
 msgid "Invalid email address: %s"
@@ -2121,13 +1669,9 @@ msgstr "أُرسلت الدعوة"
 msgid "Invite new users"
 msgstr "دعوه مستخدمين جدد"
 
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2170,10 +1714,9 @@ msgstr ""
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "أرسل"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2213,33 +1756,17 @@ msgid ""
 "Sincerely, %2$s\n"
 msgstr ""
 
-#: actions/joingroup.php:60
-msgid "You must be logged in to join a group."
-msgstr ""
-
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "لا اسم مستعار."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s دخل جروپ %2$s"
 
-#: actions/leavegroup.php:60
-msgid "You must be logged in to leave a group."
-msgstr ""
-
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "لست عضوا فى تلك المجموعه."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s ساب جروپ %2$s"
@@ -2282,11 +1809,6 @@ msgid ""
 "changing your settings."
 msgstr ""
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "اسم المستخدم أو كلمه السر غير صحيحان."
-
 #: actions/login.php:295
 #, php-format
 msgid ""
@@ -2297,11 +1819,6 @@ msgstr ""
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr ""
-
 #: actions/makeadmin.php:133
 #, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
@@ -2313,14 +1830,12 @@ msgid "Can't make %1$s an admin for group %2$s."
 msgstr "%1$s مش نافع يبقى ادارى لجروپ %2$s."
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "لا حاله حالية"
+msgstr "لا نتائج."
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
-msgstr "Ù\84ا ØªØ·Ø¨Ù\8aÙ\82 Ù\83Ù\87ذا."
+msgstr "Ù\85ا Ù\81Ù\8aØ´ application Ø²Ù\89 Ù\83دÙ\87."
 
 #: actions/newapplication.php:64
 msgid "You must be logged in to register an application."
@@ -2330,10 +1845,6 @@ msgstr "لازم تكون مسجل دخوللك علشان تسجل application.
 msgid "Use this form to register a new application."
 msgstr "استعمل الفورمه دى علشان تسجل application جديد."
 
-#: actions/newapplication.php:176
-msgid "Source URL is required."
-msgstr ""
-
 #: actions/newapplication.php:258 actions/newapplication.php:267
 msgid "Could not create application."
 msgstr "مش ممكن إنشاء الapplication."
@@ -2350,12 +1861,10 @@ msgstr "استخدم هذا النموذج لإنشاء مجموعه جديده.
 msgid "New message"
 msgstr "رساله جديدة"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-msgid "You can't send a message to this user."
-msgstr ""
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "لا محتوى!"
 
@@ -2363,7 +1872,8 @@ msgstr "لا محتوى!"
 msgid "No recipient specified."
 msgstr "لا مستلم حُدّد."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2372,12 +1882,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "أُرسلت الرسالة"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "رساله مباشره اتبعتت لـ%s."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "خطأ أجاكس"
 
@@ -2385,7 +1897,7 @@ msgstr "خطأ أجاكس"
 msgid "New notice"
 msgstr "إشعار جديد"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "أُرسل الإشعار"
 
@@ -2454,15 +1966,6 @@ msgstr "OAuth applications"
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
@@ -2484,21 +1987,11 @@ msgstr ""
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
-#: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
-msgid "Notice has no profile."
-msgstr "ليس للمستخدم ملف شخصى."
-
-#: actions/oembed.php:87 actions/shownotice.php:175
-#, php-format
-msgid "%1$s's status on %2$s"
-msgstr ""
-
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "نوع المحتوى "
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2507,8 +2000,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr " مش نظام بيانات مدعوم."
 
@@ -2548,10 +2041,6 @@ msgstr "اعرض تصاميم الملف الشخصي"
 msgid "Show or hide profile designs."
 msgstr "أظهر أو أخفِ تصاميم الملفات الشخصيه."
 
-#: actions/othersettings.php:153
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr ""
-
 #: actions/otp.php:69
 msgid "No user ID specified."
 msgstr "ما فيش ID متحدد لليوزر."
@@ -2572,16 +2061,6 @@ msgstr "امارة تسجيل الدخول اللى اتحطت مش موجوده
 msgid "Login token expired."
 msgstr "تاريخ صلاحية الاماره خلص."
 
-#: actions/outbox.php:58
-#, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr ""
-
-#: actions/outbox.php:61
-#, php-format
-msgid "Outbox for %s"
-msgstr ""
-
 #: actions/outbox.php:116
 msgid "This is your outbox, which lists private messages you have sent."
 msgstr ""
@@ -2606,10 +2085,6 @@ msgstr "كلمه السر القديمة"
 msgid "New password"
 msgstr "كلمه سر جديدة"
 
-#: actions/passwordsettings.php:109
-msgid "6 or more characters"
-msgstr ""
-
 #: actions/passwordsettings.php:112 actions/recoverpassword.php:239
 #: actions/register.php:440
 msgid "Confirm"
@@ -2657,28 +2132,19 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "لا يمكن قراءه دليل السمات: %s"
+msgstr "دليل السمات"
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "لا يمكن الكتابه فى دليل الأفتارات: %s"
+msgstr "دليل الأفتار."
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "لا يمكن الكتابه فى دليل الخلفيات: %s"
-
-#: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
-msgid "Locales directory not readable: %s."
-msgstr "لا يمكن قراءه دليل المحليات: %s"
-
-#: actions/pathsadminpanel.php:183
-msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "دليل الخلفيات"
 
 #: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
 msgid "Site"
@@ -2812,9 +2278,9 @@ msgid "People search"
 msgstr "بحث فى الأشخاص"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "ليس وسم أشخاص صالح: %s"
+msgstr "ليس عنوان بريد صالح."
 
 #: actions/peopletag.php:142
 #, php-format
@@ -2822,9 +2288,8 @@ msgid "Users self-tagged with %1$s - page %2$d"
 msgstr ""
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "محتوى إشعار غير صالح"
+msgstr "حجم غير صالح."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -2864,11 +2329,6 @@ msgstr "الصفحه الرئيسية"
 msgid "URL of your homepage, blog, or profile on another site"
 msgstr ""
 
-#: actions/profilesettings.php:122 actions/register.php:468
-#, php-format
-msgid "Describe yourself and your interests in %d chars"
-msgstr ""
-
 #: actions/profilesettings.php:125 actions/register.php:471
 msgid "Describe yourself and your interests"
 msgstr "صِف نفسك واهتماماتك"
@@ -2919,33 +2379,15 @@ msgstr "المنطقه الزمنية"
 msgid "What timezone are you normally in?"
 msgstr "ما المنطقه الزمنيه التى تتواجد فيها عادة؟"
 
-#: actions/profilesettings.php:167
-msgid ""
-"Automatically subscribe to whoever subscribes to me (best for non-humans)"
-msgstr ""
-
-#: actions/profilesettings.php:228 actions/register.php:230
-#, php-format
-msgid "Bio is too long (max %d chars)."
-msgstr ""
-
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr "لم تُختر المنطقه الزمنيه."
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
 msgid "Invalid tag: \"%s\""
 msgstr "وسم غير صالح: \"%s\""
 
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
 #: actions/profilesettings.php:363
 msgid "Couldn't save location prefs."
 msgstr "لم يمكن حفظ تفضيلات الموقع."
@@ -2964,12 +2406,8 @@ msgid "Settings saved."
 msgstr "حُفظت الإعدادات."
 
 #: actions/public.php:83
-#, fuzzy, php-format
+#, php-format
 msgid "Beyond the page limit (%s)."
-msgstr "وراء حد الصفحه (%s)"
-
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
 msgstr ""
 
 #: actions/public.php:130
@@ -3086,10 +2524,6 @@ msgstr "خطأ فى رمز التأكيد."
 msgid "This confirmation code is too old. Please start again."
 msgstr "رمز التأكيد هذا قديم جدًا. من فضلك ابدأ من جديد."
 
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
@@ -3132,10 +2566,6 @@ msgstr "طُلبت استعاده كلمه السر"
 msgid "Unknown action"
 msgstr "إجراء غير معروف"
 
-#: actions/recoverpassword.php:236
-msgid "6 or more characters, and don't forget it!"
-msgstr ""
-
 #: actions/recoverpassword.php:243
 msgid "Reset"
 msgstr "أعد الضبط"
@@ -3144,14 +2574,6 @@ msgstr "أعد الضبط"
 msgid "Enter a nickname or email address."
 msgstr "أدخل اسمًا مستعارًا أو عنوان بريد إلكترونى."
 
-#: actions/recoverpassword.php:282
-msgid "No user with that email address or username."
-msgstr ""
-
-#: actions/recoverpassword.php:299
-msgid "No registered email address for that user."
-msgstr ""
-
 #: actions/recoverpassword.php:313
 msgid "Error saving address confirmation."
 msgstr "خطأ أثناء حفظ تأكيد العنوان."
@@ -3162,18 +2584,10 @@ msgid ""
 "address registered to your account."
 msgstr ""
 
-#: actions/recoverpassword.php:357
-msgid "Unexpected password reset."
-msgstr ""
-
 #: actions/recoverpassword.php:365
 msgid "Password must be 6 chars or more."
 msgstr "يجب أن تكون كلمه السر 6 محارف أو أكثر."
 
-#: actions/recoverpassword.php:369
-msgid "Password and confirmation do not match."
-msgstr ""
-
 #: actions/recoverpassword.php:388 actions/register.php:255
 msgid "Error setting user."
 msgstr "خطأ أثناء ضبط المستخدم."
@@ -3202,10 +2616,6 @@ msgstr "سجّل"
 msgid "Registration not allowed."
 msgstr "لا يُسمح بالتسجيل."
 
-#: actions/register.php:205
-msgid "You can't register if you don't agree to the license."
-msgstr ""
-
 #: actions/register.php:219
 msgid "Email address already exists."
 msgstr "عنوان البريد الإلكترونى موجود مسبقًا."
@@ -3369,7 +2779,7 @@ msgstr "ما ينفعش تكرر الملاحظه بتاعتك."
 msgid "You already repeated that notice."
 msgstr "انت عيدت الملاحظه دى فعلا."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "مكرر"
 
@@ -3383,11 +2793,6 @@ msgstr "مكرر!"
 msgid "Replies to %s"
 msgstr "الردود على %s"
 
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "الردود على %s"
-
 #: actions/replies.php:145
 #, php-format
 msgid "Replies feed for %s (RSS 1.0)"
@@ -3398,11 +2803,6 @@ msgstr ""
 msgid "Replies feed for %s (RSS 2.0)"
 msgstr ""
 
-#: actions/replies.php:159
-#, php-format
-msgid "Replies feed for %s (Atom)"
-msgstr ""
-
 #: actions/replies.php:199
 #, php-format
 msgid ""
@@ -3424,33 +2824,10 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr ""
-
-#: actions/revokerole.php:75
-#, fuzzy
-msgid "You cannot revoke user roles on this site."
-msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "يوزر من-غير پروفايل زيّه."
-
 #: actions/rsd.php:146 actions/version.php:159
 msgid "StatusNet"
 msgstr "StatusNet"
 
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-msgid "You cannot sandbox users on this site."
-msgstr ""
-
-#: actions/sandbox.php:72
-msgid "User is already sandboxed."
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
@@ -3458,12 +2835,7 @@ msgid "Sessions"
 msgstr "الجلسات"
 
 #: actions/sessionsadminpanel.php:65
-#, fuzzy
 msgid "Session settings for this StatusNet site."
-msgstr "الإعدادات الأساسيه لموقع StatusNet هذا."
-
-#: actions/sessionsadminpanel.php:175
-msgid "Handle sessions"
 msgstr ""
 
 #: actions/sessionsadminpanel.php:177
@@ -3487,10 +2859,6 @@ msgstr "اذف إعدادت الموقع"
 msgid "You must be logged in to view an application."
 msgstr "لازم تكون مسجل دخولك علشان تشوف اى application."
 
-#: actions/showapplication.php:157
-msgid "Application profile"
-msgstr ""
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
@@ -3523,18 +2891,10 @@ msgstr "إحصاءات"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3561,20 +2921,6 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "أمتأكد من أنك تريد حذف هذا الإشعار؟"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "إشعارات %s المُفضلة"
-
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
-msgstr ""
-
 #: actions/showfavorites.php:171
 #, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
@@ -3597,23 +2943,19 @@ msgid ""
 msgstr ""
 
 #: actions/showfavorites.php:208
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
 msgstr ""
-"%s لم يضف أى إشعارات إلى مفضلته إلى الآن. أرسل شيئًا شيقًا ليضيفه إلى "
-"مفضلته. :)"
 
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s لم يضف أى إشعارات إلى مفضلته إلى الآن. لمّ لا [تسجل حسابًا](%%%%action."
-"register%%%%) وترسل شيئًا شيقًا ليضيفه إلى مفضلته. :)"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3625,9 +2967,9 @@ msgid "%s group"
 msgstr "مجموعه %s"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "%1$s Ø£Ø¹Ø¶Ø§Ø¡ Ø§Ù\84Ù\85جÙ\85Ù\88عة, Ø§Ù\84صفحه %2$d"
+msgstr "%1$s Ø§Ø¹Ø¶Ø§Ø¡ Ø§Ù\84جرÙ\88Ù¾, صفحه %2$d"
 
 #: actions/showgroup.php:227
 msgid "Group profile"
@@ -3647,10 +2989,6 @@ msgstr "ملاحظة"
 msgid "Aliases"
 msgstr "الكنى"
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
 #, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
@@ -3666,11 +3004,6 @@ msgstr ""
 msgid "Notice feed for %s group (Atom)"
 msgstr ""
 
-#: actions/showgroup.php:355
-#, php-format
-msgid "FOAF for %s group"
-msgstr ""
-
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
 msgstr "الأعضاء"
@@ -3689,25 +3022,6 @@ msgstr "جميع الأعضاء"
 msgid "Created"
 msgstr "أنشئ"
 
-#: actions/showgroup.php:455
-#, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. [Join now](%%%%action.register%%%%) to become part "
-"of this group and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-
-#: actions/showgroup.php:461
-#, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. "
-msgstr ""
-
 #: actions/showgroup.php:489
 msgid "Admins"
 msgstr "الإداريون"
@@ -3720,29 +3034,14 @@ msgstr "لا رساله كهذه."
 msgid "Only the sender and recipient may read this message."
 msgstr "يحق للمُرسل والمستلم فقط قراءه هذه الرساله."
 
-#: actions/showmessage.php:108
-#, php-format
-msgid "Message to %1$s on %2$s"
-msgstr ""
-
-#: actions/showmessage.php:113
-#, php-format
-msgid "Message from %1$s on %2$s"
-msgstr ""
-
 #: actions/shownotice.php:90
 msgid "Notice deleted."
 msgstr "حُذف الإشعار."
 
-#: actions/showstream.php:73
-#, php-format
-msgid " tagged %s"
-msgstr ""
-
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%1$s والأصدقاء, الصفحه %2$d"
+msgstr "%1$s و الصحاب, صفحه %2$d"
 
 #: actions/showstream.php:122
 #, php-format
@@ -3787,23 +3086,6 @@ msgid ""
 "%?status_textarea=%2$s)."
 msgstr ""
 
-#: actions/showstream.php:243
-#, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
-"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-
-#: actions/showstream.php:248
-#, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. "
-msgstr ""
-
 #: actions/showstream.php:305
 #, php-format
 msgid "Repeat of %s"
@@ -3818,9 +3100,8 @@ msgid "User is already silenced."
 msgstr "المستخدم مسكت من قبل."
 
 #: actions/siteadminpanel.php:69
-#, fuzzy
 msgid "Basic settings for this StatusNet site"
-msgstr "الإعدادات الأساسيه لموقع StatusNet هذا."
+msgstr ""
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
@@ -3836,9 +3117,8 @@ msgid "Unknown language \"%s\"."
 msgstr "لغه مش معروفه \"%s\"."
 
 #: actions/siteadminpanel.php:165
-#, fuzzy
 msgid "Minimum text limit is 0 (unlimited)."
-msgstr "حد النص الأدنى هو 140 حرفًا."
+msgstr ""
 
 #: actions/siteadminpanel.php:171
 msgid "Dupe limit must be one or more seconds."
@@ -3889,9 +3169,8 @@ msgid "Default timezone for the site; usually UTC."
 msgstr "المنطقه الزمنيه المبدئيه للموقع؛ ت‌ع‌م عاده."
 
 #: actions/siteadminpanel.php:262
-#, fuzzy
 msgid "Default language"
-msgstr "لغه الموقع المبدئية"
+msgstr "اللغه المفضلة"
 
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
@@ -3909,47 +3188,18 @@ msgstr "حد النص"
 msgid "Maximum number of characters for notices."
 msgstr "أقصى عدد للحروف فى الإشعارات."
 
-#: actions/siteadminpanel.php:278
-msgid "Dupe limit"
-msgstr ""
-
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "إشعار الموقع"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "رساله جديدة"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "مشكله أثناء حفظ الإشعار."
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "إشعار الموقع"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "إشعار الموقع"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
 msgid "SMS settings"
@@ -3967,22 +3217,6 @@ msgstr "لا يمكنك استلام رسائل قصيره عبر البريد 
 msgid "SMS is not available."
 msgstr "الرسائل القصيره غير متوفره."
 
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "عنوان الرساله الفوريه"
-
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-msgid "Current confirmed SMS-enabled phone number."
-msgstr ""
-
-#. TRANS: Form guide in IM settings form.
-#: actions/smssettings.php:133
-msgid "Awaiting confirmation on this phone number."
-msgstr ""
-
 #. TRANS: Field label for SMS address input in SMS settings form.
 #: actions/smssettings.php:142
 msgid "Confirmation code"
@@ -3993,13 +3227,6 @@ msgstr "رمز التأكيد"
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "أكّد"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
@@ -4012,9 +3239,8 @@ msgstr ""
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "اÙ\84تÙ\81ضÙ\8aÙ\84ات"
+msgstr "Ø­Ù\8fÙ\81Ù\90ظت Ø§Ù\84تÙ\81ضÙ\8aÙ\84ات."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4023,32 +3249,11 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "حُفِظت التفضيلات."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
 msgstr "لا رقم هاتف."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-msgid "That is already your phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-msgid "That phone number already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
 msgid ""
@@ -4056,16 +3261,10 @@ msgid ""
 "for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-msgid "That is the wrong confirmation number."
-msgstr ""
-
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "أُلغى التأكيد."
+msgstr "لا رمز تأكيد."
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4073,22 +3272,11 @@ msgstr "أُلغى التأكيد."
 msgid "That is not your phone number."
 msgstr "هذا ليس رقم هاتفك."
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "نمرة تليفون الـSMS"
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
 msgstr ""
 
-#. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
-#: actions/smssettings.php:516
-msgid "Select a carrier"
-msgstr ""
-
 #. TRANS: Form instructions for mobile carrier dropdown menu in SMS settings.
 #. TRANS: %s is an administrative contact's e-mail address.
 #: actions/smssettings.php:525
@@ -4098,11 +3286,6 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-msgid "No code entered"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
@@ -4110,22 +3293,13 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "غيّر ضبط الموقع"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "ضبط التصميم"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-msgid "Invalid snapshot report URL."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4158,15 +3332,6 @@ msgstr "بلّغ عن المسار"
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "اذف إعدادت الموقع"
-
-#: actions/subedit.php:70
-msgid "You are not subscribed to that profile."
-msgstr ""
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
 msgid "Could not save subscription."
@@ -4176,11 +3341,6 @@ msgstr "تعذّر حفظ الاشتراك."
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "لا ملف كهذا."
-
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
@@ -4203,11 +3363,6 @@ msgstr "%1$s مشتركين, صفحه %2$d"
 msgid "These are the people who listen to your notices."
 msgstr "هؤلاء هم الأشخاص الذين يستمعون إلى إشعاراتك."
 
-#: actions/subscribers.php:67
-#, php-format
-msgid "These are the people who listen to %s's notices."
-msgstr ""
-
 #: actions/subscribers.php:108
 msgid ""
 "You have no subscribers. Try subscribing to people you know and they might "
@@ -4255,11 +3410,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, php-format
-msgid "%s is not listening to anyone."
-msgstr ""
-
 #: actions/subscriptions.php:208
 msgid "Jabber"
 msgstr "جابر"
@@ -4268,11 +3418,6 @@ msgstr "جابر"
 msgid "SMS"
 msgstr "رسائل قصيرة"
 
-#: actions/tag.php:69
-#, fuzzy, php-format
-msgid "Notices tagged with %1$s, page %2$d"
-msgstr "الإشعارات الموسومه ب%s"
-
 #: actions/tag.php:87
 #, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
@@ -4292,11 +3437,6 @@ msgstr ""
 msgid "No ID argument."
 msgstr "لا مدخل هويه."
 
-#: actions/tagother.php:65
-#, php-format
-msgid "Tag %s"
-msgstr ""
-
 #: actions/tagother.php:77 lib/userprofile.php:76
 msgid "User profile"
 msgstr "ملف المستخدم الشخصي"
@@ -4325,10 +3465,6 @@ msgstr ""
 msgid "Could not save tags."
 msgstr "تعذّر حفظ الوسوم."
 
-#: actions/tagother.php:236
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr ""
-
 #: actions/tagrss.php:35
 msgid "No such tag."
 msgstr "لا وسم كهذا."
@@ -4345,28 +3481,12 @@ msgstr "اليوزر مش فى السبوره."
 msgid "User is not silenced."
 msgstr "المستخدم ليس مُسكتًا."
 
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "ما فيش طلب تسجيل دخول مطلوب."
-
-#: actions/unsubscribe.php:98
-msgid "Unsubscribed"
-msgstr ""
-
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "المستخدم"
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr ""
@@ -4430,10 +3550,6 @@ msgstr "الدعوات مُفعلة"
 msgid "Whether to allow users to invite new users."
 msgstr ""
 
-#: actions/userauthorization.php:105
-msgid "Authorize subscription"
-msgstr ""
-
 #: actions/userauthorization.php:110
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
@@ -4466,10 +3582,6 @@ msgstr "ارفض هذا الاشتراك"
 msgid "No authorization request!"
 msgstr "لا طلب استيثاق!"
 
-#: actions/userauthorization.php:254
-msgid "Subscription authorized"
-msgstr ""
-
 #: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4508,11 +3620,6 @@ msgstr ""
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:345
-#, php-format
-msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
-
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
@@ -4539,35 +3646,19 @@ msgstr "استمتع بالنقانق!"
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "%1$s Ø£Ø¹Ø¶Ø§Ø¡ Ø§Ù\84Ù\85جÙ\85Ù\88عة, Ø§Ù\84صفحه %2$d"
+msgstr "%1$s Ø§Ø¹Ø¶Ø§Ø¡ Ø§Ù\84جرÙ\88Ù¾, صفحه %2$d"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, php-format
-msgid "%s is not a member of any group."
-msgstr ""
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
 msgstr ""
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom group notice feed.
-#. TRANS: %1$s is a group name, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom user notice feed.
-#. TRANS: %1$s is a user name, %2$s is a site name.
-#: actions/userrss.php:97 lib/atomgroupnoticefeed.php:70
-#: lib/atomusernoticefeed.php:76
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
 #: actions/version.php:75
 #, php-format
 msgid "StatusNet %s"
@@ -4580,10 +3671,6 @@ msgid ""
 "Inc. and contributors."
 msgstr ""
 
-#: actions/version.php:163
-msgid "Contributors"
-msgstr ""
-
 #: actions/version.php:170
 msgid ""
 "StatusNet is free software: you can redistribute it and/or modify it under "
@@ -4654,12 +3741,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "حجم غير صالح."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4675,12 +3756,6 @@ msgstr "مش جزء من الجروپ."
 msgid "Group leave failed."
 msgstr "الخروج من الجروپ فشل."
 
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "تعذر تحديث المجموعه."
-
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
@@ -4703,11 +3778,6 @@ msgstr "أنت ممنوع من إرسال رسائل مباشره."
 msgid "Could not insert message."
 msgstr "تعذّر إدراج الرساله."
 
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4716,59 +3786,48 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "خطأ Ù\82اعدÙ\87 Ø§Ù\84بÙ\8aاÙ\86ات Ø£Ø«Ù\86اء Ø¥Ø¯Ø®Ø§Ù\84 Ø§Ù\84Ù\85ستخدÙ\85 OAuth app"
+msgstr "خطأ Ù\81Ù\89 Ø¥Ø¯Ø±Ø§Ø¬ Ø§Ù\84Ø£Ù\81تار"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "مشكله فى حفظ الإشعار. طويل جدًا."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "مشكله فى حفظ الإشعار. مستخدم غير معروف."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-msgid "You are banned from posting notices on this site."
-msgstr ""
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "مشكله أثناء حفظ الإشعار."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "مشكله أثناء حفظ الإشعار."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "آر تى @%1$s %2$s"
@@ -4787,17 +3846,10 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "ليس للمستخدم ملف شخصى."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "مشكله أثناء حفظ الإشعار."
+msgstr "تعذّر حفظ الوسوم."
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
@@ -4821,21 +3873,18 @@ msgstr "غير مشترك!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "ما نفعش يمسح الاشتراك الشخصى."
+msgstr "تعذّر حفظ الاشتراك."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "تعذّر حذف الاشتراك."
+msgstr "تعذّر حفظ الاشتراك."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "تعذّر حذف الاشتراك."
+msgstr "تعذّر حفظ الاشتراك."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -4851,21 +3900,14 @@ msgstr "تعذّر إنشاء المجموعه."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "تعذÙ\91ر Ø¶Ø¨Ø· Ø¹Ø¶Ù\88Ù\8aÙ\87 المجموعه."
+msgstr "تعذÙ\91ر Ø¥Ù\86شاء المجموعه."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
 msgid "Could not set group membership."
 msgstr "تعذّر ضبط عضويه المجموعه."
 
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "تعذّر حفظ الاشتراك."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
@@ -4912,38 +3954,11 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr "صفحه غير مُعنونة"
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-msgid "Primary site navigation"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr "الملف الشخصى ومسار الأصدقاء الزمني"
-
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "شخصية"
-
-#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change your email, avatar, password, profile"
-msgstr "غير كلمه سرّك"
-
-#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:452
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Connect to services"
-msgstr "كونيكشونات (Connections)"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
@@ -4952,17 +3967,9 @@ msgstr "اتصل"
 
 #. TRANS: Tooltip for menu option "Admin"
 #: lib/action.php:458
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change site configuration"
-msgstr "غيّر ضبط الموقع"
-
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "إداري"
+msgstr "ضبط الموقع الأساسي"
 
 #. TRANS: Tooltip for main menu option "Invite"
 #: lib/action.php:465
@@ -4971,79 +3978,35 @@ msgctxt "TOOLTIP"
 msgid "Invite friends and colleagues to join you on %s"
 msgstr ""
 
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "ادعُ"
-
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
-msgstr "اخرج Ù\85Ù\86 Ø§Ù\84Ù\85Ù\88Ù\82ع"
+msgstr "سÙ\85Ù\87 Ø§Ù\84Ù\85Ù\88Ù\82ع."
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "اخرج"
+msgstr "الشعار"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "أنشئ حسابًا"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "سجّل"
-
-#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:488
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Login to the site"
-msgstr "لُج إلى الموقع"
-
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "لُج"
+msgstr "أنشئ مجموعه جديدة"
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "ساعدني!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "مساعدة"
 
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr "ابحث عن أشخاص أو نص"
-
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "ابحث"
+msgstr ""
 
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
@@ -5061,11 +4024,6 @@ msgstr "المشاهدات المحلية"
 msgid "Page notice"
 msgstr "إشعار الصفحة"
 
-#. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
-#: lib/action.php:762
-msgid "Secondary site navigation"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
 msgid "Help"
@@ -5101,24 +4059,13 @@ msgstr "المصدر"
 msgid "Contact"
 msgstr "اتصل"
 
-#: lib/action.php:794
-msgid "Badge"
-msgstr ""
-
-#. TRANS: DT element for StatusNet software license.
-#: lib/action.php:823
-msgid "StatusNet software license"
-msgstr ""
-
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** خدمه تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
-"broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5168,11 +4115,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5202,11 +4144,6 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-msgid "You cannot make changes to this site."
-msgstr ""
-
 #. TRANS: Client error message throw when a certain panel's settings cannot be changed.
 #: lib/adminpanelaction.php:110
 msgid "Changes to that panel are not allowed."
@@ -5217,11 +4154,6 @@ msgstr "التغييرات مش مسموحه للـ لوحه دى."
 msgid "showForm() not implemented."
 msgstr ""
 
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-msgid "saveSettings() not implemented."
-msgstr ""
-
 #. TRANS: Client error message thrown if design settings could not be deleted in
 #. TRANS: the admin panel Design.
 #: lib/adminpanelaction.php:284
@@ -5233,106 +4165,36 @@ msgstr "تعذّر حذف إعدادات التصميم."
 msgid "Basic site configuration"
 msgstr "ضبط الموقع الأساسي"
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "الموقع"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:358
 msgid "Design configuration"
 msgstr "ضبط التصميم"
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-#, fuzzy
-msgctxt "MENU"
-msgid "Design"
-msgstr "التصميم"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "ضبط المسارات"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "المستخدم"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "ضبط التصميم"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
 msgid "Paths configuration"
 msgstr "ضبط المسارات"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "ضبط التصميم"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "إشعار الموقع"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "ضبط المسارات"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, php-format
-msgid "Describe your application in %d characters"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
 msgid "Describe your application"
 msgstr "اوصف الapplication بتاعتك"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-msgid "URL of the homepage of this application"
-msgstr ""
-
 #. TRANS: Form input field label.
 #: lib/applicationeditform.php:226
 msgid "Source URL"
 msgstr "Source URL"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
 msgid "URL for the homepage of the organization"
@@ -5396,10 +4258,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "بطÙ\91Ù\84"
+msgstr "استرجع"
 
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
@@ -5416,10 +4277,6 @@ msgstr "المؤلف"
 msgid "Provider"
 msgstr "المزود"
 
-#: lib/attachmentnoticesection.php:67
-msgid "Notices where this attachment appears"
-msgstr ""
-
 #: lib/attachmenttagcloudsection.php:48
 msgid "Tags for this attachment"
 msgstr "وسوم هذا المرفق"
@@ -5444,44 +4301,21 @@ msgstr "اكتمل الأمر"
 msgid "Command failed"
 msgstr "فشل الأمر"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "الملاحظه بالـID ده مالهاش وجود"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "ليس للمستخدم إشعار أخير"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "ما نفعش يلاقى يوزر بإسم %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "ما نفعش يلاقى يوزر بإسم %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Nudge اتبعتت لـ %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5492,55 +4326,34 @@ msgstr ""
 "المشتركون: %2$s\n"
 "الإشعارات: %3$s"
 
-#: lib/command.php:302
-msgid "Notice marked as fave."
-msgstr ""
-
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "انت اصلا عضو فى الجروپ ده"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "ما نفعش يضم %1$s للجروپ %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "ما نفعش يتشال اليوزر %1$s من الجروپ %2$s."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "الاسم الكامل: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "الموقع: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "الصفحه الرئيسية: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "عن: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5549,116 +4362,70 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "رساله مباشره اتبعتت لـ %s"
-
-#: lib/command.php:494
-msgid "Error sending direct message."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "الملاحظه بتاعتك مش نافعه تتكرر"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "كرر بالفعل هذا الإشعار"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "الإشعار من %s مكرر"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "خطأ تكرار الإشعار."
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "رُد على رساله %s"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "خطأ أثناء حفظ الإشعار."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr ""
-
-#: lib/command.php:628
-msgid "Can't subscribe to OMB profiles by command."
-msgstr ""
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "مُشترك ب%s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr ""
-
-#: lib/command.php:682 lib/command.php:705
-msgid "Command not yet implemented."
+msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:685
-msgid "Notification off."
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
-msgstr ""
-
-#: lib/command.php:710
-msgid "Can't turn on notification."
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr ""
-
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "ألغِ الاشتراك"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "لست مُشتركًا بأى أحد."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "لست مشتركًا بأحد."
@@ -5668,11 +4435,16 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
 msgstr[4] ""
 msgstr[5] ""
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "لا أحد مشترك بك."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "لا أحد مشترك بك."
@@ -5682,11 +4454,16 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
 msgstr[4] ""
 msgstr[5] ""
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "لست عضوًا فى أى مجموعه."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "لست عضوًا فى أى مجموعه."
@@ -5696,7 +4473,7 @@ msgstr[3] "أنت عضو فى هذه المجموعات:"
 msgstr[4] ""
 msgstr[5] ""
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5738,10 +4515,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-msgid "No configuration file found. "
-msgstr ""
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5770,10 +4543,6 @@ msgstr ""
 msgid "Connections"
 msgstr "كونيكشونات (Connections)"
 
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr "خطأ قاعده بيانات"
@@ -5856,10 +4625,6 @@ msgstr ""
 msgid "URL of the homepage or blog of the group or topic"
 msgstr ""
 
-#: lib/groupeditform.php:168
-msgid "Describe the group or topic"
-msgstr ""
-
 #: lib/groupeditform.php:170
 #, php-format
 msgid "Describe the group or topic in %d characters"
@@ -5883,11 +4648,6 @@ msgstr "مجموعات"
 msgid "Blocked"
 msgstr "ممنوع"
 
-#: lib/groupnav.php:102
-#, php-format
-msgid "%s blocked users"
-msgstr ""
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -5902,11 +4662,6 @@ msgstr "الشعار"
 msgid "Add or edit %s logo"
 msgstr "أضف أو عدّل شعار %s"
 
-#: lib/groupnav.php:120
-#, php-format
-msgid "Add or edit %s design"
-msgstr ""
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "المجموعات الأكثر أعضاءً"
@@ -5915,29 +4670,16 @@ msgstr "المجموعات الأكثر أعضاءً"
 msgid "Groups with most posts"
 msgstr "المجموعات الأكثر مرسلات"
 
-#: lib/grouptagcloudsection.php:56
-#, php-format
-msgid "Tags in %s group's notices"
-msgstr ""
-
 #. TRANS: Client exception 406
 #: lib/htmloutputter.php:104
 msgid "This page is not available in a media type you accept"
 msgstr ""
 
-#: lib/imagefile.php:72
-msgid "Unsupported image file format."
-msgstr ""
-
 #: lib/imagefile.php:88
 #, php-format
 msgid "That file is too big. The maximum file size is %s."
 msgstr "هذا الملف كبير جدًا. إن أقصى حجم للملفات هو %s."
 
-#: lib/imagefile.php:93
-msgid "Partial upload."
-msgstr ""
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -5946,10 +4688,6 @@ msgstr ""
 msgid "Not an image or corrupt file."
 msgstr ""
 
-#: lib/imagefile.php:122
-msgid "Lost our file."
-msgstr ""
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr "نوع ملف غير معروف"
@@ -5980,10 +4718,6 @@ msgstr "انضم"
 msgid "Leave"
 msgstr "غادر"
 
-#: lib/logingroupnav.php:80
-msgid "Login with a username and password"
-msgstr ""
-
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
 msgstr ""
@@ -6011,12 +4745,6 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#. TRANS: Subject of new-subscriber notification e-mail
-#: lib/mail.php:243
-#, php-format
-msgid "%1$s is now listening to your notices on %2$s."
-msgstr ""
-
 #: lib/mail.php:248
 #, php-format
 msgid ""
@@ -6046,12 +4774,6 @@ msgstr ""
 msgid "Bio: %s"
 msgstr "عن نفسك: %s"
 
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, php-format
-msgid "New email address for posting to %s"
-msgstr ""
-
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
 #, php-format
@@ -6072,11 +4794,6 @@ msgstr ""
 msgid "%s status"
 msgstr "حاله %s"
 
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-msgid "SMS confirmation"
-msgstr ""
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6132,12 +4849,6 @@ msgid ""
 "%5$s\n"
 msgstr ""
 
-#. TRANS: Subject for favorite notification email
-#: lib/mail.php:589
-#, php-format
-msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
-
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
 #, php-format
@@ -6202,17 +4913,13 @@ msgid ""
 "P.S. You can turn off these email notifications here: %8$s\n"
 msgstr ""
 
-#: lib/mailbox.php:89
-msgid "Only the user can read their own mailboxes."
-msgstr ""
-
 #: lib/mailbox.php:139
 msgid ""
 "You have no private messages. You can send private message to engage other "
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "من"
 
@@ -6224,10 +4931,6 @@ msgstr "تعذّر تحليل الرساله."
 msgid "Not a registered user."
 msgstr "ليس مستخدمًا مسجلًا."
 
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
 #: lib/mailhandler.php:50
 msgid "Sorry, no incoming email allowed."
 msgstr ""
@@ -6297,42 +5000,41 @@ msgstr "أرسل إشعارًا مباشرًا"
 msgid "To"
 msgstr "إلى"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "المحارف المتوفرة"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "أرسل"
+msgstr ""
 
 #: lib/noticeform.php:160
 msgid "Send a notice"
 msgstr "أرسل إشعارًا"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "ما الأخبار يا %s؟"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "أرفق"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "أرفق ملفًا"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "اعمل مشاركه لمكانى"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "ما تعملش مشاركه لمكانى"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6367,23 +5069,27 @@ msgstr ""
 msgid "at"
 msgstr "في"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "فى السياق"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "متكرر من"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "رُد على هذا الإشعار"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "رُد"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "الإشعار مكرر"
 
@@ -6395,10 +5101,6 @@ msgstr "نبّه هذا المستخدم"
 msgid "Nudge"
 msgstr "نبّه"
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "خطأ أثناء إدراج الملف الشخصى الجديد"
@@ -6451,11 +5153,6 @@ msgstr "صندوق الصادر"
 msgid "Your sent messages"
 msgstr "رسائلك المُرسلة"
 
-#: lib/personaltagcloudsection.php:56
-#, php-format
-msgid "Tags in %s's notices"
-msgstr ""
-
 #: lib/plugin.php:115
 msgid "Unknown"
 msgstr "مش معروف"
@@ -6533,19 +5230,10 @@ msgstr "نعم"
 msgid "Repeat this notice"
 msgstr "كرر هذا الإشعار"
 
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "امنع هذا المستخدم من هذه المجموعة"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-msgid "Sandbox"
-msgstr ""
-
 #: lib/sandboxform.php:78
 msgid "Sandbox this user"
 msgstr "أضف هذا المستخدم إلى صندوق الرمل"
@@ -6644,13 +5332,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "فشل تحديث الأفتار."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6676,18 +5357,13 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "خطأ أثناء تحديث الملف الشخصى البعيد"
+msgstr "خطأ أثناء منع الحجب."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr "أعلى المرسلين"
 
-#: lib/unsandboxform.php:69
-msgid "Unsandbox"
-msgstr ""
-
 #: lib/unsandboxform.php:80
 msgid "Unsandbox this user"
 msgstr "أزل هذا المستخدم من صندوق الرمل"
@@ -6708,11 +5384,6 @@ msgstr "ألغِ الاشتراك مع هذا المستخدم"
 msgid "Unsubscribe"
 msgstr "ألغِ الاشتراك"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "ليس للمستخدم ملف شخصى."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "عدّل الأفتار"
@@ -6745,73 +5416,38 @@ msgstr "رسالة"
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "ملف المستخدم الشخصي"
-
-#: lib/userprofile.php:366
-#, fuzzy
-msgctxt "role"
-msgid "Administrator"
-msgstr "الإداريون"
-
 #: lib/userprofile.php:367
 msgctxt "role"
 msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "قبل لحظات قليلة"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "قبل دقيقه تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
-#, php-format
-msgid "about %d minutes ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "قبل ساعه تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
-#, php-format
-msgid "about %d hours ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "قبل يوم تقريبا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
-#, php-format
-msgid "about %d days ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "قبل شهر تقريبًا"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
-#, php-format
-msgid "about %d months ago"
-msgstr ""
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "قبل سنه تقريبًا"
 
@@ -6819,13 +5455,3 @@ msgstr "قبل سنه تقريبًا"
 #, php-format
 msgid "%s is not a valid color!"
 msgstr "%s ليس لونًا صحيحًا!"
-
-#: lib/webcolor.php:123
-#, php-format
-msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 3b78847b5b52754cf7acf344d00cce170d07d448..716c19a9ab7bf1262882c3254640311612afa51d 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:08+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:01+0000\n"
 "Language-Team: Bulgarian\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: bg\n"
 "X-Message-Group: out-statusnet\n"
@@ -43,10 +43,9 @@ msgstr ""
 
 #. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
 #: actions/accessadminpanel.php:167
-#, fuzzy
 msgctxt "LABEL"
 msgid "Private"
-msgstr "ЧаÑ\81Ñ\82ен"
+msgstr "Ð\9fовеÑ\80иÑ\82елноÑ\81Ñ\82"
 
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
@@ -90,6 +89,7 @@ msgstr "Запазване"
 msgid "No such page."
 msgstr "Няма такака страница."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -109,7 +109,7 @@ msgstr "Няма такака страница."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Няма такъв потребител"
@@ -265,23 +265,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
-msgid "Unable to save your design settings."
-msgstr "Грешка при записване настройките за Twitter"
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Грешка при обновяване на потребителя."
-
 #: actions/apiblockcreate.php:105
 msgid "You cannot block yourself!"
 msgstr "Не можете да блокирате себе си!"
@@ -342,7 +325,8 @@ msgstr "Не е открита бележка с такъв идентифика
 msgid "This status is already a favorite."
 msgstr "Тази бележка вече е отбелязана като любима."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Грешка при отбелязване като любима."
 
@@ -355,9 +339,8 @@ msgid "Could not delete favorite."
 msgstr "Грешка при изтриване на любима бележка."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Грешка при проследяване — потребителят не е намерен."
+msgstr "Грешка при спиране на проследяването — потребителят не е намерен."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -373,14 +356,12 @@ msgid "You cannot unfollow yourself."
 msgstr "Не можете да спрете да следите себе си."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Трябва да се дадат два идентификатора или имена на потребители."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¸Ð·Ñ\82еглÑ\8fне Ð½Ð° Ð¾Ð±Ñ\89иÑ\8f Ð¿Ð¾Ñ\82ок"
+msgstr "ЦелевиÑ\8fÑ\82 Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел Ð½Ðµ Ð±ÐµÑ\88е Ð¾Ñ\82кÑ\80иÑ\82."
 
 #: actions/apifriendshipsshow.php:142
 msgid "Could not find target user."
@@ -459,27 +440,29 @@ msgstr ""
 msgid "Group not found."
 msgstr "Групата не е открита."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Вече членувате в тази група."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
-
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
+#, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¿Ñ\80оÑ\81ледÑ\8fване â\80\94 Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð½Ðµ Ðµ Ð½Ð°Ð¼ÐµÑ\80ен."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¾Ð±Ð½Ð¾Ð²Ñ\8fване Ð½Ð° Ð³Ñ\80Ñ\83паÑ\82а."
 
 #: actions/apigroupleave.php:115
 msgid "You are not a member of this group."
 msgstr "Не членувате в тази група."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "Грешка при проследяване — потребителят не е намерен."
+msgstr "Грешка при създаване на групата."
 
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
@@ -487,12 +470,6 @@ msgstr "Грешка при проследяване — потребителя
 msgid "%s's groups"
 msgstr "Групи на %s"
 
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Групи, в които участва %s"
-
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
@@ -505,20 +482,10 @@ msgstr "Групи на %s"
 msgid "groups on %s"
 msgstr "групи в %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Качване на файл"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Неправилен размер."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -542,14 +509,8 @@ msgid "Invalid nickname / password!"
 msgstr "Неправилно име или парола!"
 
 #: actions/apioauthauthorize.php:159
-#, fuzzy
 msgid "Database error deleting OAuth application user."
-msgstr "Грешка в настройките на потребителя."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
+msgstr "Да не се изтрива приложението"
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -635,11 +596,13 @@ msgstr "Не може да изтривате бележки на друг по
 msgid "No such notice."
 msgstr "Няма такава бележка."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Не можете да повтаряте собствени бележки."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Вече сте повторили тази бележка."
 
@@ -655,17 +618,17 @@ msgstr "Не е открита бележка с такъв идентифика
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max notice size is %d chars."
-msgstr "ТвÑ\8aÑ\80де Ð´Ñ\8aлга Ð±ÐµÐ»ÐµÐ¶ÐºÐ°. Ð¢Ñ\80Ñ\8fбва Ð´Ð° Ðµ Ð½Ð°Ð¹-много 140 знака."
+msgstr "ТвÑ\8aÑ\80де Ð´Ñ\8aлго. Ð\9cоже Ð´Ð° Ðµ Ð½Ð°Ð¹-много %d знака."
 
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Не е открито."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -675,19 +638,19 @@ msgid "Unsupported format."
 msgstr "Неподдържан формат."
 
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Отбелязани като любими от %s"
+msgstr "Бележка на %1$s от %2$s"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s бележки отбелязани като любими от %s / %s."
+msgstr "%1$s реплики на съобщения от %2$s / %3$s."
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Реплики на %2$s"
+msgstr "Бележка на %1$s от %2$s"
 
 #: actions/apitimelinementions.php:131
 #, php-format
@@ -719,19 +682,13 @@ msgstr "Повторения на %s"
 msgid "Notices tagged with %s"
 msgstr "Бележки с етикет %s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Бележки от %1$s в %2$s."
-
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "Методът в API все още се разработва."
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "Няма такъв документ."
+msgstr "Няма прикачени файлове."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -763,9 +720,8 @@ msgstr ""
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "Потребител без съответстващ профил"
+msgstr "Потребителят няма профил."
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
@@ -783,7 +739,7 @@ msgid "Preview"
 msgstr "Преглед"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Изтриване"
 
@@ -803,10 +759,6 @@ msgstr "Няма качен файл."
 msgid "Pick a square area of the image to be your avatar"
 msgstr "Изберете квадратна област от изображението за аватар"
 
-#: actions/avatarsettings.php:347 actions/grouplogo.php:380
-msgid "Lost our file data."
-msgstr ""
-
 #: actions/avatarsettings.php:370
 msgid "Avatar updated."
 msgstr "Аватарът е обновен."
@@ -873,6 +825,8 @@ msgstr "Блокиране на потребителя"
 msgid "Failed to save block information."
 msgstr "Грешка при записване данните за блокирането."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -882,8 +836,8 @@ msgstr "Грешка при записване данните за блокир
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Няма такава група"
 
@@ -893,14 +847,9 @@ msgid "%s blocked profiles"
 msgstr "Блокирани за %s"
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "Блокирани за %s, страница %d"
-
-#: actions/blockedfromgroup.php:115
-#, fuzzy
-msgid "A list of the users blocked from joining this group."
-msgstr "Списък с потребителите в тази група."
+msgstr "%1$s и приятели, страница %2$d"
 
 #: actions/blockedfromgroup.php:288
 msgid "Unblock user from group"
@@ -916,9 +865,9 @@ msgstr "Разблокиране на този потребител"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "Снимка"
+msgstr "гÑ\80Ñ\83пи Ð² %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -934,9 +883,9 @@ msgstr "Този код за потвърждение не е за вас!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Неразпознат вид адрес %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -1057,7 +1006,7 @@ msgid "Do not delete this notice"
 msgstr "Да не се изтрива бележката"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Изтриване на бележката"
 
@@ -1084,26 +1033,10 @@ msgstr ""
 msgid "Delete this user"
 msgstr "Изтриване на този потребител"
 
-#. TRANS: Message used as title for design settings for the site.
-#. TRANS: Link description in user account settings menu.
-#: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
-#: lib/groupnav.php:119
-msgid "Design"
-msgstr ""
-
-#: actions/designadminpanel.php:74
-msgid "Design settings for this StatusNet site."
-msgstr ""
-
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Неправилен размер."
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Страницата не е достъпна във вида медия, който приемате"
+msgstr ""
 
 #: actions/designadminpanel.php:426
 msgid "Change logo"
@@ -1113,25 +1046,9 @@ msgstr "Смяна на логото"
 msgid "Site logo"
 msgstr "Лого на сайта"
 
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
-msgstr "Промяна"
-
 #: actions/designadminpanel.php:460
-#, fuzzy
 msgid "Site theme"
-msgstr "Нова бележка"
-
-#: actions/designadminpanel.php:461
-#, fuzzy
-msgid "Theme for the site."
-msgstr "Излизане от сайта"
-
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "Нова бележка"
+msgstr "Път до сайта"
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1147,11 +1064,13 @@ msgid "Background"
 msgstr "Фон"
 
 #: actions/designadminpanel.php:496
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can upload a background image for the site. The maximum file size is %1"
 "$s."
-msgstr "Може да качите лого за групата ви."
+msgstr ""
+"Можете да качите лично изображение за фон. Максималната големина на файла е "
+"2MB."
 
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
@@ -1163,14 +1082,6 @@ msgstr "Вкл."
 msgid "Off"
 msgstr "Изкл."
 
-#: actions/designadminpanel.php:545 lib/designsettings.php:156
-msgid "Turn background image on or off."
-msgstr ""
-
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-msgid "Tile background image"
-msgstr ""
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "Смяна на цветовете"
@@ -1188,9 +1099,8 @@ msgid "Text"
 msgstr "Текст"
 
 #: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
 msgid "Links"
-msgstr "СпиÑ\81Ñ\8aк"
+msgstr "Ð\9bиÑ\86енз"
 
 #: actions/designadminpanel.php:651
 msgid "Advanced"
@@ -1223,10 +1133,6 @@ msgstr ""
 msgid "Save"
 msgstr "Запазване"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr "Тази бележка не е отбелязана като любима!"
@@ -1236,9 +1142,9 @@ msgid "Add to favorites"
 msgstr "Добавяне към любимите"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Няма такъв документ."
+msgstr "Няма такава бележка."
 
 #: actions/editapplication.php:54
 msgid "Edit Application"
@@ -1253,25 +1159,10 @@ msgstr "За да редактирате приложение, трябва да
 msgid "No such application."
 msgstr "Няма такова приложение."
 
-#: actions/editapplication.php:161
-#, fuzzy
-msgid "Use this form to edit your application."
-msgstr "Използвайте тази бланка за създаване на нова група."
-
 #: actions/editapplication.php:177 actions/newapplication.php:159
 msgid "Name is required."
 msgstr "Името е задължително."
 
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Пълното име е твърде дълго (макс. 255 знака)"
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Опитайте друг псевдоним, този вече е зает."
-
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
 msgstr "Описанието е задължително."
@@ -1280,23 +1171,10 @@ msgstr "Описанието е задължително."
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Адресът на личната страница не е правилен URL."
-
-#: actions/editapplication.php:203 actions/newapplication.php:188
-msgid "Organization is required."
-msgstr ""
-
 #: actions/editapplication.php:206 actions/newapplication.php:191
 msgid "Organization is too long (max 255 chars)."
 msgstr "Името на организацията е твърде дълго (макс. 255 знака)."
 
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
@@ -1305,11 +1183,6 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Грешка при обновяване на групата."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
@@ -1321,13 +1194,8 @@ msgstr "За да създавате група, трябва да сте вле
 
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
 msgid "You must be an admin to edit the group."
-msgstr "За да редактирате групата, трябва да сте й администратор."
-
-#: actions/editgroup.php:158
-msgid "Use this form to edit the group."
-msgstr ""
+msgstr "За да редактирате група, трябва да сте влезли."
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
 #, php-format
@@ -1343,12 +1211,6 @@ msgstr "Неправилен псевдоним: \"%s\""
 msgid "Could not update group."
 msgstr "Грешка при обновяване на групата."
 
-#. TRANS: Server exception thrown when creating group aliases failed.
-#: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
-msgid "Could not create aliases."
-msgstr "Грешка при отбелязване като любима."
-
 #: actions/editgroup.php:280
 msgid "Options saved."
 msgstr "Настройките са запазени."
@@ -1441,10 +1303,9 @@ msgstr "Задаване на нова е-поща, от която да се п
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Ново"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
@@ -1466,12 +1327,6 @@ msgstr "Изпращане на писмо при отбелязване на м
 msgid "Send me email when someone sends me a private message."
 msgstr "Изпращане на писмо при ново лично съобщение."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:199
-#, fuzzy
-msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Изпращане на писмо при ново лично съобщение."
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
@@ -1544,17 +1399,10 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Няма потвърждения, очакващи да бъдат отказани."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Грешен IM адрес."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Ð\9fоÑ\82вÑ\8aÑ\80ждаванеÑ\82о Ðµ Ð¿Ñ\80екÑ\8aÑ\81наÑ\82о."
+msgstr "Ð\9dÑ\8fма Ð¿Ð¾Ñ\82вÑ\8aÑ\80ждениÑ\8f, Ð¾Ñ\87акваÑ\89и Ð´Ð° Ð±Ñ\8aдаÑ\82 Ð¾Ñ\82казани."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1564,9 +1412,8 @@ msgstr "Това не е вашият адрес на е-поща."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Ð\90дÑ\80еÑ\81Ñ\8aÑ\82 е премахнат."
+msgstr "Ð\92Ñ\85одÑ\8fÑ\89иÑ\8fÑ\82 Ð°Ð´Ñ\80еÑ\81 Ð½Ð° Ðµ-поÑ\89а е премахнат."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1594,9 +1441,8 @@ msgid "This notice is already a favorite!"
 msgstr "Тази бележка вече е отбелязана като любима!"
 
 #: actions/favor.php:92 lib/disfavorform.php:140
-#, fuzzy
 msgid "Disfavor favorite"
-msgstr "Ð\9dелÑ\8eбимо"
+msgstr "Ð\94обавÑ\8fне ÐºÑ\8aм Ð»Ñ\8eбимиÑ\82е"
 
 #: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
@@ -1635,11 +1481,6 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "Любими бележки на %s"
 
-#: actions/favoritesrss.php:115
-#, fuzzy, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr "Бележки от %1$s в %2$s."
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1668,18 +1509,16 @@ msgid "No attachments."
 msgstr "Няма прикачени файлове."
 
 #: actions/file.php:51
-#, fuzzy
 msgid "No uploaded attachments."
-msgstr "Няма такъв документ."
+msgstr "Няма прикачени файлове."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "Неочакван отговор."
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "Потребителят, когото проследявате, не съществува. "
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1690,24 +1529,16 @@ msgid "That user has blocked you from subscribing."
 msgstr "Потребителят е забранил да се абонирате за него."
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Ð\97абÑ\80анено."
+msgstr "Ð\9dе Ñ\81Ñ\82е Ð°Ð±Ð¾Ð½Ð¸Ñ\80ани Ð·Ð° Ð½Ð¸ÐºÐ¾Ð³о."
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Грешка при преобразуване на tokens за одобрение в tokens за достъп."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Непозната версия на протокола OMB."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Грешка при обновяване на отдалечен профил"
+msgstr ""
 
 #: actions/getfile.php:79
 msgid "No such file."
@@ -1717,24 +1548,13 @@ msgstr "Няма такъв файл."
 msgid "Cannot read file."
 msgstr "Грешка при четене на файла."
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Неправилен размер."
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Не може да изпращате съобщения до този потребител."
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "Потребителят вече е заглушен."
+msgstr "Не можете да заглушавате потребители на този сайт."
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1766,9 +1586,8 @@ msgid "User is not a member of group."
 msgstr "Потребителят не членува в групата."
 
 #: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
 msgid "Block user from group"
-msgstr "Ð\91локиÑ\80ане Ð½Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\8f"
+msgstr "РазблокиÑ\80ане Ð½Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\8f Ð¾Ñ\82 Ð³Ñ\80Ñ\83паÑ\82а"
 
 #: actions/groupblock.php:160
 #, php-format
@@ -1780,19 +1599,13 @@ msgstr ""
 
 #. TRANS: Submit button title for 'No' when blocking a user from a group.
 #: actions/groupblock.php:182
-#, fuzzy
 msgid "Do not block this user from this group"
-msgstr "СпиÑ\81Ñ\8aк Ñ\81 Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елиÑ\82е Ð² Ñ\82ази Ð³Ñ\80Ñ\83па."
+msgstr "Ð\94а Ð½Ðµ Ñ\81е Ð±Ð»Ð¾ÐºÐ¸Ñ\80а Ñ\82ози Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
-#, fuzzy
 msgid "Block this user from this group"
-msgstr "Списък с потребителите в тази група."
-
-#: actions/groupblock.php:206
-msgid "Database error blocking user from group."
-msgstr ""
+msgstr "Разблокиране на потребителя от групата"
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
 msgid "No ID."
@@ -1802,42 +1615,26 @@ msgstr "Липсва ID."
 msgid "You must be logged in to edit a group."
 msgstr "За да редактирате група, трябва да сте влезли."
 
-#: actions/groupdesignsettings.php:144
-#, fuzzy
-msgid "Group design"
-msgstr "Групи"
-
 #: actions/groupdesignsettings.php:155
 msgid ""
 "Customize the way your group looks with a background image and a colour "
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Грешка при обновяване на потребителя."
-
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
 msgid "Design preferences saved."
-msgstr "Настройките са запазени."
+msgstr "Настройките на е-поща са запазени."
 
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
 msgstr "Лого на групата"
 
 #: actions/grouplogo.php:153
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can upload a logo image for your group. The maximum file size is %s."
-msgstr "Може да качите лого за групата ви."
-
-#: actions/grouplogo.php:365
-#, fuzzy
-msgid "Pick a square area of the image to be the logo."
-msgstr "Изберете квадратна област от изображението за аватар"
+msgstr ""
+"Можете да качите личен аватар тук. Максималната големина на файла е %s."
 
 #: actions/grouplogo.php:399
 msgid "Logo updated."
@@ -1853,9 +1650,9 @@ msgid "%s group members"
 msgstr "Членове на групата %s"
 
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "Членове Ð½Ð° Ð³Ñ\80Ñ\83паÑ\82а %s, Ñ\81Ñ\82Ñ\80аниÑ\86а %d"
+msgstr "Ð\90бонаÑ\82и Ð½Ð° %1$s, Ñ\81Ñ\82Ñ\80аниÑ\86а %2$d"
 
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
@@ -1869,15 +1666,6 @@ msgstr "Настройки"
 msgid "Block"
 msgstr "Блокиране"
 
-#: actions/groupmembers.php:487
-#, fuzzy
-msgid "Make user an admin of the group"
-msgstr "За да редактирате групата, трябва да сте й администратор."
-
-#: actions/groupmembers.php:519
-msgid "Make Admin"
-msgstr ""
-
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
 msgstr ""
@@ -1891,12 +1679,6 @@ msgstr ""
 msgid "%s timeline"
 msgstr "Поток на %s"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "Бележки от %1$s в %2$s."
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
@@ -1921,15 +1703,6 @@ msgstr ""
 msgid "Create a new group"
 msgstr "Създаване на нова група"
 
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
-msgstr ""
-"Търсене на хора в %%site.name%% по техните име, място или интереси. "
-"Отделяйте фразите за "
-
 #: actions/groupsearch.php:58
 msgid "Group search"
 msgstr "Търсене на групи"
@@ -1953,25 +1726,18 @@ msgid ""
 "action.newgroup%%) yourself!"
 msgstr ""
 
-#: actions/groupunblock.php:91
-msgid "Only an admin can unblock group members."
-msgstr ""
-
 #: actions/groupunblock.php:95
-#, fuzzy
 msgid "User is not blocked from group."
-msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð²Ð¸ Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ал."
+msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð²ÐµÑ\87е Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан Ð·Ð° Ð³Ñ\80Ñ\83паÑ\82а."
 
 #: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
 msgid "Error removing the block."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð·Ð°Ð¿Ð°Ð·Ð²Ð°Ð½Ðµ Ð½Ð° Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¿Ð¾Ð²Ñ\82аÑ\80Ñ\8fне Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐºÐ°Ñ\82а."
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "IM настройки"
+msgstr "Настройки за SMS"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -1987,16 +1753,14 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Страницата не е достъпна във вида медия, който приемате"
+msgstr ""
 
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "IM адрес"
+msgstr "Адрес на е-поща"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2026,9 +1790,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Настройки"
+msgstr "Настройки на е-поща"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2096,17 +1859,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Грешен IM адрес."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Грешка при изтриване потвърждението по е-поща."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Ð\9fоÑ\82вÑ\8aÑ\80ждаванеÑ\82о Ðµ Ð¿Ñ\80екÑ\8aÑ\81наÑ\82о."
+msgstr "Ð\9dÑ\8fма ÐºÐ¾Ð´ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\8aÑ\80ждение."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2116,14 +1872,13 @@ msgstr "Това не е вашият Jabber ID."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "Ð\90дÑ\80еÑ\81Ñ\8aÑ\82 е премахнат."
+msgstr "Ð\92Ñ\85одÑ\8fÑ\89иÑ\8fÑ\82 Ð°Ð´Ñ\80еÑ\81 Ð½Ð° Ðµ-поÑ\89а е премахнат."
 
 #: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
 msgid "Inbox for %1$s - page %2$d"
-msgstr "Входяща кутия за %s"
+msgstr "%1$s, страница %2$d"
 
 #: actions/inbox.php:62
 #, php-format
@@ -2139,9 +1894,9 @@ msgid "Invites have been disabled."
 msgstr "Поканите са изключени."
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "За да каните хора в %s, трябва да сте влезли."
+msgstr "За да редактирате група, трябва да сте влезли."
 
 #: actions/invite.php:72
 #, php-format
@@ -2162,7 +1917,7 @@ msgstr "Вече сте абонирани за следните потреби
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2209,10 +1964,9 @@ msgstr "Може да добавите и лично съобщение към 
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Прати"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2282,29 +2036,21 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "За да се присъедините към група, трябва да сте влезли."
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Няма псевдоним."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, fuzzy, php-format
+#: actions/joingroup.php:141
+#, php-format
 msgid "%1$s joined group %2$s"
-msgstr "%s се присъедини към групата %s"
+msgstr "%1$s напусна групата %2$s"
 
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
 msgstr "За напуснете група, трябва да сте влезли."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Не членувате в тази група."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s напусна групата %2$s"
@@ -2317,11 +2063,6 @@ msgstr "Вече сте влезли."
 msgid "Incorrect username or password."
 msgstr "Грешно име или парола."
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Забранено."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Вход"
@@ -2350,65 +2091,24 @@ msgstr ""
 "За по-голяма сигурност, моля въведете отново потребителското си име и парола "
 "при промяна на настройките."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Вход с име и парола"
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Влезте с име и парола. Нямате такива? [Регистрирайте](%%action.register%%) "
-"нова сметка или опитайте с [OpenID](%%action.openidlogin%%). "
-
-#: actions/makeadmin.php:92
-msgid "Only an admin can make another user an admin."
-msgstr ""
-
-#: actions/makeadmin.php:96
-#, fuzzy, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Потребителят вече е блокиран за групата."
 
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Грешка при проследяване — потребителят не е намерен."
-
-#: actions/makeadmin.php:146
-#, fuzzy, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr "За да редактирате групата, трябва да сте й администратор."
-
-#: actions/microsummary.php:69
-#, fuzzy
-msgid "No current status."
-msgstr "Няма резултати."
+msgstr ""
 
 #: actions/newapplication.php:52
 msgid "New Application"
 msgstr "Ново приложение"
 
 #: actions/newapplication.php:64
-#, fuzzy
 msgid "You must be logged in to register an application."
-msgstr "За да създавате група, трябва да сте влезли."
-
-#: actions/newapplication.php:143
-#, fuzzy
-msgid "Use this form to register a new application."
-msgstr "Използвайте тази бланка за създаване на нова група."
-
-#: actions/newapplication.php:176
-msgid "Source URL is required."
-msgstr ""
-
-#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
-msgid "Could not create application."
-msgstr "Грешка при отбелязване като любима."
+msgstr "За да редактирате приложение, трябва да сте влезли."
 
 #: actions/newgroup.php:53
 msgid "New group"
@@ -2422,12 +2122,15 @@ msgstr "Използвайте тази бланка за създаване н
 msgid "New message"
 msgstr "Ново съобщение"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Не може да изпращате съобщения до този потребител."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Няма съдържание!"
 
@@ -2435,7 +2138,8 @@ msgstr "Няма съдържание!"
 msgid "No recipient specified."
 msgstr "Не е указан получател."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2446,12 +2150,7 @@ msgstr ""
 msgid "Message sent"
 msgstr "Съобщението е изпратено"
 
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Прякото съобщение до %s е изпратено."
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Грешка в Ajax"
 
@@ -2459,7 +2158,7 @@ msgstr "Грешка в Ajax"
 msgid "New notice"
 msgstr "Нова бележка"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Бележката е публикувана"
 
@@ -2477,9 +2176,9 @@ msgid "Text search"
 msgstr "Търсене на текст"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr " Търсене на \"%s\" в потока"
+msgstr "Съобщение от %1$s в %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2519,36 +2218,24 @@ msgid "Nudge sent!"
 msgstr "Побутването е изпратено!"
 
 #: actions/oauthappssettings.php:59
-#, fuzzy
 msgid "You must be logged in to list your applications."
-msgstr "Ð\97а Ð´Ð° Ñ\80едакÑ\82иÑ\80аÑ\82е Ð³Ñ\80Ñ\83па, трябва да сте влезли."
+msgstr "Ð\97а Ð´Ð° Ñ\80едакÑ\82иÑ\80аÑ\82е Ð¿Ñ\80иложение, трябва да сте влезли."
 
 #: actions/oauthappssettings.php:74
-#, fuzzy
 msgid "OAuth applications"
-msgstr "Ð\94Ñ\80Ñ\83ги Ð½Ð°Ñ\81Ñ\82Ñ\80ойки"
+msgstr "Ð\9dÑ\8fма Ñ\82акова Ð¿Ñ\80иложение."
 
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
 #: actions/oauthconnectionssettings.php:175
-#, fuzzy
 msgid "You are not a user of that application."
-msgstr "Ð\9dе Ñ\87ленÑ\83ваÑ\82е Ð² Ñ\82ази Ð³Ñ\80Ñ\83па."
+msgstr "Ð\9dе Ñ\81Ñ\82е Ñ\81обÑ\81Ñ\82веник Ð½Ð° Ñ\82ова Ð¿Ñ\80иложение."
 
 #: actions/oauthconnectionssettings.php:186
 #, php-format
@@ -2564,9 +2251,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Ð\91ележкаÑ\82а Ð½Ñ\8fма Ð¿Ñ\80оÑ\84ил"
+msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð½Ñ\8fма Ð¿Ñ\80оÑ\84ил."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2575,9 +2261,9 @@ msgstr "Бележка на %1$s от %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "вид съдържание "
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2586,8 +2272,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Неподдържан формат на данните"
 
@@ -2620,47 +2306,29 @@ msgid "Automatic shortening service to use."
 msgstr "Услуга за автоматично съкращаване, която да се ползва."
 
 #: actions/othersettings.php:122
-#, fuzzy
 msgid "View profile designs"
-msgstr "Настройки на профила"
-
-#: actions/othersettings.php:123
-msgid "Show or hide profile designs."
-msgstr ""
+msgstr "Редактиране на профила"
 
 #: actions/othersettings.php:153
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "Услугата за съкращаване е твърде дълга (може да е до 50 знака)."
 
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "Не е указана група."
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Не е указана бележка."
-
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "СÑ\8aÑ\80вÑ\8aÑ\80Ñ\8aÑ\82 Ð½Ðµ Ðµ Ð²Ñ\8aÑ\80нал Ð°Ð´Ñ\80еÑ\81 Ð½Ð° Ð¿Ñ\80оÑ\84ила."
+msgstr "Ð\9dÑ\8fма Ð·Ð°Ñ\8fвка Ð·Ð° Ð¾Ð´Ð¾Ð±Ñ\80ение."
 
 #: actions/otp.php:95
-#, fuzzy
 msgid "Invalid login token specified."
-msgstr "Невалидно съдържание на бележка"
+msgstr "Не е указана бележка."
 
 #: actions/otp.php:104
-#, fuzzy
 msgid "Login token expired."
-msgstr "Влизане в сайта"
+msgstr "Вход в сайта"
 
 #: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
 msgid "Outbox for %1$s - page %2$d"
-msgstr "Изходяща кутия за %s"
+msgstr "%1$s, страница %2$d"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2679,11 +2347,6 @@ msgstr "Смяна на паролата"
 msgid "Change your password."
 msgstr "Смяна на паролата."
 
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "Паролата е записана."
-
 #: actions/passwordsettings.php:104
 msgid "Old password"
 msgstr "Стара парола"
@@ -2742,25 +2405,10 @@ msgstr "Пътища"
 msgid "Path and server settings for this StatusNet site."
 msgstr "Пътища и сървърни настройки за тази инсталация на StatusNet."
 
-#: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
-msgid "Theme directory not readable: %s."
-msgstr "Страницата не е достъпна във вида медия, който приемате"
-
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Страницата не е достъпна във вида медия, който приемате"
-
-#: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
-msgid "Background directory not writable: %s."
-msgstr "Директория на фона"
-
-#: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
-msgid "Locales directory not readable: %s."
-msgstr "Страницата не е достъпна във вида медия, който приемате"
+msgstr "Директория на аватара"
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2806,18 +2454,6 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
-#: actions/pathsadminpanel.php:264
-msgid "Theme server"
-msgstr ""
-
-#: actions/pathsadminpanel.php:268
-msgid "Theme path"
-msgstr ""
-
-#: actions/pathsadminpanel.php:272
-msgid "Theme directory"
-msgstr ""
-
 #: actions/pathsadminpanel.php:279
 msgid "Avatars"
 msgstr "Аватари"
@@ -2900,19 +2536,13 @@ msgid "People search"
 msgstr "Търсене на хора"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "Това не е правилен адрес на е-поща."
-
-#: actions/peopletag.php:142
-#, fuzzy, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Бележки с етикет %s, страница %d"
+msgstr "Неправилен адрес на е-поща."
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Ð\9dевалидно Ñ\81Ñ\8aдÑ\8aÑ\80жание Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐºÐ°"
+msgstr "Ð\9dепÑ\80авилен Ñ\80азмеÑ\80."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3032,15 +2662,6 @@ msgstr "Името на езика е твърде дълго (може да е
 msgid "Invalid tag: \"%s\""
 msgstr "Неправилен етикет: \"%s\""
 
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Грешка при запазване етикетите."
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Грешка при запазване на профила."
@@ -3119,9 +2740,8 @@ msgid ""
 msgstr ""
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "Ð\95миÑ\81иÑ\8f Ð½Ð° Ð¾Ð±Ñ\89иÑ\8f Ð¿Ð¾Ñ\82ок"
+msgstr "Ð\9eбÑ\89 Ð¿Ð¾Ñ\82ок, Ñ\81Ñ\82Ñ\80аниÑ\86а %d"
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3144,10 +2764,6 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:134
-msgid "Tag cloud"
-msgstr ""
-
 #: actions/recoverpassword.php:36
 msgid "You are already logged in!"
 msgstr "Вече сте влезли!"
@@ -3176,12 +2792,6 @@ msgstr "Кодът за потвърждение е твърде стар. За
 msgid "Could not update user with confirmed email address."
 msgstr "Грешка при обновяване на потребител с потвърден email адрес."
 
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
@@ -3274,11 +2884,6 @@ msgstr "Новата парола е запазена. Влязохте успе
 msgid "Sorry, only invited people can register."
 msgstr ""
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "Грешка в кода за потвърждение."
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "Записването е успешно."
@@ -3360,11 +2965,11 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
-msgstr " освен тези лични данни: парола, е-поща, месинджър, телефон."
+msgstr ""
 
 #: actions/register.php:583
 #, php-format
@@ -3462,9 +3067,8 @@ msgid "That’s a local profile! Login to subscribe."
 msgstr "Това е локален профил! Влезте, за да се абонирате."
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Не е получен token за одобрение."
+msgstr ""
 
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
@@ -3482,7 +3086,7 @@ msgstr "Не можете да повтаряте собствена бележ
 msgid "You already repeated that notice."
 msgstr "Вече сте повторили тази бележка."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Повторено"
 
@@ -3496,11 +3100,6 @@ msgstr "Повторено!"
 msgid "Replies to %s"
 msgstr "Отговори на %s"
 
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "Отговори до %1$s в %2$s!"
-
 #: actions/replies.php:145
 #, php-format
 msgid "Replies feed for %s (RSS 1.0)"
@@ -3542,29 +3141,17 @@ msgstr ""
 msgid "Replies to %1$s on %2$s!"
 msgstr "Отговори до %1$s в %2$s!"
 
-#: actions/revokerole.php:75
-#, fuzzy
-msgid "You cannot revoke user roles on this site."
-msgstr "Не можете да заглушавате потребители на този сайт."
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "Потребител без съответстващ профил"
-
 #: actions/rsd.php:146 actions/version.php:159
 msgid "StatusNet"
 msgstr "StatusNet"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
 msgid "You cannot sandbox users on this site."
-msgstr "Не може да изпращате съобщения до този потребител."
+msgstr "Не можете да заглушавате потребители на този сайт."
 
 #: actions/sandbox.php:72
-#, fuzzy
 msgid "User is already sandboxed."
-msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð²Ð¸ Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ал."
+msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð²ÐµÑ\87е Ðµ Ð·Ð°Ð³Ð»Ñ\83Ñ\88ен."
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3573,9 +3160,8 @@ msgid "Sessions"
 msgstr "Сесии"
 
 #: actions/sessionsadminpanel.php:65
-#, fuzzy
 msgid "Session settings for this StatusNet site."
-msgstr "Ð\9eÑ\81новни Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð½а тази инсталация на StatusNet."
+msgstr "Ð\9fÑ\8aÑ\82иÑ\89а Ð¸ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80ни Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð·а тази инсталация на StatusNet."
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
@@ -3638,10 +3224,6 @@ msgstr "Статистики"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
@@ -3666,22 +3248,12 @@ msgstr ""
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:283
-#, fuzzy
-msgid "Authorize URL"
-msgstr "Автор"
-
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Наистина ли искате да изтриете тази бележка?"
-
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3737,9 +3309,9 @@ msgid "%s group"
 msgstr "Група %s"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Членове на групата %s, страница %d"
+msgstr "%1$s, страница %2$d"
 
 #: actions/showgroup.php:227
 msgid "Group profile"
@@ -3759,24 +3331,20 @@ msgstr "Бележка"
 msgid "Aliases"
 msgstr "Псевдоними"
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 1.0)"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 2.0)"
 
 #: actions/showgroup.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (Atom)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (Atom)"
 
 #: actions/showgroup.php:355
 #, php-format
@@ -3846,20 +3414,15 @@ msgstr "Съобщение от %1$s в %2$s"
 msgid "Notice deleted."
 msgstr "Бележката е изтрита."
 
-#: actions/showstream.php:73
-#, fuzzy, php-format
-msgid " tagged %s"
-msgstr "Бележки с етикет %s"
-
 #: actions/showstream.php:79
 #, php-format
 msgid "%1$s, page %2$d"
 msgstr "%1$s, страница %2$d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 1.0)"
 
 #: actions/showstream.php:129
 #, php-format
@@ -3917,9 +3480,9 @@ msgid ""
 msgstr ""
 
 #: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
 msgid "Repeat of %s"
-msgstr "Ð\9eÑ\82говоÑ\80и на %s"
+msgstr "Ð\9fовÑ\82оÑ\80ениÑ\8f на %s"
 
 #: actions/silence.php:65 actions/unsilence.php:65
 msgid "You cannot silence users on this site."
@@ -3930,18 +3493,16 @@ msgid "User is already silenced."
 msgstr "Потребителят вече е заглушен."
 
 #: actions/siteadminpanel.php:69
-#, fuzzy
 msgid "Basic settings for this StatusNet site"
-msgstr "Ð\9eÑ\81новни Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð½а тази инсталация на StatusNet."
+msgstr "Ð\9fÑ\8aÑ\82иÑ\89а Ð¸ Ñ\81Ñ\8aÑ\80вÑ\8aÑ\80ни Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð·а тази инсталация на StatusNet."
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
 msgstr "Името на сайта е задължително."
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Ð\90дÑ\80еÑ\81Ñ\8aÑ\82 Ð½Ð° Ðµ-поÑ\89а Ð·Ð° ÐºÐ¾Ð½Ñ\82акÑ\82 Ðµ Ð·Ð°Ð´Ñ\8aлжиÑ\82елен"
+msgstr "Ð\9dепÑ\80авилен Ð°Ð´Ñ\80еÑ\81 Ð½Ð° Ðµ-поÑ\89а."
 
 #: actions/siteadminpanel.php:159
 #, php-format
@@ -3949,9 +3510,8 @@ msgid "Unknown language \"%s\"."
 msgstr "Непознат език \"%s\"."
 
 #: actions/siteadminpanel.php:165
-#, fuzzy
 msgid "Minimum text limit is 0 (unlimited)."
-msgstr "Минималното ограничение на текста е 140 знака."
+msgstr ""
 
 #: actions/siteadminpanel.php:171
 msgid "Dupe limit must be one or more seconds."
@@ -3989,11 +3549,6 @@ msgstr ""
 msgid "Contact email address for your site"
 msgstr "Адрес на е-поща за контакт със сайта"
 
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Местоположение"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr "Часови пояс по подразбиране"
@@ -4031,37 +3586,24 @@ msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "Нова бележка"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Ново съобщение"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Грешка при записване настройките за Twitter"
+msgstr "Бележки"
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:176
-#, fuzzy
 msgid "Site notice text"
-msgstr "Ð\9dова Ð±ÐµÐ»ÐµÐ¶Ðºа"
+msgstr "Ð\98зÑ\82Ñ\80иване Ð½Ð° Ð±ÐµÐ»ÐµÐ¶ÐºÐ°Ñ\82а"
 
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:198
-#, fuzzy
 msgid "Save site notice"
-msgstr "Ð\9dова Ð±ÐµÐ»ÐµÐ¶Ðºа"
+msgstr "Ð\97апазване Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð½Ð° Ñ\81айÑ\82а"
 
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
@@ -4077,15 +3619,13 @@ msgstr "Може да получавате на е-пощата си SMS-съо
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Страницата не е достъпна във вида медия, който приемате"
+msgstr ""
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "IM адрес"
+msgstr "Адрес на е-поща"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4107,13 +3647,6 @@ msgstr "Код за потвърждение"
 msgid "Enter the code you received on your phone."
 msgstr "Въведете кода, който получихте по телефона."
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Потвърждаване"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
@@ -4126,9 +3659,8 @@ msgstr "Телефонен номер — с код, без пунктоация
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Настройки"
+msgstr "Настройки на е-поща"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4139,12 +3671,6 @@ msgstr ""
 "Получаване на бележки в SMS. Имайте предвид, че може да има допълнителни "
 "такси от оператора."
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Настройките са запазени."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
@@ -4167,14 +3693,13 @@ msgstr "Този телефонен номер вече се използва о
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
 msgstr ""
-"На телефонния номер, който сте въвели, беше изпратен код за потвърждение. "
-"Проверете съобщенията (или папката за спам) за кода и указанията за "
-"използванеÑ\82о Ð¼Ñ\83."
+"На адреса на е-поща, който сте въвели, беше изпратен код за потвърждение. "
+"Проверете кутията (или папката за спам) за кода и указанията за използването "
+"му."
 
 #. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
 #: actions/smssettings.php:413
@@ -4183,9 +3708,8 @@ msgstr "Този код за потвърждение е грешен."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Ð\9fоÑ\82вÑ\8aÑ\80ждаванеÑ\82о Ðµ Ð¿Ñ\80екÑ\8aÑ\81наÑ\82о."
+msgstr "Ð\9fоÑ\82вÑ\8aÑ\80ждение Ð·Ð° SMS"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4193,12 +3717,6 @@ msgstr "Потвърждаването е прекъснато."
 msgid "That is not your phone number."
 msgstr "Това не е вашият телефонен номер."
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "Телефонен номер за SMS"
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
@@ -4231,15 +3749,6 @@ msgstr "Не е въведен код."
 msgid "Snapshots"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:65
-#, fuzzy
-msgid "Manage snapshot configuration"
-msgstr "Промяна настройките на сайта"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
@@ -4280,20 +3789,14 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Запазване настройките на сайта"
-
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
 msgstr "Не сте абонирани за този профил"
 
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "Грешка при създаване на нов абонамент."
+msgstr "Грешка при добавяне на нов абонамент."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
@@ -4303,16 +3806,6 @@ msgstr ""
 msgid "No such profile."
 msgstr "Няма такъв профил."
 
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Не сте абонирани за този профил"
-
-#: actions/subscribe.php:145
-#, fuzzy
-msgid "Subscribed"
-msgstr "Абониране"
-
 #: actions/subscribers.php:50
 #, php-format
 msgid "%s subscribers"
@@ -4393,34 +3886,28 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Бележки с етикет %s, страница %d"
+msgstr "Бележки с етикет %s"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 1.0)"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (RSS 2.0)"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr "Емисия с бележки на %s"
+msgstr "Емисия с бележки на %s (Atom)"
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Няма такъв документ."
-
-#: actions/tagother.php:65
-#, fuzzy, php-format
-msgid "Tag %s"
-msgstr "Етикети"
+msgstr "Липсват аргументи return-to."
 
 #: actions/tagother.php:77 lib/userprofile.php:76
 msgid "User profile"
@@ -4431,11 +3918,6 @@ msgstr "Потребителски профил"
 msgid "Photo"
 msgstr "Снимка"
 
-#: actions/tagother.php:141
-#, fuzzy
-msgid "Tag user"
-msgstr "Етикети"
-
 #: actions/tagother.php:151
 msgid ""
 "Tags for this user (letters, numbers, -, ., and _), comma- or space- "
@@ -4464,23 +3946,16 @@ msgid "You haven't blocked that user."
 msgstr "Не сте блокирали този потребител."
 
 #: actions/unsandbox.php:72
-#, fuzzy
 msgid "User is not sandboxed."
-msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð²Ð¸ Ðµ Ð±Ð»Ð¾ÐºÐ¸Ñ\80ал."
+msgstr "Ð\9fоÑ\82Ñ\80ебиÑ\82елÑ\8fÑ\82 Ð½Ðµ Ðµ Ð·Ð°Ð³Ð»Ñ\83Ñ\88ен."
 
 #: actions/unsilence.php:72
 msgid "User is not silenced."
 msgstr "Потребителят не е заглушен."
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Сървърът не е върнал адрес на профила."
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "Отписване"
+msgstr "Не е открит профил с такъв идентификатор."
 
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
@@ -4494,10 +3969,6 @@ msgctxt "TITLE"
 msgid "User"
 msgstr "Потребител"
 
-#: actions/useradminpanel.php:70
-msgid "User settings for this StatusNet site."
-msgstr ""
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4517,10 +3988,6 @@ msgstr ""
 msgid "Profile"
 msgstr "Профил"
 
-#: actions/useradminpanel.php:222
-msgid "Bio Limit"
-msgstr ""
-
 #: actions/useradminpanel.php:223
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
@@ -4529,26 +3996,10 @@ msgstr ""
 msgid "New users"
 msgstr "Нови потребители"
 
-#: actions/useradminpanel.php:235
-msgid "New user welcome"
-msgstr ""
-
 #: actions/useradminpanel.php:236
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Всички абонаменти"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Автоматично абониране за всеки, който се абонира за мен (подходящо за "
-"ботове)."
-
 #: actions/useradminpanel.php:251
 msgid "Invitations"
 msgstr "Покани"
@@ -4566,14 +4017,11 @@ msgid "Authorize subscription"
 msgstr "Одобряване на абонамента"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Проверете тези детайли и се уверете, че искате да се абонирате за бележките "
-"на този потребител. Ако не искате абонамента, натиснете \"Cancel\" (Отказ)."
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4592,11 +4040,6 @@ msgstr "Абониране за този потребител"
 msgid "Reject"
 msgstr "Охвърляне"
 
-#: actions/userauthorization.php:220
-#, fuzzy
-msgid "Reject this subscription"
-msgstr "Абонаменти на %s"
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Няма заявка за одобрение."
@@ -4606,28 +4049,22 @@ msgid "Subscription authorized"
 msgstr "Абонаментът е одобрен"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"Абонаментът е одобрен, но не е зададен callback URL. За да завършите "
-"одобряването, проверете инструкциите на сайта. Вашият token за абонамент е:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Абонаментът е отказан"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"Абонаментът е отказан, но не е зададен callback URL. За да откажете напълно "
-"абонамента, проверете инструкциите на сайта."
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4655,19 +4092,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Грешка при четене адреса на аватара '%s'"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Грешен вид изображение за '%s'"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Настройки на профила"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4681,9 +4113,9 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Членове на групата %s, страница %d"
+msgstr "%1$s, страница %2$d"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
@@ -4796,54 +4228,11 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Неправилен размер."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Профил на групата"
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Грешка при обновяване на групата."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Профил на групата"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Грешка при обновяване на групата."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Грешка при отбелязване като любима."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "Грешка при изпращане на прякото съобщение"
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -4862,65 +4251,43 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Грешка в базата от данни — отговор при вмъкването: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Проблем при записване на бележката."
+msgstr "Грешка при вмъкване на аватар"
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Грешка при записване на бележката. Непознат потребител."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
 "отново след няколко минути."
 
-#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-#, fuzzy
-msgid ""
-"Too many duplicate messages too quickly; take a breather and post again in a "
-"few minutes."
-msgstr ""
-"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
-"отново след няколко минути."
-
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Забранено ви е да публикувате бележки в този сайт."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Проблем при записване на бележката."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Проблем при записване на бележката."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4939,57 +4306,30 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Потребителят няма профил."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "Грешка при записване настройките за Twitter"
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Потребителят е забранил да се абонирате за него."
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
+msgstr "Грешка при запазване на етикетите."
 
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "Потребителят ви е блокирал."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Не сте абонирани!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¸Ð·Ñ\82Ñ\80иване Ð½Ð° Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82а."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð´Ð¾Ð±Ð°Ð²Ñ\8fне Ð½Ð° Ð½Ð¾Ð² Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¸Ð·Ñ\82Ñ\80иване Ð½Ð° Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82а."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð´Ð¾Ð±Ð°Ð²Ñ\8fне Ð½Ð° Ð½Ð¾Ð² Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¸Ð·Ñ\82Ñ\80иване Ð½Ð° Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82а."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð´Ð¾Ð±Ð°Ð²Ñ\8fне Ð½Ð° Ð½Ð¾Ð² Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5005,21 +4345,18 @@ msgstr "Грешка при създаване на групата."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ñ\81Ñ\8aздаване Ð½Ð° Ð½Ð¾Ð² Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ñ\81Ñ\8aздаване Ð½Ð° Ð³Ñ\80Ñ\83паÑ\82а."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ñ\81Ñ\8aздаване Ð½Ð° Ð½Ð¾Ð² Ð°Ð±Ð¾Ð½Ð°Ð¼ÐµÐ½Ñ\82."
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ñ\81Ñ\8aздаване Ð½Ð° Ð³Ñ\80Ñ\83паÑ\82а."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "Грешка при създаване на нов абонамент."
+msgstr "Грешка при запазване на етикетите."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
@@ -5041,12 +4378,6 @@ msgstr "Смяна на паролата"
 msgid "Change email handling"
 msgstr "Промяна обработката на писмата"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "Потребителски профил"
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -5068,11 +4399,6 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr "Неозаглавена страница"
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-msgid "Primary site navigation"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -5108,13 +4434,6 @@ msgctxt "TOOLTIP"
 msgid "Change site configuration"
 msgstr "Промяна настройките на сайта"
 
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "Настройки"
-
 #. TRANS: Tooltip for main menu option "Invite"
 #: lib/action.php:465
 #, php-format
@@ -5122,13 +4441,6 @@ msgctxt "TOOLTIP"
 msgid "Invite friends and colleagues to join you on %s"
 msgstr "Поканете приятели и колеги да се присъединят към вас в %s"
 
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "Покани"
-
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
 msgctxt "TOOLTIP"
@@ -5164,13 +4476,6 @@ msgctxt "MENU"
 msgid "Login"
 msgstr "Вход"
 
-#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:494
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Help me!"
-msgstr "Помощ"
-
 #: lib/action.php:497
 msgctxt "MENU"
 msgid "Help"
@@ -5187,29 +4492,15 @@ msgctxt "MENU"
 msgid "Search"
 msgstr "Търсене"
 
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Нова бележка"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Нова бележка"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "Ð\90бонаменÑ\82и"
+msgstr "Ð\9eÑ\81новна Ð½Ð°Ñ\81Ñ\82Ñ\80ойка Ð½Ð° Ñ\81айÑ\82а"
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5257,13 +4548,11 @@ msgstr "Лиценз на програмата StatusNet"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** е услуга за микроблогване, предоставена ви от [%%site."
-"broughtby%%](%%site.broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5352,31 +4641,6 @@ msgstr ""
 msgid "You cannot make changes to this site."
 msgstr "Не можете да променяте този сайт."
 
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Записването не е позволено."
-
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-#, fuzzy
-msgid "showForm() not implemented."
-msgstr "Командата все още не се поддържа."
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-#, fuzzy
-msgid "saveSettings() not implemented."
-msgstr "Командата все още не се поддържа."
-
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Грешка при записване настройките за Twitter"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
 msgid "Basic site configuration"
@@ -5393,102 +4657,35 @@ msgstr "Сайт"
 msgid "Design configuration"
 msgstr "Настройка на оформлението"
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-#, fuzzy
-msgctxt "MENU"
-msgid "Design"
-msgstr "Версия"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "Настройка на пътищата"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "Потребител"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Настройка на оформлението"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
 msgid "Paths configuration"
 msgstr "Настройка на пътищата"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Настройка на оформлението"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:398
-#, fuzzy
 msgid "Edit site notice"
-msgstr "Нова бележка"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Настройка на пътищата"
+msgstr "Изтриване на бележката"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, fuzzy, php-format
-msgid "Describe your application in %d characters"
-msgstr "Опишете групата или темата в до %d букви"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Ð\9eпиÑ\88еÑ\82е Ð³Ñ\80Ñ\83паÑ\82а Ð¸Ð»Ð¸ Ñ\82емаÑ\82а"
+msgstr "Ð\98зÑ\82Ñ\80иване Ð½Ð° Ð¿Ñ\80иложениеÑ\82о"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:224
-#, fuzzy
 msgid "URL of the homepage of this application"
-msgstr "Адрес на страница, блог или профил в друг сайт на групата"
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Изходен код"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:242
-#, fuzzy
-msgid "URL for the homepage of the organization"
-msgstr "Адрес на страница, блог или профил в друг сайт на групата"
+msgstr "Не сте собственик на това приложение."
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5546,18 +4743,6 @@ msgstr ""
 msgid "Approved %1$s - \"%2$s\" access."
 msgstr ""
 
-#. TRANS: Button label
-#: lib/applicationlist.php:159
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Revoke"
-msgstr "Премахване"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
-
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
@@ -5572,19 +4757,9 @@ msgstr "Доставчик"
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Паролата е записана."
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "Паролата е записана."
+msgstr ""
 
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
@@ -5598,45 +4773,21 @@ msgstr "Командата е изпълнена"
 msgid "Command failed"
 msgstr "Грешка при изпълнение на командата"
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Не е открита бележка с такъв идентификатор."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Потребителят няма последна бележка"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Грешка при обновяване на потребител с потвърден email адрес."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Грешка при обновяване на потребител с потвърден email адрес."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "За съжаление тази команда все още не се поддържа."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Изпратено е побутване на %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5647,55 +4798,39 @@ msgstr ""
 "Абонати: %2$s\n"
 "Бележки: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Бележката е отбелязана като любима."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Вече членувате в тази група."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Грешка при проследяване — потребителят не е намерен."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Грешка при проследяване — потребителят не е намерен."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Пълно име: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Местоположение: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Домашна страница: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Относно: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5704,146 +4839,111 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+#: lib/command.php:491 lib/xmppmanager.php:403
+#, php-format
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "Съобщението е твърде дълго. Най-много може да е %1$d знака, а сте въвели %2"
 "$d."
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Прякото съобщение до %s е изпратено."
-
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Грешка при изпращане на прякото съобщение"
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Не можете да повтаряте собствена бележка"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Вече сте повторили тази бележка."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Бележката от %s е повторена"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Грешка при повтаряне на бележката."
 
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"Съобщението е твърде дълго. Най-много може да е 140 знака, а сте въвели %d."
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Отговорът до %s е изпратен"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Грешка при записване на бележката."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Уточнете името на потребителя, за когото се абонирате."
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Не сте абонирани за този профил"
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Абонирани сте за %s."
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Уточнете името на потребителя, от когото се отписвате."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Отписани сте от %s."
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Командата все още не се поддържа."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Уведомлението е изключено."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Грешка при изключване на уведомлението."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Уведомлението е включено."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Грешка при включване на уведомлението."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Отписани сте от %s."
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Не сте абонирани за никого."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Вече сте абонирани за следните потребители:"
 msgstr[1] "Вече сте абонирани за следните потребители:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Никой не е абониран за вас."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Грешка при абониране на друг потребител за вас."
 msgstr[1] "Грешка при абониране на друг потребител за вас."
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Не членувате в нито една група."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Не членувате в тази група."
 msgstr[1] "Не членувате в тази група."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5897,11 +4997,6 @@ msgstr ""
 msgid "You may wish to run the installer to fix this."
 msgstr ""
 
-#: lib/common.php:139
-#, fuzzy
-msgid "Go to the installer."
-msgstr "Влизане в сайта"
-
 #: lib/connectsettingsaction.php:110
 msgid "IM"
 msgstr "IM"
@@ -5914,15 +5009,6 @@ msgstr "Бележки през месинджър (IM)"
 msgid "Updates by SMS"
 msgstr "Бележки през SMS"
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Свързване"
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr "Грешка в базата от данни"
@@ -5938,14 +5024,9 @@ msgstr ""
 "Можете да качите лично изображение за фон. Максималната големина на файла е "
 "2MB."
 
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
 msgid "Disfavor this notice"
-msgstr "%s любими бележки"
+msgstr "Отбелязване като любимо"
 
 #: lib/favorform.php:114 lib/favorform.php:140
 msgid "Favor this notice"
@@ -6055,11 +5136,6 @@ msgstr "Лого"
 msgid "Add or edit %s logo"
 msgstr "Добавяне или редактиране логото на %s"
 
-#: lib/groupnav.php:120
-#, fuzzy, php-format
-msgid "Add or edit %s design"
-msgstr "Добавяне или редактиране логото на %s"
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Групи с най-много членове"
@@ -6082,11 +5158,6 @@ msgstr "Страницата не е достъпна във вида медия
 msgid "Unsupported image file format."
 msgstr "Форматът на файла с изображението не се поддържа."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Може да качите лого за групата ви."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Частично качване на файла."
@@ -6100,9 +5171,8 @@ msgid "Not an image or corrupt file."
 msgstr "Файлът не е изображение или е повреден."
 
 #: lib/imagefile.php:122
-#, fuzzy
 msgid "Lost our file."
-msgstr "Няма такава бележка."
+msgstr "Няма такъв файл."
 
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
@@ -6122,9 +5192,9 @@ msgid "[%s]"
 msgstr "[%s]"
 
 #: lib/jabber.php:567
-#, fuzzy, php-format
+#, php-format
 msgid "Unknown inbox source %d."
-msgstr "Непознат език \"%s\""
+msgstr "Непознат език \"%s\"."
 
 #: lib/joinform.php:114
 msgid "Join"
@@ -6241,12 +5311,6 @@ msgstr "Състояние на %s"
 msgid "SMS confirmation"
 msgstr "Потвърждение за SMS"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Очаква се потвърждение за този телефонен номер."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6333,11 +5397,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6376,7 +5435,7 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "от"
 
@@ -6396,11 +5455,6 @@ msgstr "Това не е вашият входящ адрес."
 msgid "Sorry, no incoming email allowed."
 msgstr "Входящата поща не е разрешена."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Форматът на файла с изображението не се поддържа."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6440,9 +5494,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Грешка при изтегляне на общия поток"
+msgstr "Грешка при изтриване на любима бележка."
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6462,42 +5515,41 @@ msgstr "Изпращане на пряко съобщеие"
 msgid "To"
 msgstr "До"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Налични знаци"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Прати"
+msgstr ""
 
 #: lib/noticeform.php:160
 msgid "Send a notice"
 msgstr "Изпращане на бележка"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Какво става, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Прикрепяне"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Прикрепяне на файл"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Споделяне на местоположението ми"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Без споделяне на местоположението ми"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6528,27 +5580,27 @@ msgstr "З"
 msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgstr ""
 
-#: lib/noticelist.php:453
-msgid "at"
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "в контекст"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Повторено от"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Отговаряне на тази бележка"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Отговор"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Бележката е повторена."
 
@@ -6580,11 +5632,6 @@ msgstr "Грешка при обновяване на отдалечен про
 msgid "Error inserting remote profile"
 msgstr "Грешка при вмъкване на отдалечен профил"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Изтриване на бележката"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Грешка при добавяне на нов абонамент."
@@ -6642,11 +5689,6 @@ msgstr "Абонати"
 msgid "All subscribers"
 msgstr "Всички абонати"
 
-#: lib/profileaction.php:191
-#, fuzzy
-msgid "User ID"
-msgstr "Потребител"
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "Участник от"
@@ -6700,25 +5742,10 @@ msgstr "Да"
 msgid "Repeat this notice"
 msgstr "Повтаряне на тази бележка"
 
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "Списък с потребителите в тази група."
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "Входящи"
-
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Разблокиране на този потребител"
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr "Търсене в сайта"
@@ -6813,13 +5840,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Неуспешно обновяване на аватара."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6845,9 +5865,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¾Ð±Ð½Ð¾Ð²Ñ\8fване Ð½Ð° Ð¾Ñ\82далеÑ\87ен Ð¿Ñ\80оÑ\84ил"
+msgstr "Ð\93Ñ\80еÑ\88ка Ð¿Ñ\80и Ð¸Ð·Ð¿Ñ\80аÑ\89ане Ð½Ð° Ð¿Ñ\80Ñ\8fкоÑ\82о Ñ\81Ñ\8aобÑ\89ение"
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
@@ -6857,19 +5876,9 @@ msgstr "Най-често пишещи"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Разблокиране на този потребител"
-
-#: lib/unsilenceform.php:67
-msgid "Unsilence"
-msgstr ""
-
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "РазблокиÑ\80ане Ð½Ð° Ñ\82ози Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел"
+msgstr "Ð\97аглÑ\83Ñ\88аване Ð½Ð° Ñ\82ози Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82ел."
 
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
@@ -6879,11 +5888,6 @@ msgstr "Отписване от този потребител"
 msgid "Unsubscribe"
 msgstr "Отписване"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Потребителят няма профил."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Редактиране на аватара"
@@ -6912,10 +5916,6 @@ msgstr "Изпращате на пряко съобщение до този по
 msgid "Message"
 msgstr "Съобщение"
 
-#: lib/userprofile.php:326
-msgid "Moderate"
-msgstr ""
-
 #: lib/userprofile.php:364
 msgid "User role"
 msgstr "Потребителска роля"
@@ -6931,56 +5931,56 @@ msgid "Moderator"
 msgstr "Модератор"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "преди няколко секунди"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "преди около минута"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "преди около %d минути"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "преди около час"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "преди около %d часа"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "преди около ден"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "преди около %d дни"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "преди около месец"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "преди около %d месеца"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "преди около година"
 
@@ -6993,10 +5993,3 @@ msgstr "%s не е допустим цвят!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s не е допустим цвят! Използвайте 3 или 6 шестнадесетични знака."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Съобщението е твърде дълго. Най-много може да е %1$d знака, а сте въвели %2"
-"$d."
index e4eb8d8545ce68e84537bc6eda43b82432caa0ca..9b52a7df140e4437a805a2c3f1aab5f08ac9b9fb 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:11:33+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:08+0000\n"
 "Language-Team: Dutch\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: br\n"
 "X-Message-Group: out-statusnet\n"
@@ -90,6 +90,7 @@ msgstr "Enrollañ"
 msgid "No such page."
 msgstr "N'eus ket eus ar bajenn-se."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -109,7 +110,7 @@ msgstr "N'eus ket eus ar bajenn-se."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "N'eus ket eus an implijer-se."
@@ -150,11 +151,12 @@ msgstr "Gwazh evit mignoned %s (Atom)"
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline for %s and friends but no one has posted anything yet."
 msgstr ""
-"Kronologiezh foran %%site.name%% eo, met den n'en deus skrivet tra ebet."
+"Hemañ eo al lanvad evit %s hag e vignoned met den n'en deus skrivet tra ebet "
+"evit ar mare."
 
 #: actions/all.php:143
 #, php-format
@@ -171,15 +173,6 @@ msgid ""
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
-"post a notice to them."
-msgstr ""
-"Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
-"gentañ da embann un dra !"
-
 #. TRANS: H1 text
 #: actions/all.php:182
 msgid "You and friends"
@@ -343,7 +336,8 @@ msgstr "N'eo bet kavet statud ebet gant an ID-mañ."
 msgid "This status is already a favorite."
 msgstr "Ur pennroll eo dija an ali-mañ."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Diposupl eo krouiñ ar pennroll-mañ."
 
@@ -385,13 +379,6 @@ msgstr "Diposubl eo termeniñ an implijer mammenn."
 msgid "Could not find target user."
 msgstr "Diposubl eo kavout an implijer pal."
 
-#: actions/apigroupcreate.php:167 actions/editgroup.php:186
-#: actions/newgroup.php:126 actions/profilesettings.php:215
-#: actions/register.php:212
-#, fuzzy
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "1 da 64 lizherenn vihan pe sifr, hep poentaouiñ nag esaouenn"
-
 #: actions/apigroupcreate.php:176 actions/editgroup.php:190
 #: actions/newgroup.php:130 actions/profilesettings.php:238
 #: actions/register.php:215
@@ -457,15 +444,19 @@ msgstr "Ne c'hell ket an alias bezañ ar memes hini eget al lesanv."
 msgid "Group not found."
 msgstr "N'eo ket bet kavet ar strollad."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Un ezel eus ar strollad-mañ eo dija."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Stanket oc'h bet eus ar strollad-mañ gant ur merour."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Diposubl eo stagañ an implijer %1$s d'ar strollad %2$s."
@@ -474,7 +465,10 @@ msgstr "Diposubl eo stagañ an implijer %1$s d'ar strollad %2$s."
 msgid "You are not a member of this group."
 msgstr "N'oc'h ket ezel eus ar strollad-mañ."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Diposubl eo dilemel an implijer %1$s deus ar strollad %2$s."
@@ -537,11 +531,6 @@ msgstr "Ur gudenn 'zo bet gant ho jedaouer dalc'h. Mar plij adklaskit."
 msgid "Invalid nickname / password!"
 msgstr "Lesanv / ger tremen direizh !"
 
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Arabat eo dilemel ar poellad-mañ"
-
 #: actions/apioauthauthorize.php:185
 msgid "Database error inserting OAuth application user."
 msgstr ""
@@ -630,11 +619,13 @@ msgstr "Ne c'helloc'h ket dilemel statud un implijer all."
 msgid "No such notice."
 msgstr "N'eus ket eus an ali-se."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Ne c'helloc'h ket adlavar ho alioù."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Adlavaret o peus dija an ali-mañ."
 
@@ -650,7 +641,7 @@ msgstr "N'eo ket bet kavet a statud evit an ID-mañ"
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -660,7 +651,7 @@ msgstr "Re hir eo ! Ment hirañ an ali a zo a %d arouezenn."
 msgid "Not found."
 msgstr "N'eo ket bet kavet."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -684,11 +675,6 @@ msgstr "%1$s statud pennroll da %2$s / %2$s."
 msgid "%1$s / Updates mentioning %2$s"
 msgstr "%1$s / Hizivadennoù a veneg %2$s"
 
-#: actions/apitimelinementions.php:131
-#, fuzzy, php-format
-msgid "%1$s updates that reply to updates from %2$s / %3$s."
-msgstr "%1$s statud pennroll da %2$s / %2$s."
-
 #: actions/apitimelinepublic.php:197 actions/publicrss.php:103
 #, php-format
 msgid "%s public timeline"
@@ -865,6 +851,8 @@ msgstr "Stankañ an implijer-mañ"
 msgid "Failed to save block information."
 msgstr "Diposubl eo enrollañ an titouroù stankañ."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -874,8 +862,8 @@ msgstr "Diposubl eo enrollañ an titouroù stankañ."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "N'eus ket eus ar strollad-se."
 
@@ -1403,20 +1391,6 @@ msgstr "Ouzhpennañ"
 msgid "Incoming email"
 msgstr "Postel o tont"
 
-#. TRANS: Form instructions for incoming e-mail form in e-mail settings.
-#. TRANS: Form instructions for incoming SMS e-mail address form in SMS settings.
-#: actions/emailsettings.php:155 actions/smssettings.php:178
-#, fuzzy
-msgid "Send email to this address to post new notices."
-msgstr "Chomlec'h postel nevez evit embann e %s"
-
-#. TRANS: Instructions for incoming e-mail address input form.
-#. TRANS: Instructions for incoming SMS e-mail address input form.
-#: actions/emailsettings.php:164 actions/smssettings.php:186
-#, fuzzy
-msgid "Make a new email address for posting to; cancels the old one."
-msgstr "Chomlec'h postel nevez evit embann e %s"
-
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
@@ -1429,12 +1403,6 @@ msgstr "Nevez"
 msgid "Email preferences"
 msgstr "Penndibaboù ar posteloù"
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:180
-#, fuzzy
-msgid "Send me notices of new subscriptions through email."
-msgstr "Kas din an alioù dre Jabber/GTalk."
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:186
 msgid "Send me email when someone adds my notice as a favorite."
@@ -1475,12 +1443,6 @@ msgstr "Enrollet eo bet an arventennoù postel."
 msgid "No email address."
 msgstr "Chomlec'h postel ebet."
 
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-#, fuzzy
-msgid "Cannot normalize that email address"
-msgstr "Diposubl eo implijout an ID Jabber-mañ"
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
@@ -1492,12 +1454,6 @@ msgstr "N'eo ket ur chomlec'h postel reizh."
 msgid "That is already your email address."
 msgstr "Ho postel eo dija."
 
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-#, fuzzy
-msgid "That email address already belongs to another user."
-msgstr "D'un implijer all eo an niverenn-mañ dija."
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
@@ -1513,15 +1469,6 @@ msgid ""
 "inbox (and spam box!) for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-#, fuzzy
-msgid "No pending confirmation to cancel."
-msgstr "Nullet eo bet kadarnadenn ar bostelerezh prim."
-
 #. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
 #: actions/emailsettings.php:424
 msgid "That is the wrong email address."
@@ -1554,18 +1501,6 @@ msgstr "Chomlec'h postel ebet o tont."
 msgid "Couldn't update user record."
 msgstr "Dibosupl eo hizivaat doser an implijer."
 
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-#, fuzzy
-msgid "Incoming email address removed."
-msgstr "Chomlec'h postel ebet o tont."
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-#, fuzzy
-msgid "New incoming email address added."
-msgstr "Chomlec'h postel ebet o tont."
-
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr "Ouzhpennet eo bet an ali-mañ d'ho pennrolloù dija !"
@@ -1598,15 +1533,6 @@ msgid ""
 "next to any notice you like."
 msgstr ""
 
-#: actions/favorited.php:156
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favorites!"
-msgstr ""
-"Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
-"gentañ da embann un dra !"
-
 #: actions/favoritesrss.php:111 actions/showfavorites.php:77
 #: lib/personalgroupnav.php:115
 #, php-format
@@ -1618,17 +1544,6 @@ msgstr "Alioù pennrollet eus %s"
 msgid "Updates favored by %1$s on %2$s!"
 msgstr "Hizivadennoù brientek gant %1$s war %2$s !"
 
-#: actions/featured.php:69 lib/featureduserssection.php:87
-#: lib/publicgroupnav.php:89
-#, fuzzy
-msgid "Featured users"
-msgstr "Diverkañ an implijer"
-
-#: actions/featured.php:71
-#, fuzzy, php-format
-msgid "Featured users, page %d"
-msgstr "Strollad, pajenn %d"
-
 #: actions/featured.php:99
 #, php-format
 msgid "A selection of some great users on %s"
@@ -1646,11 +1561,6 @@ msgstr "Ali ebet."
 msgid "No attachments."
 msgstr "N'eus restr stag ebet."
 
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "N'eus restr stag ebet."
-
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "Ne oa ket gortozet ar respont-mañ !"
@@ -1659,11 +1569,6 @@ msgstr "Ne oa ket gortozet ar respont-mañ !"
 msgid "User being listened to does not exist."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
-#, fuzzy
-msgid "You can use the local subscription!"
-msgstr "Dibosupl eo dilemel ar c'houmanant."
-
 #: actions/finishremotesubscribe.php:99
 msgid "That user has blocked you from subscribing."
 msgstr "An implijer-se en deus ho stanket evit en enskrivañ."
@@ -1672,11 +1577,6 @@ msgstr "An implijer-se en deus ho stanket evit en enskrivañ."
 msgid "You are not authorized."
 msgstr "N'oc'h ket aotreet."
 
-#: actions/finishremotesubscribe.php:113
-#, fuzzy
-msgid "Could not convert request token to access token."
-msgstr "Dibosupl eo kaout ur jedaouer reked."
-
 #: actions/finishremotesubscribe.php:118
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
@@ -1760,20 +1660,10 @@ msgstr "Arabat stankañ an implijer-mañ eus ar strollad."
 msgid "Block this user from this group"
 msgstr "Stankañ an implijer-mañ eus ar strollad-se"
 
-#: actions/groupblock.php:206
-#, fuzzy
-msgid "Database error blocking user from group."
-msgstr "Distankañ implijer ar strollad"
-
 #: actions/groupbyid.php:74 actions/userbyid.php:70
 msgid "No ID."
 msgstr "ID ebet"
 
-#: actions/groupdesignsettings.php:68
-#, fuzzy
-msgid "You must be logged in to edit a group."
-msgstr "Rankout a reoc'h bezañ luget evit krouiñ ur strollad."
-
 #: actions/groupdesignsettings.php:144
 msgid "Group design"
 msgstr "Design ar strollad"
@@ -1803,11 +1693,6 @@ msgid ""
 "You can upload a logo image for your group. The maximum file size is %s."
 msgstr ""
 
-#: actions/grouplogo.php:365
-#, fuzzy
-msgid "Pick a square area of the image to be the logo."
-msgstr "Diuzit ur zonenn gant ur stumm karrez evit tremeniñ ho avatar"
-
 #: actions/grouplogo.php:399
 msgid "Logo updated."
 msgstr "Logo hizivaet."
@@ -1889,16 +1774,6 @@ msgstr ""
 msgid "Create a new group"
 msgstr "Krouiñ ur strollad nevez"
 
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
-msgstr ""
-"Klask tud e %%site.name%% dre o anv, o lec'hiadur pe o diduadennoù. "
-"Dispartiañ termenoù ar c'hlask gant esaouennoù. Ret eo e vefe da nebeutañ 3 "
-"arouezenn."
-
 #: actions/groupsearch.php:58
 msgid "Group search"
 msgstr "Klask strolladoù"
@@ -1917,15 +1792,6 @@ msgstr ""
 "Ma ne gavoc'h ket ar strollad emaoc'h o klask, neuze e c'helloc'h [krouiñ "
 "anezhañ](%%action.newgroup%%)."
 
-#: actions/groupsearch.php:85
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and [create the group](%%"
-"action.newgroup%%) yourself!"
-msgstr ""
-"Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
-"gentañ da embann un dra !"
-
 #: actions/groupunblock.php:91
 msgid "Only an admin can unblock group members."
 msgstr "N'eus nemet ur merour a c'hell distankañ izili ur strollad."
@@ -1996,18 +1862,6 @@ msgstr "Penndibaboù ar bostelerezh prim"
 msgid "Send me notices through Jabber/GTalk."
 msgstr "Kas din an alioù dre Jabber/GTalk."
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:166
-#, fuzzy
-msgid "Post a notice when my Jabber/GTalk status changes."
-msgstr "Embann ur MicroID evit ma chomlec'h Jabber/GTalk."
-
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:172
-#, fuzzy
-msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
-msgstr "Kas din an alioù dre Jabber/GTalk."
-
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:179
 msgid "Publish a MicroID for my Jabber/GTalk address."
@@ -2057,12 +1911,6 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "N'eo ket mat ar chomlec'h postelerezh prim."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Diposubl eo dilemel ar postel kadarnadur."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
 msgid "IM confirmation cancelled."
@@ -2121,7 +1969,7 @@ msgstr "Koumanantet oc'h dija d'an implijerien-mañ :"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2143,12 +1991,6 @@ msgid ""
 "on the site. Thanks for growing the community!"
 msgstr ""
 
-#: actions/invite.php:162
-#, fuzzy
-msgid ""
-"Use this form to invite your friends and colleagues to use this service."
-msgstr "Pediñ mignoned hag kenseurted da zont ganeoc'h war %s"
-
 #: actions/invite.php:187
 msgid "Email addresses"
 msgstr "Chomlec'hioù postel"
@@ -2217,9 +2059,7 @@ msgstr "Rankout a reoc'h bezañ luget evit mont en ur strollad."
 msgid "No nickname or ID."
 msgstr "Lesanv pe ID ebet."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s a zo bet er strollad %2$s"
@@ -2228,13 +2068,12 @@ msgstr "%1$s a zo bet er strollad %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Ret eo deoc'h bezañ kevreet evit kuitaat ur strollad"
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "N'oc'h ket un ezel eus ar strollad-mañ."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s en deus kuitaet ar strollad %2$s"
@@ -2304,11 +2143,6 @@ msgstr "N'eus nemet ur merour a c'hall lakaat un implijer all da vezañ merour."
 msgid "%1$s is already an admin for group \"%2$s\"."
 msgstr "%1$s a zo dija merour ar strollad \"%2$s\"."
 
-#: actions/makeadmin.php:133
-#, fuzzy, php-format
-msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Diposubl eo lakaat %1$s da merour ar strollad %2$s."
-
 #: actions/makeadmin.php:146
 #, php-format
 msgid "Can't make %1$s an admin for group %2$s."
@@ -2350,12 +2184,15 @@ msgstr "Implijit ar furmskrid-mañ a-benn krouiñ ur strollad nevez."
 msgid "New message"
 msgstr "Kemennadenn nevez"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Goullo eo !"
 
@@ -2363,7 +2200,8 @@ msgstr "Goullo eo !"
 msgid "No recipient specified."
 msgstr "N'o peus ket lakaet a resever."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2374,12 +2212,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Kemennadenn kaset"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Kaset eo bet da %s ar gemennadenn war-eeun."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Fazi Ajax"
 
@@ -2387,20 +2227,10 @@ msgstr "Fazi Ajax"
 msgid "New notice"
 msgstr "Ali nevez"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Ali embannet"
 
-#: actions/noticesearch.php:68
-#, fuzzy, php-format
-msgid ""
-"Search for notices on %%site.name%% by their contents. Separate search terms "
-"by spaces; they must be 3 characters or more."
-msgstr ""
-"Klask tud e %%site.name%% dre o anv, o lec'hiadur pe o diduadennoù. "
-"Dispartiañ termenoù ar c'hlask gant esaouennoù. Ret eo e vefe da nebeutañ 3 "
-"arouezenn."
-
 #: actions/noticesearch.php:78
 msgid "Text search"
 msgstr "Klask testennoù"
@@ -2417,25 +2247,11 @@ msgid ""
 "status_textarea=%s)!"
 msgstr ""
 
-#: actions/noticesearch.php:124
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%%%action.register%%%%) and be the first to "
-"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
-msgstr ""
-"Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
-"gentañ da embann un dra !"
-
 #: actions/noticesearchrss.php:96
 #, php-format
 msgid "Updates with \"%s\""
 msgstr "Hizivadenn gant \"%s\""
 
-#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
-msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Hizivadennoù merket gant %1$s e %2$s !"
-
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
@@ -2483,11 +2299,6 @@ msgstr "N'oc'h ket un implijer eus ar poellad-mañ."
 msgid "Unable to revoke access for app: %s."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:198
-#, fuzzy
-msgid "You have not authorized any applications to use your account."
-msgstr "N'o peus enrollet poellad ebet evit poent."
-
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
@@ -2513,13 +2324,6 @@ msgstr ""
 msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
-#. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
-#, fuzzy
-msgid "Not a supported data format."
-msgstr "Diembreget eo ar furmad-se."
-
 #: actions/opensearch.php:64
 msgid "People Search"
 msgstr "Klask tud"
@@ -2548,44 +2352,14 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Design ar profil"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr "Diskouez pe kuzhat designoù ar profil."
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Re hir eo ar yezh (255 arouezenn d'ar muiañ)."
-
 #: actions/otp.php:69
 msgid "No user ID specified."
 msgstr "N'eus bet diferet ID implijer ebet."
 
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "N'eus bet diferet ali ebet."
-
-#: actions/otp.php:90
-#, fuzzy
-msgid "No login token requested."
-msgstr "N'eus profil ID ebet er reked."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Fichenn direizh."
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "Kevreañ d'al lec'hienn"
-
 #: actions/outbox.php:58
 #, php-format
 msgid "Outbox for %1$s - page %2$d"
@@ -2666,30 +2440,15 @@ msgstr "Ger-tremen enrollet."
 msgid "Paths"
 msgstr "Hentoù"
 
-#: actions/pathsadminpanel.php:70
-#, fuzzy
-msgid "Path and server settings for this StatusNet site."
-msgstr "Arventennoù diazez evit al lec'hienn StatusNet-mañ."
-
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
 msgstr "N'eus ket eus ar gaoz-se : %s."
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
-msgid "Avatar directory not writable: %s."
-msgstr "Restroù an avataroù"
-
-#: actions/pathsadminpanel.php:169
-#, php-format
-msgid "Background directory not writable: %s."
-msgstr ""
-
-#: actions/pathsadminpanel.php:177
 #, php-format
-msgid "Locales directory not readable: %s."
-msgstr ""
+msgid "Avatar directory not writable: %s."
+msgstr "N'eus ket eus ar gaoz-se : %s."
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2771,16 +2530,6 @@ msgstr "Backgroundoù"
 msgid "Background server"
 msgstr "Servijer ar backgroundoù"
 
-#: actions/pathsadminpanel.php:309
-#, fuzzy
-msgid "Background path"
-msgstr "Background"
-
-#: actions/pathsadminpanel.php:313
-#, fuzzy
-msgid "Background directory"
-msgstr "Servijer ar backgroundoù"
-
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
 msgstr "SSL"
@@ -2960,10 +2709,6 @@ msgstr "Re hir eo ar bio (%d arouezenn d'ar muiañ)."
 msgid "Timezone not selected."
 msgstr "N'eo bet dibabet gwerzhid-eur ebet."
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr "Re hir eo ar yezh (255 arouezenn d'ar muiañ)."
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
 msgid "Invalid tag: \"%s\""
@@ -3040,17 +2785,6 @@ msgstr ""
 "Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
 "gentañ da embann un dra !"
 
-#: actions/public.php:242
-#, fuzzy, php-format
-msgid ""
-"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
-"blogging) service based on the Free Software [StatusNet](http://status.net/) "
-"tool. [Join now](%%action.register%%) to share notices about yourself with "
-"friends, family, and colleagues! ([Read more](%%doc.help%%))"
-msgstr ""
-"%%site.name%% a zo ur servij [micro-blogging](http://br.wikipedia.org/wiki/"
-"Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)."
-
 #: actions/public.php:247
 #, php-format
 msgid ""
@@ -3258,11 +2992,6 @@ msgid ""
 "link up to friends and colleagues. "
 msgstr ""
 
-#: actions/register.php:432
-#, fuzzy
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr "1 da 64 lizherenn vihan pe sifr, hep poentaouiñ nag esaouenn"
-
 #: actions/register.php:437
 msgid "6 or more characters. Required."
 msgstr "6 arouezenn pe muioc'h. Rekis."
@@ -3446,13 +3175,6 @@ msgstr "Gwazh respontoù evit %s (RSS 2.0)"
 msgid "Replies feed for %s (Atom)"
 msgstr "Gwazh respontoù evit %s (Atom)"
 
-#: actions/replies.php:199
-#, php-format
-msgid ""
-"This is the timeline showing replies to %1$s but %2$s hasn't received a "
-"notice to them yet."
-msgstr ""
-
 #: actions/replies.php:204
 #, php-format
 msgid ""
@@ -3473,7 +3195,6 @@ msgid "Replies to %1$s on %2$s!"
 msgstr "Respontoù da %1$s war %2$s !"
 
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
 msgstr "Ne c'helloc'h ket reiñ rolloù d'an implijerien eus al lec'hienn-mañ."
 
@@ -3485,11 +3206,6 @@ msgstr "n'en deus ket an implijer-mañ ar rol-se."
 msgid "StatusNet"
 msgstr "StatusNet"
 
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Ne c'helloc'h ket reiñ rolloù d'an implijerien eus al lec'hienn-mañ."
-
 #: actions/sandbox.php:72
 msgid "User is already sandboxed."
 msgstr "Er poull-traezh emañ dija an implijer."
@@ -3613,11 +3329,6 @@ msgstr ""
 msgid "%1$s's favorite notices, page %2$d"
 msgstr "Alioù karetañ %1$s, pajenn %2$d"
 
-#: actions/showfavorites.php:132
-#, fuzzy
-msgid "Could not retrieve favorite notices."
-msgstr "Diposupl eo krouiñ ar pennroll-mañ."
-
 #: actions/showfavorites.php:171
 #, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
@@ -3728,29 +3439,6 @@ msgstr "An holl izili"
 msgid "Created"
 msgstr "Krouet"
 
-#: actions/showgroup.php:455
-#, fuzzy, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. [Join now](%%%%action.register%%%%) to become part "
-"of this group and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-"%%site.name%% a zo ur servij [micro-blogging](http://br.wikipedia.org/wiki/"
-"Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)."
-
-#: actions/showgroup.php:461
-#, fuzzy, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. "
-msgstr ""
-"%%site.name%% a zo ur servij [micro-blogging](http://br.wikipedia.org/wiki/"
-"Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)."
-
 #: actions/showgroup.php:489
 msgid "Admins"
 msgstr "Merourien"
@@ -3815,10 +3503,11 @@ msgid "FOAF for %s"
 msgstr "mignon ur mignon evit %s"
 
 #: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
 msgstr ""
-"Kronologiezh foran %%site.name%% eo, met den n'en deus skrivet tra ebet."
+"Hemañ eo al lanvad evit %s hag e vignoned met den n'en deus skrivet tra ebet "
+"evit ar mare."
 
 #: actions/showstream.php:205
 msgid ""
@@ -3833,37 +3522,11 @@ msgid ""
 "%?status_textarea=%2$s)."
 msgstr ""
 
-#: actions/showstream.php:243
-#, fuzzy, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
-"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-"%%site.name%% a zo ur servij [micro-blogging](http://br.wikipedia.org/wiki/"
-"Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)."
-
-#: actions/showstream.php:248
-#, fuzzy, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. "
-msgstr ""
-"%%site.name%% a zo ur servij [micro-blogging](http://br.wikipedia.org/wiki/"
-"Microblog) diazezet war ar meziant frank [StatusNet](http://status.net/)."
-
 #: actions/showstream.php:305
 #, php-format
 msgid "Repeat of %s"
 msgstr "Adkemeret eus %s"
 
-#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
-msgid "You cannot silence users on this site."
-msgstr "Ne c'helloc'h ket reiñ rolloù d'an implijerien eus al lec'hienn-mañ."
-
 #: actions/silence.php:72
 msgid "User is already silenced."
 msgstr "Lakaet eo bet da mut an implijer-mañ dija."
@@ -3876,11 +3539,6 @@ msgstr "Arventennoù diazez evit al lec'hienn StatusNet-mañ."
 msgid "Site name must have non-zero length."
 msgstr "Ne c'hell ket bezañ goullo anv al lec'hienn."
 
-#: actions/siteadminpanel.php:141
-#, fuzzy
-msgid "You must have a valid contact email address."
-msgstr "N'eo ket ur chomlec'h postel reizh."
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -3930,11 +3588,6 @@ msgstr "Chomlec'h postel daremprediñ ho lec'hienn"
 msgid "Local"
 msgstr "Lec'hel"
 
-#: actions/siteadminpanel.php:256
-#, fuzzy
-msgid "Default timezone"
-msgstr "Koumanantoù dre ziouer"
-
 #: actions/siteadminpanel.php:257
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
@@ -4052,12 +3705,6 @@ msgstr "Kadarnaat"
 msgid "SMS phone number"
 msgstr "Niverenn bellgomz evit an SMS"
 
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-#, fuzzy
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr "1 da 64 lizherenn vihan pe sifr, hep poentaouiñ nag esaouenn"
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
 msgid "SMS preferences"
@@ -4080,12 +3727,6 @@ msgstr "Penndibaboù an SMSoù enrollet."
 msgid "No phone number."
 msgstr "Niverenn bellgomz ebet."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-#, fuzzy
-msgid "No carrier selected."
-msgstr "Ali dilammet."
-
 #. TRANS: Message given saving SMS phone number that is already set.
 #: actions/smssettings.php:352
 msgid "That is already your phone number."
@@ -4154,25 +3795,10 @@ msgstr "N'eo bet lakaet kod ebet"
 msgid "Snapshots"
 msgstr "Prim"
 
-#: actions/snapshotadminpanel.php:65
-#, fuzzy
-msgid "Manage snapshot configuration"
-msgstr "Kefluniadur ar primoù"
-
-#: actions/snapshotadminpanel.php:127
-#, fuzzy
-msgid "Invalid snapshot run value."
-msgstr "Roll direizh."
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-#, fuzzy
-msgid "Invalid snapshot report URL."
-msgstr "URL fall evit al logo."
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4181,11 +3807,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-#, fuzzy
-msgid "Data snapshots"
-msgstr "Prim"
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4207,21 +3828,9 @@ msgid "Snapshots will be sent to this URL"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:248
-#, fuzzy
 msgid "Save snapshot settings"
 msgstr "Enrollañ arventennoù al lec'hienn"
 
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "N'hoc'h ket koumanantet da zen ebet."
-
-#. TRANS: Exception thrown when a subscription could not be stored on the server.
-#: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
-msgid "Could not save subscription."
-msgstr "Dibosupl eo dilemel ar c'houmanant."
-
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
@@ -4248,16 +3857,6 @@ msgstr "Koumanantet da %s"
 msgid "%1$s subscribers, page %2$d"
 msgstr "Koumanantet da %1$s, pajenn %2$d"
 
-#: actions/subscribers.php:63
-#, fuzzy
-msgid "These are the people who listen to your notices."
-msgstr "Heuliañ a reoc'h alioù an dud-se."
-
-#: actions/subscribers.php:67
-#, fuzzy, php-format
-msgid "These are the people who listen to %s's notices."
-msgstr "Heuliet eo alioù an den-mañ gant %s."
-
 #: actions/subscribers.php:108
 msgid ""
 "You have no subscribers. Try subscribing to people you know and they might "
@@ -4270,15 +3869,6 @@ msgid "%s has no subscribers. Want to be the first?"
 msgstr ""
 "n'ez eus den ebet koumanantet da %s. Ha c'hoant o peus bezañ an hini gentañ ?"
 
-#: actions/subscribers.php:114
-#, fuzzy, php-format
-msgid ""
-"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
-"%) and be the first?"
-msgstr ""
-"Perak ne [groufec'h ket ur gont](%%action.register%%) ha bezañ an hini "
-"gentañ da embann un dra !"
-
 #: actions/subscriptions.php:52
 #, php-format
 msgid "%s subscriptions"
@@ -4380,30 +3970,10 @@ msgstr ""
 msgid "Could not save tags."
 msgstr "Dibosupl eo enrollañ ar merkoù."
 
-#: actions/tagother.php:236
-#, fuzzy
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr "Implijit ar furmskrid-mañ evit kemmañ ho poellad."
-
-#: actions/tagrss.php:35
-#, fuzzy
-msgid "No such tag."
-msgstr "N'eus ket eus ar bajenn-se."
-
 #: actions/unblock.php:59
 msgid "You haven't blocked that user."
 msgstr "N'o peus ket stanket an implijer-mañ."
 
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Er poull-traezh emañ dija an implijer."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Lakaet eo bet da mut an implijer-mañ dija."
-
 #: actions/unsubscribe.php:77
 msgid "No profile ID in request."
 msgstr "N'eus profil ID ebet er reked."
@@ -4412,25 +3982,12 @@ msgstr "N'eus profil ID ebet er reked."
 msgid "Unsubscribed"
 msgstr "Digoumanantet"
 
-#: actions/updateprofile.php:64 actions/userauthorization.php:337
-#, fuzzy, php-format
-msgid ""
-"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr ""
-"Aotre-implijout ar menegoù \"%1$s\" ne ya ket gant aotre-implijout al "
-"lec'hienn \"%2$s\"."
-
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
 msgctxt "TITLE"
 msgid "User"
 msgstr "Implijer"
 
-#: actions/useradminpanel.php:70
-#, fuzzy
-msgid "User settings for this StatusNet site."
-msgstr "Arventennoù design evit al lec'hienn StatusNet-mañ."
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4466,22 +4023,10 @@ msgstr "Implijerien nevez"
 msgid "New user welcome"
 msgstr "Degemer an implijerien nevez"
 
-#: actions/useradminpanel.php:236
-#, fuzzy
-msgid "Welcome text for new users (Max 255 chars)."
-msgstr "Re hir eo an anv (255 arouezenn d'ar muiañ)."
-
 #: actions/useradminpanel.php:241
 msgid "Default subscription"
 msgstr "Koumanantoù dre ziouer"
 
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-"En em enskrivañ ez emgefre d'an holl re hag en em goumanant din (erbedet "
-"evit an implijerien nann-denel)"
-
 #: actions/useradminpanel.php:251
 msgid "Invitations"
 msgstr "Pedadennoù"
@@ -4490,11 +4035,6 @@ msgstr "Pedadennoù"
 msgid "Invitations enabled"
 msgstr "Pedadennoù gweredekaet"
 
-#: actions/useradminpanel.php:258
-#, fuzzy
-msgid "Whether to allow users to invite new users."
-msgstr "Ma rankomp merañ an dalc'hoù hon unan."
-
 #: actions/userauthorization.php:105
 msgid "Authorize subscription"
 msgstr "Aotreañ ar c'houmanant"
@@ -4719,12 +4259,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Ment direizh."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4740,30 +4274,11 @@ msgstr "N'eo ezel eus strollad ebet."
 msgid "Group leave failed."
 msgstr "C'hwitet eo bet an disenskrivadur d'ar strollad."
 
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Diposubl eo hizivaat ar strollad."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Diposubl eo krouiñ an aliasoù."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "Ur gudenn 'zo bet pa veze kaset ho kemennadenn."
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -4781,60 +4296,48 @@ msgstr "Dibosupl eo hizivaat ar gemennadenn gant un URI nevez."
 msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
-#. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
-msgid "Database error inserting hashtag: %s"
-msgstr "Ur fazi 'zo bet en ur ensoc'hañ an avatar"
-
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Ur gudenn a zo bet e-pad enrolladenn ar c'hemenn. Re hir."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Ur gudenn a zo bet e-pad enrolladenn ar c'hemenn. Implijer dianav."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-#, fuzzy
-msgid "You are banned from posting notices on this site."
-msgstr "Ne c'helloc'h ket reiñ rolloù d'an implijerien eus al lec'hienn-mañ."
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Ur gudenn 'zo bet pa veze enrollet an ali."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Ur gudenn 'zo bet pa veze enrollet boest degemer ar strollad."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4885,13 +4388,11 @@ msgstr "Nann-koumanantet !"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
 msgstr "Dibosupl eo dilemel ar c'houmanant."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
 msgstr "Dibosupl eo dilemel ar c'houmanant."
 
@@ -4973,12 +4474,6 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr "Pajenn hep anv"
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-#, fuzzy
-msgid "Primary site navigation"
-msgstr "Arventennoù diazez al lec'hienn"
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -5106,12 +4601,6 @@ msgstr "Selloù lec'hel"
 msgid "Page notice"
 msgstr "Ali ar bajenn"
 
-#. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
-#: lib/action.php:762
-#, fuzzy
-msgid "Secondary site navigation"
-msgstr "Arventennoù diazez al lec'hienn"
-
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
 msgid "Help"
@@ -5184,13 +4673,6 @@ msgstr ""
 msgid "Site content license"
 msgstr "Aotre-implijout diwar-benn danvez al lec'hienn"
 
-#. TRANS: Content license displayed when license is set to 'private'.
-#. TRANS: %1$s is the site name.
-#: lib/action.php:857
-#, fuzzy, php-format
-msgid "Content and data of %1$s are private and confidential."
-msgstr "Kompren a ran ez eo prevez danvez ha roadennoù %1$s."
-
 #. TRANS: Content license displayed when license is set to 'allrightsreserved'.
 #. TRANS: %1$s is the copyright owner.
 #: lib/action.php:864
@@ -5243,12 +4725,6 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Ne c'helloc'h ket reiñ rolloù d'an implijerien eus al lec'hienn-mañ."
-
 #. TRANS: Client error message throw when a certain panel's settings cannot be changed.
 #: lib/adminpanelaction.php:110
 msgid "Changes to that panel are not allowed."
@@ -5429,13 +4905,6 @@ msgstr "lenn hepken"
 msgid "Approved %1$s - \"%2$s\" access."
 msgstr "Aprouet d'an %1$s - moned \"%2$s\"."
 
-#. TRANS: Button label
-#: lib/applicationlist.php:159
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Revoke"
-msgstr "Dilemel"
-
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
 msgid "Attachments"
@@ -5455,11 +4924,6 @@ msgstr "Pourvezer"
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-#, fuzzy
-msgid "Tags for this attachment"
-msgstr "N'eo ket bet kavet ar restr stag."
-
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
 msgid "Password changing failed"
 msgstr "N'eo ket aet betek penn kemmañ ar ger-tremen"
@@ -5480,45 +4944,22 @@ msgstr "Urzhiad bet klokaet"
 msgid "Command failed"
 msgstr "C'hwitet en deus an urzhiad"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "N'eus ali ebet gant an id-mañ."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "N'eus ali nevez evit an implijer-mañ"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Dibosupl eo kavout un implijer gant al lesanv %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Dibosupl eo kavout un implijer lec'hel gant al lesanv %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Digarezit, n'eo ket bet emplementet an urzhiad-mañ c'hoazh."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 "N'eus tamm talvoudegezh ebet ober ur blinkadenn deoc'h c'hwi oc'h unan !"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Blinkadenn kaset da %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5529,55 +4970,39 @@ msgstr ""
 "Tud koumanantet : %2$s\n"
 "kemennadennoù : %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Ali bet ouzhpennet d'ar pennroll."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Ezel oc'h eus ar strollad-mañ dija."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Diposubl eo stagañ an implijer %1$s d'ar strollad %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Diposubl eo dilemel an implijer %1$s deus ar strollad %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Anv klok : %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Lec'hiadur : %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Lec'hienn Web : %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Diwar-benn : %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5586,152 +5011,72 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "Re hir eo ar gemennadenn - ar ment brasañ a zo %1$d arouezenn, %2$d "
-"arouezenn o peus lakaet"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Kaset eo bet ar gemennadenn war eeun da %s."
+"arouezenn o peus lakaet."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Ur gudenn 'zo bet pa veze kaset ho kemennadenn."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Ne c'helloc'h ket adkemer ho ali"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Ali bet adkemeret dija"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Ali adkemeret"
-
-#: lib/command.php:531
-#, fuzzy
-msgid "Error repeating notice."
-msgstr "Fazi en ur hizivaat ar profil a-bell."
-
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"Re hir eo ar gemennadenn - ar ment brasañ a zo %1$d arouezenn, %2$d "
-"arouezenn o peus lakaet"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Respont kaset da %s"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Ur gudenn 'zo bet pa veze enrollet an ali."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Koumanantet da %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Digoumanantiñ da %s"
-
-#: lib/command.php:682 lib/command.php:705
-#, fuzzy
-msgid "Command not yet implemented."
-msgstr "Digarezit, n'eo ket bet emplementet an urzhiad-mañ c'hoazh."
-
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Kemennoù diweredekaet."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Dibosupl eo diweredekaat ar c'hemennoù."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Kemennoù gweredekaet"
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Dibosupl eo gweredekaat ar c'hemennoù."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Diweredekaet eo an urzhiad evit digeriñ un dalc'h"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr "Implijadus eo al liamm-se ur wech hepken, hag e-pad 2 vunutenn : %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Digoumanantet eus %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "N'hoc'h ket koumanantet da zen ebet."
 
-#: lib/command.php:780
-#, fuzzy
-msgid "You are subscribed to this person:"
-msgid_plural "You are subscribed to these people:"
-msgstr[0] "Koumanantet oc'h dija d'an implijerien-mañ :"
-msgstr[1] "Koumanantet oc'h dija d'an implijerien-mañ :"
-
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Den n'eo koumanantet deoc'h."
 
-#: lib/command.php:802
-#, fuzzy
-msgid "This person is subscribed to you:"
-msgid_plural "These people are subscribed to you:"
-msgstr[0] "Den n'eo koumanantet deoc'h."
-msgstr[1] "Den n'eo koumanantet deoc'h."
-
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "N'oc'h ezel eus strollad ebet."
 
-#: lib/command.php:824
-#, fuzzy
-msgid "You are a member of this group:"
-msgid_plural "You are a member of these groups:"
-msgstr[0] "N'oc'h ket ezel eus ar strollad-mañ."
-msgstr[1] "N'oc'h ket ezel eus ar strollad-mañ."
-
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5805,11 +5150,6 @@ msgstr "Hizivadennoù dre SMS"
 msgid "Connections"
 msgstr "Kevreadennoù"
 
-#: lib/connectsettingsaction.php:121
-#, fuzzy
-msgid "Authorized connected applications"
-msgstr "Poeladoù kevreet."
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr "Fazi bank roadennoù"
@@ -5823,11 +5163,6 @@ msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
 msgstr ""
 
-#: lib/designsettings.php:418
-#, fuzzy
-msgid "Design defaults restored."
-msgstr "Enrollet eo bet an arventennoù design."
-
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
 msgid "Disfavor this notice"
 msgstr "Tennañ eus ar pennrolloù"
@@ -5868,11 +5203,6 @@ msgstr "Silañ ar balizennoù"
 msgid "All"
 msgstr "An holl"
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "Dibab un douger"
-
 #: lib/galleryaction.php:140
 msgid "Tag"
 msgstr "Balizenn"
@@ -5890,27 +5220,6 @@ msgstr "Mont"
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr "URL pajenn degemer ar poellad-mañ"
-
-#: lib/groupeditform.php:168
-#, fuzzy
-msgid "Describe the group or topic"
-msgstr "Deskrivit ho poellad"
-
-#: lib/groupeditform.php:170
-#, fuzzy, php-format
-msgid "Describe the group or topic in %d characters"
-msgstr "Diskrivit ho poellad gant %d arouezenn"
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "El lec'h m'emaoc'h, da skouer \"Kêr, Stad (pe Rannvro), Bro\""
-
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
@@ -5929,11 +5238,6 @@ msgstr "Stanket"
 msgid "%s blocked users"
 msgstr "%s implijer stanket"
 
-#: lib/groupnav.php:108
-#, fuzzy, php-format
-msgid "Edit %s group properties"
-msgstr "Kemmañ ar strollad  %s"
-
 #: lib/groupnav.php:113
 msgid "Logo"
 msgstr "Logo"
@@ -5943,16 +5247,6 @@ msgstr "Logo"
 msgid "Add or edit %s logo"
 msgstr "Ouzhpennañ pe kemmañ logo %s"
 
-#: lib/groupnav.php:120
-#, fuzzy, php-format
-msgid "Add or edit %s design"
-msgstr "Ouzhpennañ pe kemmañ logo %s"
-
-#: lib/groupsbymemberssection.php:71
-#, fuzzy
-msgid "Groups with most members"
-msgstr "Ezel eo %s eus ar strolladoù"
-
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
 msgstr ""
@@ -5967,21 +5261,6 @@ msgstr ""
 msgid "This page is not available in a media type you accept"
 msgstr ""
 
-#: lib/imagefile.php:72
-#, fuzzy
-msgid "Unsupported image file format."
-msgstr "Diembreget eo ar furmad-se."
-
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Re hir eo ! Ment hirañ an ali a zo a %d arouezenn."
-
-#: lib/imagefile.php:93
-#, fuzzy
-msgid "Partial upload."
-msgstr "N'eus bet enporzhiet restr ebet."
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -6011,11 +5290,6 @@ msgstr "Ko"
 msgid "[%s]"
 msgstr "[%s]"
 
-#: lib/jabber.php:567
-#, fuzzy, php-format
-msgid "Unknown inbox source %d."
-msgstr "Yezh \"%s\" dizanv."
-
 #: lib/joinform.php:114
 msgid "Join"
 msgstr "Stagañ"
@@ -6024,11 +5298,6 @@ msgstr "Stagañ"
 msgid "Leave"
 msgstr "Kuitaat"
 
-#: lib/logingroupnav.php:80
-#, fuzzy
-msgid "Login with a username and password"
-msgstr "Kevreit gant ho anv implijer hag ho ker-tremen."
-
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
 msgstr "Digeriñ ur gont nevez"
@@ -6056,12 +5325,6 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#. TRANS: Subject of new-subscriber notification e-mail
-#: lib/mail.php:243
-#, fuzzy, php-format
-msgid "%1$s is now listening to your notices on %2$s."
-msgstr "Ne heuilh %s den ebet."
-
 #: lib/mail.php:248
 #, php-format
 msgid ""
@@ -6085,12 +5348,6 @@ msgid ""
 "Change your email address or notification options at %8$s\n"
 msgstr ""
 
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "Lec'hiadur : %s"
-
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
 #, php-format
@@ -6122,12 +5379,6 @@ msgstr "Statud %s"
 msgid "SMS confirmation"
 msgstr "Kadarnadur SMS"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Niverenn pellgomz o c'hortoz bezañ kadarnaet."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6177,12 +5428,6 @@ msgid ""
 "%5$s\n"
 msgstr ""
 
-#. TRANS: Subject for favorite notification email
-#: lib/mail.php:589
-#, fuzzy, php-format
-msgid "%s (@%s) added your notice as a favorite"
-msgstr "Kas din ur postel pa lak unan bennak unan eus va alioù evel pennroll."
-
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
 #, php-format
@@ -6250,11 +5495,6 @@ msgid ""
 "P.S. You can turn off these email notifications here: %8$s\n"
 msgstr ""
 
-#: lib/mailbox.php:89
-#, fuzzy
-msgid "Only the user can read their own mailboxes."
-msgstr "N'eus nemet an implijerien kevreet hag a c'hell adkemer alioù."
-
 #: lib/mailbox.php:139
 msgid ""
 "You have no private messages. You can send private message to engage other "
@@ -6265,30 +5505,10 @@ msgstr ""
 msgid "from"
 msgstr "eus"
 
-#: lib/mailhandler.php:37
-#, fuzzy
-msgid "Could not parse message."
-msgstr "Diposubl eo ensoc'hañ ur gemenadenn"
-
 #: lib/mailhandler.php:42
 msgid "Not a registered user."
 msgstr "N'eo ket un implijer enrollet."
 
-#: lib/mailhandler.php:46
-#, fuzzy
-msgid "Sorry, that is not your incoming email address."
-msgstr "N'eo ket ho postel."
-
-#: lib/mailhandler.php:50
-#, fuzzy
-msgid "Sorry, no incoming email allowed."
-msgstr "Chomlec'h postel ebet o tont."
-
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Diembreget eo ar furmad-se."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6327,11 +5547,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
-msgid "Could not determine file's MIME type."
-msgstr "Diposubl eo termeniñ an implijer mammenn."
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6350,12 +5565,7 @@ msgstr "Kas ur gemennadenn war-eeun"
 msgid "To"
 msgstr "Da"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "6 arouezenn pe muioc'h"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Kas"
@@ -6364,28 +5574,28 @@ msgstr "Kas"
 msgid "Send a notice"
 msgstr "Kas un ali"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Penaos 'mañ kont, %s ?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Stagañ"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Stagañ ur restr"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Rannañ va lec'hiadur."
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Chom hep rannañ va lec'hiadur."
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6420,6 +5630,10 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "e"
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "en amdro"
@@ -6460,25 +5674,10 @@ msgstr "Ur fazi 'zo bet en ur ensoc'hañ ar profil nevez"
 msgid "Error inserting avatar"
 msgstr "Ur fazi 'zo bet en ur ensoc'hañ an avatar"
 
-#: lib/oauthstore.php:306
-#, fuzzy
-msgid "Error updating remote profile"
-msgstr "Fazi en ur hizivaat ar profil a-bell."
-
-#: lib/oauthstore.php:311
-#, fuzzy
-msgid "Error inserting remote profile"
-msgstr "Ur fazi 'zo bet en ur ensoc'hañ ar profil nevez"
-
 #: lib/oauthstore.php:345
 msgid "Duplicate notice"
 msgstr "Eilañ an ali"
 
-#: lib/oauthstore.php:490
-#, fuzzy
-msgid "Couldn't insert new subscription."
-msgstr "Dibosupl eo dilemel ar c'houmanant."
-
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr "Hiniennel"
@@ -6507,11 +5706,6 @@ msgstr "Boest kas"
 msgid "Your sent messages"
 msgstr "Ar c'hemenadennoù kaset ganeoc'h"
 
-#: lib/personaltagcloudsection.php:56
-#, fuzzy, php-format
-msgid "Tags in %s's notices"
-msgstr "N'eus ali nevez evit an implijer-mañ"
-
 #: lib/plugin.php:115
 msgid "Unknown"
 msgstr "Dianav"
@@ -6565,20 +5759,10 @@ msgstr "Strolladoù implijerien"
 msgid "Recent tags"
 msgstr "Merkoù nevez"
 
-#: lib/publicgroupnav.php:88
-#, fuzzy
-msgid "Featured"
-msgstr "Krouet"
-
 #: lib/publicgroupnav.php:92
 msgid "Popular"
 msgstr "Poblek"
 
-#: lib/redirectingaction.php:95
-#, fuzzy
-msgid "No return-to arguments."
-msgstr "Arguzenn ID ebet."
-
 #: lib/repeatform.php:107
 msgid "Repeat this notice?"
 msgstr "Adkregiñ gant an ali-mañ ?"
@@ -6591,11 +5775,6 @@ msgstr "Ya"
 msgid "Repeat this notice"
 msgstr "Adkregiñ gant an ali-mañ"
 
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "Stankañ an implijer-mañ eus ar strollad-se"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
@@ -6604,11 +5783,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr "Poull-traezh"
 
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Distankañ an implijer-mañ"
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr "Klask el lec'hienn"
@@ -6653,21 +5827,6 @@ msgstr "Muioc'h..."
 msgid "Silence"
 msgstr "Didrouz"
 
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "Diverkañ an implijer-mañ"
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "Koumanantet da %s"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "Koumanantet da %s"
-
 #: lib/subgroupnav.php:99
 #, php-format
 msgid "Groups %s is a member of"
@@ -6677,11 +5836,6 @@ msgstr "Ezel eo %s eus ar strolladoù"
 msgid "Invite"
 msgstr "Pediñ"
 
-#: lib/subgroupnav.php:106
-#, fuzzy, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "Pediñ mignoned hag kenseurted da zont ganeoc'h war %s"
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -6704,13 +5858,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Ur gudenn 'zo bet e-pad hizivadenn an avatar."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6735,35 +5882,10 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Fazi en ur hizivaat ar profil a-bell."
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr "An implijerien an efedusañ"
 
-#: lib/unsandboxform.php:69
-#, fuzzy
-msgid "Unsandbox"
-msgstr "Poull-traezh"
-
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Distankañ an implijer-mañ"
-
-#: lib/unsilenceform.php:67
-#, fuzzy
-msgid "Unsilence"
-msgstr "Didrouz"
-
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Distankañ an implijer-mañ"
-
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr "En em zigoumanantiñ eus an implijer-mañ"
@@ -6772,11 +5894,6 @@ msgstr "En em zigoumanantiñ eus an implijer-mañ"
 msgid "Unsubscribe"
 msgstr "Digoumanantiñ"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "An implijer-mañ n'eus profil ebet dezhañ."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Kemmañ an Avatar"
@@ -6824,56 +5941,56 @@ msgid "Moderator"
 msgstr "Habasker"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "un nebeud eilennoù zo"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "1 vunutenn zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "%d munutenn zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "1 eurvezh zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "%d eurvezh zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "1 devezh zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "%d devezh zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "miz zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "%d miz zo well-wazh"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "bloaz zo well-wazh"
 
@@ -6886,10 +6003,3 @@ msgstr "n'eo ket %s ul liv reizh !"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "N'eo ket %s ul liv reizh ! Implijit 3 pe 6 arouezenn heksdekvedennel."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Re hir eo ar gemennadenn - ar ment brasañ a zo %1$d arouezenn, %2$d "
-"arouezenn o peus lakaet."
index d7de3b4d6b24f8e3630c6fbd9f31b07c4e4ae4a8..abf54ddc622c85659482a24f56978f0556fce474 100644 (file)
@@ -11,12 +11,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:12+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:14+0000\n"
 "Language-Team: Catalan\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ca\n"
 "X-Message-Group: out-statusnet\n"
@@ -93,6 +93,7 @@ msgstr "Desa"
 msgid "No such page."
 msgstr "No existeix la pàgina."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -112,7 +113,7 @@ msgstr "No existeix la pàgina."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "No existeix l'usuari."
@@ -171,23 +172,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Podeu provar d'[avisar %1$s](../%2$s) des del seu perfil o [publiqueu "
-"quelcom per cridar-li l'atenció](%%%%action.newnotice%%%%?status_textarea=%3"
-"$s)."
+"Sigueu el primer en [enviar sobre aquest tema](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"Per què no [registreu un compte](%%%%action.register%%%%) i aviseu %s o "
-"publiqueu un avís a la seva atenció."
+"Per què no hi [registreu un compte](%%action.register%%) i sou el primer en "
+"escriure'n un!"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -356,7 +356,8 @@ msgstr "No s'ha trobat cap estat amb aquest ID."
 msgid "This status is already a favorite."
 msgstr "Aquest estat ja és un preferit."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "No es pot crear el preferit."
 
@@ -369,9 +370,8 @@ msgid "Could not delete favorite."
 msgstr "No s'ha pogut eliminar el preferit."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "No s'ha pogut seguir l'usuari: l'usuari no existeix."
+msgstr "No es pot deixar de seguir l'usuari: no s'ha trobat l'usuari."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -387,9 +387,8 @@ msgid "You cannot unfollow yourself."
 msgstr "No podeu deixar de seguir-vos a un mateix."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Cal proporcionar dos ids d'usuari o screen_names."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -472,15 +471,19 @@ msgstr "L'àlies no pot ser el mateix que el sobrenom."
 msgid "Group not found."
 msgstr "No s'ha trobat el grup."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Ja sou membre del grup."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "L'administrador us ha blocat del grup."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "No s'ha pogut afegir l'usuari %1$s al grup %2$s."
@@ -489,7 +492,10 @@ msgstr "No s'ha pogut afegir l'usuari %1$s al grup %2$s."
 msgid "You are not a member of this group."
 msgstr "No sou un membre del grup."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "No s'ha pogut eliminar l'usuari %1$s del grup %2$s."
@@ -519,9 +525,8 @@ msgid "groups on %s"
 msgstr "grups sobre %s"
 
 #: actions/apimediaupload.php:99
-#, fuzzy
 msgid "Upload failed."
-msgstr "Puja un fitxer"
+msgstr "La pujada ha fallat."
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
@@ -652,11 +657,13 @@ msgstr "No podeu eliminar l'estat d'un altre usuari."
 msgid "No such notice."
 msgstr "No existeix aquest avís."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "No podeu repetir els vostres propis avisos."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Avís duplicat."
 
@@ -670,9 +677,9 @@ msgstr "No s'ha trobat cap estatus amb la ID trobada."
 
 #: actions/apistatusesupdate.php:221
 msgid "Client must provide a 'status' parameter with a value."
-msgstr ""
+msgstr "El client ha de proporcionar un paràmetre 'status' amb un valor."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -682,7 +689,7 @@ msgstr "Massa llarg. La longitud màxima és de %d caràcters."
 msgid "Not found."
 msgstr "No s'ha trobat."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "La mida màxima de l'avís és %d caràcters, incloent l'URL de l'adjunt."
@@ -798,7 +805,7 @@ msgid "Preview"
 msgstr "Vista prèvia"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Elimina"
 
@@ -893,6 +900,8 @@ msgstr "Bloca aquest usuari"
 msgid "Failed to save block information."
 msgstr "No s'ha pogut desar la informació del bloc."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -902,8 +911,8 @@ msgstr "No s'ha pogut desar la informació del bloc."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "No s'ha trobat el grup."
 
@@ -1081,7 +1090,7 @@ msgid "Do not delete this notice"
 msgstr "No eliminis aquest avís"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Elimina aquest avís"
 
@@ -2174,7 +2183,7 @@ msgstr "Ja estàs subscrit a aquests usuaris:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2297,9 +2306,7 @@ msgstr "Heu d'haver iniciat una sessió per unir-vos a un grup."
 msgid "No nickname or ID."
 msgstr "Cap sobrenom o ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s s'ha unit al grup %2$s"
@@ -2308,13 +2315,12 @@ msgstr "%1$s s'ha unit al grup %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Heu d'haver iniciat una sessió per deixar un grup."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "No ets membre d'aquest grup."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s ha abandonat el grup %2$s"
@@ -2430,12 +2436,15 @@ msgstr "Utilitza aquest formulari per crear un nou grup."
 msgid "New message"
 msgstr "Nou missatge"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "No podeu enviar un misssatge a aquest usuari."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Cap contingut!"
 
@@ -2443,7 +2452,8 @@ msgstr "Cap contingut!"
 msgid "No recipient specified."
 msgstr "No has especificat el destinatari."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "No t'enviïs missatges a tu mateix, simplement dir-te això."
@@ -2452,12 +2462,14 @@ msgstr "No t'enviïs missatges a tu mateix, simplement dir-te això."
 msgid "Message sent"
 msgstr "S'ha enviat el missatge"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "S'ha enviat un missatge directe a %s."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax Error"
 
@@ -2465,7 +2477,7 @@ msgstr "Ajax Error"
 msgid "New notice"
 msgstr "Nou avís"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "S'ha publicat l'avís"
 
@@ -2517,12 +2529,9 @@ msgstr ""
 "Les actualitzacions que coincideixen amb el terme de cerca «%1$s» el %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Aquest usuari no permet que li cridin l'atenció o no ha confirmat encara cap "
-"correu electrònic."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2598,8 +2607,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Si us plau, només URL %s sobre HTTP pla."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Format de data no suportat."
 
@@ -3517,7 +3526,7 @@ msgstr "No podeu repetir el vostre propi avís."
 msgid "You already repeated that notice."
 msgstr "Ja havíeu repetit l'avís."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Repetit"
 
@@ -3552,13 +3561,12 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Canal de respostes de %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
 msgstr ""
-"Aquesta és la línia temporal que mostra les respostes a %1$s, però %2$s "
-"encara no ha rebut cap avís a la seva atenció."
+"Aquesta és la línia temporal de %1$s, però %2$s no hi ha enviat res encara."
 
 #: actions/replies.php:204
 #, php-format
@@ -3570,13 +3578,13 @@ msgstr ""
 "[uniu-vos a grups](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Podeu provar d'[avisar %1$s](../%2$s) o [enviar quelcom per cridar-li "
-"l'atenció](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+"Sigueu el primer en [enviar sobre aquest tema](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3751,25 +3759,15 @@ msgstr ""
 "No heu triat cap avís preferit encara. Feu clic al botó de preferit dels "
 "avisos que us agraden per arxivar-los per a més endavant i fer-los conèixer."
 
-#: actions/showfavorites.php:208
-#, fuzzy, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Post something interesting they "
-"would add to their favorites :)"
-msgstr ""
-"%s no ha afegit cap avís als seus preferits encara. Envieu quelcom "
-"interessant que pugui afegir-hi."
-
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s no ha afegit cap avís als seus preferits encara. Per què no [registreu un "
-"compte](%%%%action.register%%%%) i llavors envieu quelcom interessant que "
-"pugui afegir-hi."
+"Per què no [registreu un compte](%%action.register%%) i sou el primer en "
+"afegir un avís als vostres preferits!"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3950,13 +3948,13 @@ msgstr ""
 "podria ser un bon moment per començar :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Podeu provar d'avisar %1$s o [enviar quelcom per cridar-li l'atenció](%%%%"
-"action.newnotice%%%%?status_textarea=%2$s)."
+"Sigueu el primer en [enviar sobre aquest tema](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/showstream.php:243
 #, php-format
@@ -4841,23 +4839,23 @@ msgstr "Autoria"
 #: classes/File.php:143
 #, php-format
 msgid "Cannot process URL '%s'"
-msgstr ""
+msgstr "No es pot processar l'URL «%s»"
 
 #. TRANS: Server exception thrown when... Robin thinks something is impossible!
 #: classes/File.php:175
 msgid "Robin thinks something is impossible."
-msgstr ""
+msgstr "El Robin pensa que quelcom és impossible."
 
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
 #: classes/File.php:190
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
-"Cap fitxer pot ser major de %d bytes i el fitxer que heu enviat era de %d "
-"bytes. Proveu de pujar una versió de mida menor."
+"Cap fitxer pot ser major de %1$d bytes i el fitxer que heu enviat era de %2"
+"$d bytes. Proveu de pujar una versió de mida menor."
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
@@ -4877,9 +4875,8 @@ msgstr ""
 
 #. TRANS: Client exception thrown if a file upload does not have a valid name.
 #: classes/File.php:248 classes/File.php:263
-#, fuzzy
 msgid "Invalid filename."
-msgstr "La mida no és vàlida."
+msgstr "El nom del fitxer no és vàlid."
 
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
@@ -4911,7 +4908,7 @@ msgstr "No s'ha pogut crear un testimoni d'inici de sessió per a %s"
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
-msgstr ""
+msgstr "No s'ha trobat el nom de la base de dades o el DSN enlloc."
 
 #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
 #: classes/Message.php:46
@@ -4933,10 +4930,10 @@ msgstr "No s'ha pogut inserir el missatge amb la nova URI."
 #: classes/Notice.php:98
 #, php-format
 msgid "No such profile (%1$d) for notice (%2$d)."
-msgstr ""
+msgstr "No hi ha cap perfil (%1$d) per a l'avís (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr ""
@@ -4944,24 +4941,24 @@ msgstr ""
 "coixinet (%): %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "S'ha produït un problema en desar l'avís. És massa llarg."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "S'ha produït un problema en desar l'avís. Usuari desconegut."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "Massa avisos massa ràpid; pren un respir i publica de nou en uns minuts."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4970,29 +4967,29 @@ msgstr ""
 "enviar en uns minuts."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Ha estat bandejat de publicar avisos en aquest lloc."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "S'ha produït un problema en desar l'avís."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
-msgstr ""
+msgstr "S'ha proporcionat un tipus incorrecte per a saveKnownGroups"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "S'ha produït un problema en desar la safata d'entrada del grup."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5002,7 +4999,7 @@ msgstr "RT @%1$s %2$s"
 #: classes/Profile.php:737
 #, php-format
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
-msgstr ""
+msgstr "No es pot revocar el rol «%1$s» de l'usuari #%2$d; no existeix."
 
 #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5010,18 +5007,18 @@ msgstr ""
 #, php-format
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
+"No es pot revocar el rol «%1$s» de l'usuari #%2$d; s'ha produït un error en "
+"la base de dades."
 
 #. TRANS: Exception thrown when a right for a non-existing user profile is checked.
 #: classes/Remote_profile.php:54
-#, fuzzy
 msgid "Missing profile."
-msgstr "L'usuari no té perfil."
+msgstr "Manca el perfil."
 
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "No s'ha pogut desar l'avís del lloc."
+msgstr "No s'ha pogut desar l'etiqueta."
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
@@ -5045,19 +5042,16 @@ msgstr "No hi esteu subscrit!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
 msgstr "No s'ha pogut eliminar l'autosubscripció."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
 msgstr "No s'ha pogut eliminar el testimoni OMB de la subscripció."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
 msgstr "No s'ha pogut eliminar la subscripció."
 
@@ -5651,44 +5645,21 @@ msgstr "Comanda completada"
 msgid "Command failed"
 msgstr "Comanda fallida"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "No existeix cap avís amb aquest identificador."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "L'usuari no té última nota"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "No s'ha pogut trobar un usuari amb el sobrenom %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "No s'ha pogut trobar a un usuari local amb el sobrenom %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Perdona, aquesta comanda no està implementada."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "No té massa sentit avisar-se a un mateix!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "S'ha cridat l'atenció a %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5699,55 +5670,39 @@ msgstr ""
 "Subscriptors: %2$s\n"
 "Avisos: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "L'avís està marcat com a preferit."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Ja sou membre del grup."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "No s'ha pogut afegir l'usuari %1$s al grup %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "No s'ha pogut eliminar l'usuari %1$s del grup %2$s."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nom complet: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Localització: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Pàgina web: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Informació personal: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5758,145 +5713,103 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
-"El missatge és massa llarg - el màxim és %1$d caràcters, i n'heu enviat %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Missatge directe a %s enviat"
+"El missatge és massa llarg - el màxim és %1$d caràcters, i n'heu enviat %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "S'ha produït un error en enviar el missatge directe."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "No es pot repetir el vostre propi avís"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Ja s'ha repetit l'avís"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "S'ha repetit l'avís de %s"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "S'ha produït un error en repetir l'avís."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "L'avís és massa llarg - el màxim és %d caràcters, i n'heu enviat %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "S'ha enviat la resposta a %s"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "S'ha produït un error en desar l'avís."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Especifiqueu el nom de l'usuari al qual voleu subscriure-us"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "No es pot subscriure a perfils de OMB amb ordres."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Subscrit a %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Especifiqueu el nom de l'usuari de qui voleu cancel·lar la subscripció"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Heu cancel·lat la subscripció a %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Comanda encara no implementada."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Avisos desactivats."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "No es poden desactivar els avisos."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Avisos activitats."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "No es poden activar els avisos."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "L'ordre d'inici de sessió està inhabilitada"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"L'enllaç només es pot fer servir una vegada, i només funciona durant 2 "
-"minuts: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "S'ha cancel·lat la subscripció de %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "No esteu subscrit a ningú."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Ja estàs subscrit a aquests usuaris:"
 msgstr[1] "Ja estàs subscrit a aquests usuaris:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Ningú no us ha subscrit."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "No pots subscriure a un altre a tu mateix."
 msgstr[1] "No pots subscriure a un altre a tu mateix."
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "No sou membre de cap grup."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Sou un membre d'aquest grup:"
 msgstr[1] "Sou un membre d'aquests grups:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6556,7 +6469,7 @@ msgstr ""
 "usuaris en la conversa. La gent pot enviar-vos missatges només per als "
 "vostres ulls."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "de"
 
@@ -6647,11 +6560,11 @@ msgstr "Envia un avís directe"
 msgid "To"
 msgstr "A"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caràcters disponibles"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Envia"
@@ -6660,28 +6573,28 @@ msgstr "Envia"
 msgid "Send a notice"
 msgstr "Envia un avís"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Què tal, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Adjunta"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Adjunta un fitxer"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Comparteix la meva ubicació"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "No comparteixis la meva ubicació"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6718,23 +6631,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "a"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "en context"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Repetit per"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "respondre a aquesta nota"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Respon"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Avís repetit"
 
@@ -7060,11 +6977,6 @@ msgstr "Cancel·la la subscripció d'aquest usuari"
 msgid "Unsubscribe"
 msgstr "Cancel·la la subscripció"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "L'usuari %s (%d) no té un registre de perfil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Edita l'avatar"
@@ -7112,56 +7024,56 @@ msgid "Moderator"
 msgstr "Moderador"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "fa pocs segons"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "fa un minut"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "fa %d minuts"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "fa una hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "fa %d hores"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "fa un dia"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "fa %d dies"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "fa un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "fa %d mesos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "fa un any"
 
@@ -7174,9 +7086,3 @@ msgstr "%s no és un color vàlid!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s no és un color vàlid! Feu servir 3 o 6 caràcters hexadecimals."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"El missatge és massa llarg - el màxim és %1$d caràcters, i n'heu enviat %2$d."
index 8df43a78906ecead6cb0c1e68c02b50f9ec5ff32..77cd2ee92e4e62e6939ac69937dcb04009627531 100644 (file)
@@ -9,48 +9,27 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:14+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:16+0000\n"
 "Language-Team: Czech\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: cs\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n< =4) ? 1 : 2 ;\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "Přijmout"
-
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
-#, fuzzy
 msgid "Site access settings"
-msgstr "Nastavení"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "Registrovat"
+msgstr "Nastavené Profilu"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "Soukromí"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
@@ -68,35 +47,16 @@ msgstr ""
 
 #. TRANS: Checkbox label for disabling new user registrations.
 #: actions/accessadminpanel.php:185
-#, fuzzy
 msgid "Closed"
-msgstr "Žádný takový uživatel."
-
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Nastavení"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Uložit"
+msgstr ""
 
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "Žádné takové oznámení."
+msgstr "Žádný takový uživatel."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -116,17 +76,11 @@ msgstr "Žádné takové oznámení."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Žádný takový uživatel."
 
-#. TRANS: Page title. %1$s is user nickname, %2$d is page number
-#: actions/all.php:90
-#, fuzzy, php-format
-msgid "%1$s and friends, page %2$d"
-msgstr "%s a přátelé"
-
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
 #. TRANS: Message is used as link title. %s is a user nickname.
@@ -139,21 +93,15 @@ msgstr "%s a přátelé"
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:107
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "Feed přítel uživatele: %s"
+msgstr ""
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:116
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "Feed přítel uživatele: %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, fuzzy, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr "Feed přítel uživatele: %s"
+msgstr ""
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
@@ -184,12 +132,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-#, fuzzy
-msgid "You and friends"
-msgstr "%s a přátelé"
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -198,32 +140,6 @@ msgstr "%s a přátelé"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr ""
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Potvrzující kód nebyl nalezen"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -244,11 +160,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Nelze aktualizovat uživatele"
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -259,11 +170,6 @@ msgstr "Nelze aktualizovat uživatele"
 msgid "User has no profile."
 msgstr "Uživatel nemá profil."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Nelze uložit profil"
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -286,25 +192,6 @@ msgstr ""
 msgid "Unable to save your design settings."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Nelze aktualizovat uživatele"
-
-#: actions/apiblockcreate.php:105
-#, fuzzy
-msgid "You cannot block yourself!"
-msgstr "Nelze aktualizovat uživatele"
-
-#: actions/apiblockcreate.php:126
-msgid "Block user failed."
-msgstr ""
-
-#: actions/apiblockdestroy.php:114
-msgid "Unblock user failed."
-msgstr ""
-
 #: actions/apidirectmessage.php:89
 #, php-format
 msgid "Direct messages from %s"
@@ -329,15 +216,6 @@ msgstr ""
 msgid "No message text!"
 msgstr ""
 
-#: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
-msgid "That's too long. Max message size is %d chars."
-msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-
-#: actions/apidirectmessagenew.php:138
-msgid "Recipient user not found."
-msgstr ""
-
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
@@ -347,15 +225,6 @@ msgstr ""
 msgid "No status found with that ID."
 msgstr ""
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Toto je již vaše Jabber"
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
-msgid "Could not create favorite."
-msgstr ""
-
 #: actions/apifavoritedestroy.php:123
 msgid "That status is not a favorite."
 msgstr ""
@@ -365,39 +234,17 @@ msgid "Could not delete favorite."
 msgstr "Nelze smazat oblíbenou položku."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Nelze přesměrovat na server: %s"
-
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
-msgid "Could not unfollow user: User not found."
-msgstr "Nelze přesměrovat na server: %s"
+msgstr "Nelze uložit profil"
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Nelze aktualizovat uživatele"
+msgstr ""
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-#, fuzzy
-msgid "Could not determine source user."
-msgstr "Nelze aktualizovat uživatele"
-
-#: actions/apifriendshipsshow.php:142
-#, fuzzy
-msgid "Could not find target user."
-msgstr "Nelze aktualizovat uživatele"
-
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
 #: actions/register.php:212
@@ -431,9 +278,9 @@ msgstr "Jméno je moc dlouhé (maximální délka je 255 znaků)"
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
+msgstr "Umístění příliš dlouhé (maximálně %d znaků)"
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -448,15 +295,9 @@ msgid "Too many aliases! Maximum %d."
 msgstr ""
 
 #: actions/apigroupcreate.php:267
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\"."
-msgstr "Neplatná adresa '%s'"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Přezdívku již někdo používá. Zkuste jinou"
+msgstr "Neplatná velikost"
 
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
@@ -466,51 +307,29 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "Žádný požadavek nebyl nalezen!"
+msgstr "Potvrzující kód nebyl nalezen"
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
-msgstr "Již jste přihlášen"
+msgstr "Neodeslal jste nám profil"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr ""
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s."
-msgstr "Nelze přesměrovat na server: %s"
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "Neodeslal jste nám profil"
-
-#: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s."
-msgstr "Nelze vytvořit OpenID z: %s"
-
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "%s's groups"
-msgstr "Profil"
+msgstr "Upravit %s skupinu"
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Neodeslal jste nám profil"
-
-#. TRANS: Message is used as a title. %s is a site name.
-#. TRANS: Message is used as a page title. %s is a nick name.
-#: actions/apigrouplistall.php:92 actions/usergroups.php:63
 #, php-format
-msgid "%s groups"
+msgid "%1$s groups %2$s is a member of."
 msgstr ""
 
 #: actions/apigrouplistall.php:96
@@ -518,20 +337,10 @@ msgstr ""
 msgid "groups on %s"
 msgstr ""
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Upload"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Neplatná velikost"
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -550,21 +359,6 @@ msgstr "Neplatná velikost"
 msgid "There was a problem with your session token. Try again, please."
 msgstr ""
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Neplatné jméno nebo heslo"
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Chyba nastavení uživatele"
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Chyba v DB při vkládání odpovědi: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -605,12 +399,6 @@ msgid ""
 "give access to your %4$s account to third parties you trust."
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to user settings
-#: actions/apioauthauthorize.php:310 lib/action.php:450
-#, fuzzy
-msgid "Account"
-msgstr "O nás"
-
 #: actions/apioauthauthorize.php:313 actions/login.php:252
 #: actions/profilesettings.php:106 actions/register.php:431
 #: actions/showgroup.php:245 actions/tagother.php:94
@@ -625,11 +413,6 @@ msgstr "Přezdívka"
 msgid "Password"
 msgstr "Heslo"
 
-#: actions/apioauthauthorize.php:328
-#, fuzzy
-msgid "Deny"
-msgstr "Vzhled"
-
 #: actions/apioauthauthorize.php:334
 msgid "Allow"
 msgstr ""
@@ -651,20 +434,19 @@ msgstr ""
 msgid "No such notice."
 msgstr "Žádné takové oznámení."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
-msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
+msgstr "Toto oznámení nelze odstranit."
 
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "Odstranit toto oznámení"
+msgstr "Toto oznámení nelze odstranit."
 
 #: actions/apistatusesshow.php:139
-#, fuzzy
 msgid "Status deleted."
-msgstr "Obrázek nahrán"
+msgstr "Avatar smazán."
 
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
@@ -674,85 +456,39 @@ msgstr ""
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, fuzzy, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-
-#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
-#, fuzzy
-msgid "Not found."
-msgstr "Žádný požadavek nebyl nalezen!"
-
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "Nepodporovaný formát obrázku."
-
-#: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%1 statusů na %2"
-
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "Mikroblog od %s"
-
-#: actions/apitimelinementions.php:118
-#, fuzzy, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1 statusů na %2"
+msgstr ""
 
 #: actions/apitimelinementions.php:131
 #, php-format
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
 msgstr ""
 
-#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
-#, php-format
-msgid "%s public timeline"
-msgstr ""
-
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
 msgstr ""
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "Odpovědi na %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "Odpovědi na %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr ""
 
 #: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
+#, php-format
 msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Mikroblog od %s"
-
-#: actions/apitrends.php:87
-msgid "API method under construction."
 msgstr ""
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "Žádný takový dokument."
+msgstr "Žádné takové oznámení."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -775,36 +511,18 @@ msgstr "Neplatná velikost"
 msgid "Avatar"
 msgstr "Obrázek"
 
-#: actions/avatarsettings.php:78
-#, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
-
-#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
-#: actions/grouplogo.php:181 actions/remotesubscribe.php:191
-#: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
-msgid "User without matching profile."
-msgstr "Uživatel nemá profil."
-
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
-#, fuzzy
 msgid "Avatar settings"
-msgstr "Nastavení"
+msgstr "Nastavené Profilu"
 
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:202 actions/grouplogo.php:262
 msgid "Original"
 msgstr ""
 
-#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
-#: actions/grouplogo.php:213 actions/grouplogo.php:274
-msgid "Preview"
-msgstr ""
-
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Odstranit"
 
@@ -812,15 +530,6 @@ msgstr "Odstranit"
 msgid "Upload"
 msgstr "Upload"
 
-#: actions/avatarsettings.php:231 actions/grouplogo.php:289
-msgid "Crop"
-msgstr ""
-
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Částečné náhrání."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
@@ -842,14 +551,12 @@ msgid "Avatar deleted."
 msgstr "Avatar smazán."
 
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Již jste přihlášen"
+msgstr "Jabber ID již patří jinému uživateli"
 
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
-#, fuzzy
 msgid "Block user"
-msgstr "Žádný takový uživatel."
+msgstr "Zablokovat tohoto uživatele"
 
 #: actions/block.php:138
 msgid ""
@@ -866,30 +573,15 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Ne"
+msgstr "Poznámka"
 
 #. TRANS: Submit button title for 'No' when blocking a user.
 #. TRANS: Submit button title for 'No' when deleting a user.
 #: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
 msgid "Do not block this user"
-msgstr "Žádný takový uživatel."
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Ano"
+msgstr "Zablokovat tohoto uživatele"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
@@ -900,6 +592,8 @@ msgstr "Zablokovat tohoto uživatele"
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -909,45 +603,28 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
-msgstr "Žádné takové oznámení."
+msgstr "Žádný takový uživatel."
 
 #: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "Uživatel nemá profil."
+msgstr ""
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s a přátelé"
-
-#: actions/blockedfromgroup.php:115
-msgid "A list of the users blocked from joining this group."
 msgstr ""
 
-#: actions/blockedfromgroup.php:288
-#, fuzzy
-msgid "Unblock user from group"
-msgstr "Žádný takový uživatel."
-
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr ""
 
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-#, fuzzy
 msgid "Unblock this user"
-msgstr "Žádný takový uživatel."
-
-#. TRANS: Title for mini-posting window loaded from bookmarklet.
-#: actions/bookmarklet.php:51
-#, fuzzy, php-format
-msgid "Post to %s"
-msgstr "Odpovědi na %s"
+msgstr "Zablokovat tohoto uživatele"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -963,9 +640,9 @@ msgstr "Tento potvrzující kód vám nepatří!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Neznámý typ adresy %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -994,40 +671,22 @@ msgid "Couldn't delete email confirmation."
 msgstr "Nelze smazat potvrzení emailu"
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Potvrď adresu"
+msgstr "Heslo znovu"
 
 #: actions/confirmaddress.php:161
 #, php-format
 msgid "The address \"%s\" has been confirmed for your account."
 msgstr "Adresa \"%s\" byla potvrzena pro váš účet"
 
-#: actions/conversation.php:99
-#, fuzzy
-msgid "Conversation"
-msgstr "Umístění"
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "Sdělení"
 
-#: actions/deleteapplication.php:63
-#, fuzzy
-msgid "You must be logged in to delete an application."
-msgstr "Nelze aktualizovat uživatele"
-
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Sdělení nemá profil"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Neodeslal jste nám profil"
+msgstr "Potvrzující kód nebyl nalezen"
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1035,11 +694,6 @@ msgstr "Neodeslal jste nám profil"
 msgid "There was a problem with your session token."
 msgstr ""
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Žádné takové oznámení."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1049,15 +703,8 @@ msgstr ""
 
 #. TRANS: Submit button title for 'No' when deleting an application.
 #: actions/deleteapplication.php:158
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Žádné takové oznámení."
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "Odstranit toto oznámení"
+msgstr "Toto oznámení nelze odstranit."
 
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -1080,39 +727,16 @@ msgid ""
 "be undone."
 msgstr ""
 
-#: actions/deletenotice.php:109 actions/deletenotice.php:141
-msgid "Delete notice"
-msgstr ""
-
-#: actions/deletenotice.php:144
-msgid "Are you sure you want to delete this notice?"
-msgstr ""
-
 #. TRANS: Submit button title for 'No' when deleting a notice.
 #: actions/deletenotice.php:151
-#, fuzzy
 msgid "Do not delete this notice"
-msgstr "Žádné takové oznámení."
+msgstr "Toto oznámení nelze odstranit."
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Odstranit toto oznámení"
 
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Nelze aktualizovat uživatele"
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "Můžete použít místní odebírání."
-
-#: actions/deleteuser.php:110 actions/deleteuser.php:133
-msgid "Delete user"
-msgstr ""
-
 #: actions/deleteuser.php:136
 msgid ""
 "Are you sure you want to delete this user? This will clear all data about "
@@ -1135,44 +759,22 @@ msgstr "Vzhled"
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Neplatná velikost"
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
+msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Změnit heslo"
-
-#: actions/designadminpanel.php:431
-#, fuzzy
-msgid "Site logo"
-msgstr "Nové sdělení"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
-msgstr "Změnit"
-
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
-msgstr "Nové sdělení"
+msgstr "Změnit barvy"
 
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
 msgstr ""
 
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Nové sdělení"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1187,13 +789,6 @@ msgstr ""
 msgid "Background"
 msgstr "Pozadí"
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1220,11 +815,6 @@ msgstr "Změnit barvy"
 msgid "Content"
 msgstr "Obsah"
 
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "Hledat"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr ""
@@ -1264,10 +854,6 @@ msgstr ""
 msgid "Save"
 msgstr "Uložit"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr ""
@@ -1277,70 +863,26 @@ msgid "Add to favorites"
 msgstr "Přidat do oblíbených"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Žádný takový dokument."
+msgstr "Žádné takové oznámení."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Sdělení nemá profil"
-
-#: actions/editapplication.php:66
-msgid "You must be logged in to edit an application."
 msgstr ""
 
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Žádné takové oznámení."
-
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
 msgstr ""
 
-#: actions/editapplication.php:177 actions/newapplication.php:159
-msgid "Name is required."
-msgstr ""
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Jméno je moc dlouhé (maximální délka je 255 znaků)"
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Přezdívku již někdo používá. Zkuste jinou"
-
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "Odběry"
+msgstr "Odběr odmítnut"
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Stránka není platnou URL."
-
-#: actions/editapplication.php:203 actions/newapplication.php:188
-msgid "Organization is required."
-msgstr ""
-
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Umístění příliš dlouhé (maximálně 255 znaků)"
-
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
@@ -1349,20 +891,11 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Nelze aktualizovat uživatele"
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
 msgstr "Upravit %s skupinu"
 
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-msgid "You must be logged in to create a group."
-msgstr ""
-
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
 msgid "You must be an admin to edit the group."
@@ -1373,25 +906,14 @@ msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
-
-#: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\""
-msgstr "Neplatná adresa '%s'"
-
-#: actions/editgroup.php:258
-#, fuzzy
-msgid "Could not update group."
-msgstr "Nelze aktualizovat uživatele"
+msgstr "Umístění příliš dlouhé (maximálně 255 znaků)"
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
-msgstr "Nelze uložin informace o obrázku"
+msgstr "Nelze aktualizovat uživatele"
 
 #: actions/editgroup.php:280
 msgid "Options saved."
@@ -1399,9 +921,8 @@ msgstr "Nastavení uloženo."
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Nastavení E-mailu"
+msgstr "Nastavené Profilu"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1410,18 +931,6 @@ msgstr "Nastavení E-mailu"
 msgid "Manage how you get email from %%site.name%%."
 msgstr ""
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Potvrzení emailové adresy"
-
-#. TRANS: Form note in e-mail settings form.
-#: actions/emailsettings.php:112
-msgid "Current confirmed email address."
-msgstr ""
-
 #. TRANS: Button label to remove a confirmed e-mail address.
 #. TRANS: Button label for removing a set sender e-mail address to post notices from.
 #. TRANS: Button label to remove a confirmed IM address.
@@ -1430,27 +939,9 @@ msgstr ""
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "Odstranit"
-
-#: actions/emailsettings.php:122
-msgid ""
-"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
-"a message with further instructions."
-msgstr ""
-
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Zrušit"
+msgstr "Obnovit"
 
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
@@ -1462,10 +953,9 @@ msgstr ""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Přidat"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1488,20 +978,8 @@ msgstr ""
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Nový"
-
-#. TRANS: Form legend for e-mail preferences form.
-#: actions/emailsettings.php:174
-#, fuzzy
-msgid "Email preferences"
-msgstr "Nastavení"
-
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:180
-msgid "Send me notices of new subscriptions through email."
 msgstr ""
 
 #. TRANS: Checkbox label in e-mail preferences form.
@@ -1529,43 +1007,12 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr ""
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-msgid "Publish a MicroID for my email address."
-msgstr ""
-
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Nastavení uloženo"
-
-#. TRANS: Message given saving e-mail address without having provided one.
-#: actions/emailsettings.php:353
-msgid "No email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-msgid "Cannot normalize that email address"
-msgstr ""
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
 msgid "Not a valid email address."
 msgstr "Není platnou mailovou adresou."
 
-#. TRANS: Message given saving e-mail address that is already set.
-#: actions/emailsettings.php:370
-msgid "That is already your email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-msgid "That email address already belongs to another user."
-msgstr ""
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
@@ -1574,13 +1021,6 @@ msgstr ""
 msgid "Couldn't insert confirmation code."
 msgstr "Nelze vložit potvrzující kód"
 
-#. TRANS: Message given saving valid e-mail address that is to be confirmed.
-#: actions/emailsettings.php:398
-msgid ""
-"A confirmation code was sent to the email address you added. Check your "
-"inbox (and spam box!) for the code and instructions on how to use it."
-msgstr ""
-
 #. TRANS: Message given canceling e-mail address confirmation that is not pending.
 #. TRANS: Message given canceling IM address confirmation that is not pending.
 #. TRANS: Message given canceling SMS phone number confirmation that is not pending.
@@ -1589,69 +1029,24 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Nečeká žádné potvrzení na zrušení."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Toto je špatná IM adresa"
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Potvrď zrušení"
-
-#. TRANS: Message given trying to remove an e-mail address that is not
-#. TRANS: registered for the active user.
-#: actions/emailsettings.php:458
-msgid "That is not your email address."
-msgstr ""
+msgstr "Nečeká žádné potvrzení na zrušení."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Adresa byla odstraněna"
-
-#: actions/emailsettings.php:493 actions/smssettings.php:568
-msgid "No incoming email address."
-msgstr ""
-
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-msgid "Couldn't update user record."
-msgstr ""
-
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-msgid "Incoming email address removed."
-msgstr ""
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
+msgstr "Emailová adresa již existuje"
 
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr ""
 
-#: actions/favor.php:92 lib/disfavorform.php:140
-msgid "Disfavor favorite"
-msgstr ""
-
-#: actions/favorited.php:65 lib/popularnoticesection.php:91
-#: lib/publicgroupnav.php:93
-#, fuzzy
-msgid "Popular notices"
-msgstr "Žádné takové oznámení."
-
 #: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
 msgid "Popular notices, page %d"
-msgstr "Žádné takové oznámení."
+msgstr ""
 
 #: actions/favorited.php:79
 msgid "The most popular notices on the site right now."
@@ -1674,16 +1069,10 @@ msgid ""
 "notice to your favorites!"
 msgstr ""
 
-#: actions/favoritesrss.php:111 actions/showfavorites.php:77
-#: lib/personalgroupnav.php:115
-#, php-format
-msgid "%s's favorite notices"
-msgstr ""
-
 #: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
 msgid "Updates favored by %1$s on %2$s!"
-msgstr "Mikroblog od %s"
+msgstr ""
 
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
@@ -1701,33 +1090,20 @@ msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "Žádné oznámení"
+msgstr "Žádné takové oznámení."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Žádné oznámení"
-
-#: actions/file.php:42
-#, fuzzy
-msgid "No attachments."
-msgstr "Žádný takový dokument."
-
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "Žádný takový dokument."
+msgstr "Žádné takové oznámení."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "Nečekaná odpověď."
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "Úživatel, kterému nasloucháte neexistuje."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1738,64 +1114,27 @@ msgid "That user has blocked you from subscribing."
 msgstr ""
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Neautorizován."
+msgstr "Odběr autorizován"
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Nelze konvertovat řetězec požadavku na přístupový řetězec."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Neznámá verze OMB protokolu."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Chyba při aktualizaci vzdáleného profilu"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "Žádné takové oznámení."
+msgstr ""
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "Žádné takové oznámení."
-
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Neplatná velikost"
+msgstr "Nelze uložit profil"
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Neodeslal jste nám profil"
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "Uživatel nemá profil."
-
-#: actions/groupblock.php:71 actions/groupunblock.php:71
-#: actions/makeadmin.php:71 actions/subedit.php:46
-#: lib/profileformaction.php:79
-msgid "No profile specified."
-msgstr ""
-
-#: actions/groupblock.php:76 actions/groupunblock.php:76
-#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
-#: actions/unsubscribe.php:84 lib/profileformaction.php:86
-msgid "No profile with that ID."
 msgstr ""
 
 #: actions/groupblock.php:81 actions/groupunblock.php:81
@@ -1807,21 +1146,6 @@ msgstr ""
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-#, fuzzy
-msgid "User is already blocked from group."
-msgstr "Uživatel nemá profil."
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "Neodeslal jste nám profil"
-
-#: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
-msgid "Block user from group"
-msgstr "Žádný takový uživatel."
-
 #: actions/groupblock.php:160
 #, php-format
 msgid ""
@@ -1830,98 +1154,46 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-#, fuzzy
-msgid "Do not block this user from this group"
-msgstr "Nelze přesměrovat na server: %s"
-
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
-#, fuzzy
 msgid "Block this user from this group"
-msgstr "Žádný takový uživatel."
+msgstr "Zablokovat tohoto uživatele"
 
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Žádné id"
+msgstr "Žádné Jabber ID."
 
 #: actions/groupdesignsettings.php:68
 msgid "You must be logged in to edit a group."
 msgstr ""
 
-#: actions/groupdesignsettings.php:144
-msgid "Group design"
-msgstr ""
-
 #: actions/groupdesignsettings.php:155
 msgid ""
 "Customize the way your group looks with a background image and a colour "
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Nelze aktualizovat uživatele"
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "Nastavení uloženo"
-
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
 msgstr "Logo skupiny"
 
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
-
 #: actions/grouplogo.php:365
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "Obrázek nahrán"
-
-#: actions/grouplogo.php:401
-#, fuzzy
-msgid "Failed updating logo."
-msgstr "Nahrávání obrázku selhalo."
-
-#: actions/groupmembers.php:100 lib/groupnav.php:92
-#, php-format
-msgid "%s group members"
-msgstr ""
-
 #: actions/groupmembers.php:103
 #, php-format
 msgid "%1$s group members, page %2$d"
 msgstr ""
 
-#: actions/groupmembers.php:118
-msgid "A list of the users in this group."
-msgstr ""
-
 #: actions/groupmembers.php:182 lib/groupnav.php:107
 msgid "Admin"
 msgstr ""
 
-#: actions/groupmembers.php:392 lib/blockform.php:69
-msgid "Block"
-msgstr ""
-
 #: actions/groupmembers.php:487
 msgid "Make user an admin of the group"
 msgstr ""
@@ -1934,20 +1206,11 @@ msgstr ""
 msgid "Make this user an admin"
 msgstr ""
 
-#. TRANS: Message is used as link title. %s is a user nickname.
-#. TRANS: Title in atom group notice feed. %s is a group name.
-#. TRANS: Title in atom user notice feed. %s is a user name.
-#: actions/grouprss.php:139 actions/userrss.php:94
-#: lib/atomgroupnoticefeed.php:63 lib/atomusernoticefeed.php:69
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #: actions/grouprss.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Updates from members of %1$s on %2$s!"
-msgstr "Mikroblog od %s"
+msgstr ""
 
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
@@ -1970,29 +1233,13 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "Vytvořit nový účet"
-
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"Hledej uživatele na %%site.name%% podle jejich jména, místa, nebo zájmů. "
-"Minimální délka musí být alespoň 3 znaky"
-
-#: actions/groupsearch.php:58
-#, fuzzy
-msgid "Group search"
-msgstr "Hledání lidí"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "Žádné výsledky."
+msgstr ""
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -2013,20 +1260,13 @@ msgid "Only an admin can unblock group members."
 msgstr ""
 
 #: actions/groupunblock.php:95
-#, fuzzy
 msgid "User is not blocked from group."
-msgstr "Uživatel nemá profil."
-
-#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
-msgid "Error removing the block."
-msgstr "Chyba při ukládaní uživatele"
+msgstr ""
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "IM nastavení"
+msgstr "Nastavené Profilu"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2042,16 +1282,8 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
-
-#. TRANS: Form legend for IM settings form.
-#. TRANS: Field label for IM address input in IM settings form.
-#: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
-msgid "IM address"
-msgstr "IM adresa"
+msgstr ""
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2081,9 +1313,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Nastavení"
+msgstr "Nastavení uloženo"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2095,16 +1326,6 @@ msgstr "Zasílat oznámení pomocí Jabber/GTalk"
 msgid "Post a notice when my Jabber/GTalk status changes."
 msgstr "Poslat oznámení, když se změní můj Jabber/Gtalk status."
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:172
-msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
-msgstr ""
-
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -2151,17 +1372,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Toto je špatná IM adresa"
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Nelze smazat potvrzení emailu"
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Potvrď zrušení"
+msgstr "Žádný potvrzující kód."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2169,12 +1383,6 @@ msgstr "Potvrď zrušení"
 msgid "That is not your Jabber ID."
 msgstr "Toto není váš Jabber"
 
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-#, fuzzy
-msgid "The IM address was removed."
-msgstr "Adresa byla odstraněna"
-
 #: actions/inbox.php:59
 #, php-format
 msgid "Inbox for %1$s - page %2$d"
@@ -2194,13 +1402,8 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "Nelze aktualizovat uživatele"
-
-#: actions/invite.php:72
 #, php-format
-msgid "Invalid email address: %s"
+msgid "You must be logged in to invite other users to use %s."
 msgstr ""
 
 #: actions/invite.php:110
@@ -2211,13 +1414,9 @@ msgstr ""
 msgid "Invite new users"
 msgstr ""
 
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr ""
@@ -2242,33 +1441,18 @@ msgid ""
 "Use this form to invite your friends and colleagues to use this service."
 msgstr ""
 
-#: actions/invite.php:187
-msgid "Email addresses"
-msgstr ""
-
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
 msgstr ""
 
-#: actions/invite.php:192
-msgid "Personal message"
-msgstr ""
-
 #: actions/invite.php:194
 msgid "Optionally add a personal message to the invitation."
 msgstr ""
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Odeslat"
-
-#. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
-#: actions/invite.php:228
-#, php-format
-msgid "%1$s has invited you to join them on %2$s"
 msgstr ""
 
 #. TRANS: Body text for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
@@ -2307,14 +1491,7 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr ""
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Žádná přezdívka."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr ""
@@ -2323,18 +1500,6 @@ msgstr ""
 msgid "You must be logged in to leave a group."
 msgstr ""
 
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
-msgid "You are not a member of that group."
-msgstr "Neodeslal jste nám profil"
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
-msgid "%1$s left group %2$s"
-msgstr "%1 statusů na %2"
-
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
 msgstr "Již přihlášen"
@@ -2343,11 +1508,6 @@ msgstr "Již přihlášen"
 msgid "Incorrect username or password."
 msgstr "Neplatné jméno nebo heslo"
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Neautorizován."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Přihlásit"
@@ -2374,51 +1534,37 @@ msgid ""
 "changing your settings."
 msgstr "Z bezpečnostních důvodů, prosím zadejte znovu své jméno a heslo."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Neplatné jméno nebo heslo"
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Přihlaste se pomocí vaší prezdívky a hesla. Zatím nejste zaregistrován? "
-"[Registrovat](%%action.register%%) nový účet, nebo vyzkoušejte [OpenID](%%"
-"action.openidlogin%%)."
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
 #: actions/makeadmin.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Uživatel nemá profil."
+msgstr ""
 
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Nelze vytvořit OpenID z: %s"
+msgstr ""
 
 #: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
 msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Uživatel nemá profil."
+msgstr ""
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "Žádné výsledky."
+msgstr ""
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
-msgstr "Žádné takové oznámení."
-
-#: actions/newapplication.php:64
-msgid "You must be logged in to register an application."
 msgstr ""
 
 #: actions/newapplication.php:143
@@ -2430,9 +1576,8 @@ msgid "Source URL is required."
 msgstr ""
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
-msgstr "Nelze uložin informace o obrázku"
+msgstr "Nelze smazat potvrzení emailu"
 
 #: actions/newgroup.php:53
 msgid "New group"
@@ -2442,16 +1587,10 @@ msgstr "Nová skupina"
 msgid "Use this form to create a new group."
 msgstr ""
 
-#: actions/newmessage.php:71 actions/newmessage.php:231
-msgid "New message"
-msgstr ""
-
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-msgid "You can't send a message to this user."
-msgstr ""
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Žádný obsah!"
 
@@ -2459,21 +1598,20 @@ msgstr "Žádný obsah!"
 msgid "No recipient specified."
 msgstr ""
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 
-#: actions/newmessage.php:181
-msgid "Message sent"
-msgstr ""
-
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
@@ -2481,11 +1619,6 @@ msgstr ""
 msgid "New notice"
 msgstr "Nové sdělení"
 
-#: actions/newnotice.php:217
-#, fuzzy
-msgid "Notice posted"
-msgstr "Sdělení"
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2500,9 +1633,9 @@ msgid "Text search"
 msgstr "Vyhledávání textu"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr " Hledej \"%s\" ve Streamu"
+msgstr ""
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2519,14 +1652,14 @@ msgid ""
 msgstr ""
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "Mikroblog od %s"
+msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Všechny položky obsahující \"%s\""
+msgstr ""
 
 #: actions/nudge.php:85
 msgid ""
@@ -2553,24 +1686,10 @@ msgstr ""
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Neodeslal jste nám profil"
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2585,9 +1704,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Sdělení nemá profil"
+msgstr "Uživatel nemá profil."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2596,9 +1714,9 @@ msgstr "%1 statusů na %2"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Připojit"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2606,24 +1724,9 @@ msgstr "Připojit"
 msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
-#. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
-msgid "Not a supported data format."
-msgstr ""
-
-#: actions/opensearch.php:64
-msgid "People Search"
-msgstr ""
-
-#: actions/opensearch.php:67
-msgid "Notice Search"
-msgstr ""
-
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Nastavení"
+msgstr "Nastavené Profilu"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2641,43 +1744,17 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Nastavené Profilu"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Umístění příliš dlouhé (maximálně 255 znaků)"
-
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "Nové sdělení"
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Nové sdělení"
+msgstr ""
 
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "Nebylo vráceno žádné URL profilu od servu."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Neplatný obsah sdělení"
-
-#: actions/otp.php:104
-msgid "Login token expired."
-msgstr ""
+msgstr "Žádné potvrení!"
 
 #: actions/outbox.php:58
 #, php-format
@@ -2697,16 +1774,6 @@ msgstr ""
 msgid "Change password"
 msgstr "Změnit heslo"
 
-#: actions/passwordsettings.php:69
-#, fuzzy
-msgid "Change your password."
-msgstr "Změnit heslo"
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "Heslo uloženo"
-
 #: actions/passwordsettings.php:104
 msgid "Old password"
 msgstr "Staré heslo"
@@ -2732,10 +1799,6 @@ msgstr "Stejné jako heslo výše"
 msgid "Change"
 msgstr "Změnit"
 
-#: actions/passwordsettings.php:154 actions/register.php:237
-msgid "Password must be 6 or more characters."
-msgstr ""
-
 #: actions/passwordsettings.php:157 actions/register.php:240
 msgid "Passwords don't match."
 msgstr "Hesla nesouhlasí"
@@ -2766,24 +1829,19 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
-
-#: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
-msgid "Avatar directory not writable: %s."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2793,11 +1851,6 @@ msgstr ""
 msgid "Site"
 msgstr ""
 
-#: actions/pathsadminpanel.php:238
-#, fuzzy
-msgid "Server"
-msgstr "Obnovit"
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2806,11 +1859,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Nové sdělení"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2839,60 +1887,18 @@ msgstr ""
 msgid "Theme path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:272
-msgid "Theme directory"
-msgstr ""
-
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Obrázek"
-
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "Nastavení"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Obrázek nahrán"
+msgstr "Avatar smazán."
 
 #: actions/pathsadminpanel.php:292
-#, fuzzy
 msgid "Avatar directory"
-msgstr "Obrázek nahrán"
-
-#: actions/pathsadminpanel.php:301
-msgid "Backgrounds"
-msgstr ""
-
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
-#: actions/pathsadminpanel.php:309
-msgid "Background path"
-msgstr ""
-
-#: actions/pathsadminpanel.php:313
-msgid "Background directory"
-msgstr ""
+msgstr "Avatar smazán."
 
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
 msgstr ""
 
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "Obnovit"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Sdělení"
-
 #: actions/pathsadminpanel.php:325
 msgid "Always"
 msgstr ""
@@ -2905,19 +1911,13 @@ msgstr ""
 msgid "When to use SSL"
 msgstr ""
 
-#: actions/pathsadminpanel.php:335
-#, fuzzy
-msgid "SSL server"
-msgstr "Obnovit"
-
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Nové sdělení"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2932,20 +1932,14 @@ msgstr ""
 msgid "People search"
 msgstr "Hledání lidí"
 
-#: actions/peopletag.php:68
-#, fuzzy, php-format
-msgid "Not a valid people tag: %s."
-msgstr "Není platnou mailovou adresou."
-
 #: actions/peopletag.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Mikroblog od %s"
+msgstr ""
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Neplatný obsah sdÄ\9blení"
+msgstr "Neplatná velikost"
 
 #: actions/postnotice.php:101
 #, php-format
@@ -2964,9 +1958,8 @@ msgstr ""
 "více dozvědět."
 
 #: actions/profilesettings.php:99
-#, fuzzy
 msgid "Profile information"
-msgstr "Neznámý profil"
+msgstr "Nastavené Profilu"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -2989,9 +1982,9 @@ msgid "URL of your homepage, blog, or profile on another site"
 msgstr "Adresa vašich stránek, blogu nebo profilu na jiných stránkách."
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Popiš sebe a své zájmy ve 140 znacích"
+msgstr "Popište sebe a své zájmy"
 
 #: actions/profilesettings.php:125 actions/register.php:471
 msgid "Describe yourself and your interests"
@@ -3049,41 +2042,23 @@ msgid ""
 msgstr ""
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
+msgstr "Umístění příliš dlouhé (maximálně %d znaků)"
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
-msgstr "Neplatná adresa '%s'"
-
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Nelze uložit profil"
+msgstr "Neplatná velikost"
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Nelze uložit profil"
 
-#: actions/profilesettings.php:383
-#, fuzzy
-msgid "Couldn't save tags."
-msgstr "Nelze uložit profil"
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -3094,33 +2069,21 @@ msgstr "Nastavení uloženo"
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
-#: actions/public.php:130
-#, fuzzy, php-format
-msgid "Public timeline, page %d"
-msgstr "Veřejné zprávy"
-
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
 msgstr "Veřejné zprávy"
 
 #: actions/public.php:160
-#, fuzzy
 msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Veřejný Stream Feed"
+msgstr ""
 
 #: actions/public.php:164
-#, fuzzy
 msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Veřejný Stream Feed"
+msgstr ""
 
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "Veřejný Stream Feed"
+msgstr ""
 
 #: actions/public.php:188
 #, php-format
@@ -3157,9 +2120,8 @@ msgid ""
 msgstr ""
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "Veřejný Stream Feed"
+msgstr ""
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3182,10 +2144,6 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:134
-msgid "Tag cloud"
-msgstr ""
-
 #: actions/recoverpassword.php:36
 msgid "You are already logged in!"
 msgstr "Již jste přihlášen"
@@ -3210,28 +2168,10 @@ msgstr "Chyba v ověřovacím kódu"
 msgid "This confirmation code is too old. Please start again."
 msgstr "Tento potvrzující kód je příliš starý Prosím zkuste znovu"
 
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "Vaše přezdívka na tomto servu, nebo váš email zadaný při registraci"
@@ -3252,10 +2192,6 @@ msgstr "Obnovit"
 msgid "Password recovery requested"
 msgstr "Žádost o obnovu hesla"
 
-#: actions/recoverpassword.php:213
-msgid "Unknown action"
-msgstr ""
-
 #: actions/recoverpassword.php:236
 msgid "6 or more characters, and don't forget it!"
 msgstr "6 a více znaků, a nezapomeňte"
@@ -3268,10 +2204,6 @@ msgstr "Reset"
 msgid "Enter a nickname or email address."
 msgstr "Zadej přezdívku nebo emailovou adresu"
 
-#: actions/recoverpassword.php:282
-msgid "No user with that email address or username."
-msgstr ""
-
 #: actions/recoverpassword.php:299
 msgid "No registered email address for that user."
 msgstr "Žádný registrovaný email pro tohoto uživatele."
@@ -3312,11 +2244,6 @@ msgstr "Nové heslo bylo uloženo. Nyní jste přihlášen."
 msgid "Sorry, only invited people can register."
 msgstr ""
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "Chyba v ověřovacím kódu"
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "Registrace úspěšná"
@@ -3347,18 +2274,6 @@ msgid ""
 "link up to friends and colleagues. "
 msgstr ""
 
-#: actions/register.php:432
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr ""
-
-#: actions/register.php:437
-msgid "6 or more characters. Required."
-msgstr ""
-
-#: actions/register.php:441
-msgid "Same as password above. Required."
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
 #: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:132
@@ -3396,13 +2311,11 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-" až na tyto privátní data: heslo, emailová adresa, IM adresa, telefonní "
-"číslo."
 
 #: actions/register.php:583
 #, php-format
@@ -3444,11 +2357,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "Vzdálený odběr"
 
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "Odběr autorizován"
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "Přezdívka"
@@ -3475,47 +2383,24 @@ msgid "Invalid profile URL (bad format)"
 msgstr "Neplatná adresa profilu (špatný formát)"
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Není platnou adresou profilu (není YADIS dokumentem)."
+msgstr ""
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
 msgstr ""
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Nelze získat řetězec požadavku."
+msgstr ""
 
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Nové sdělení"
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "Již jste přihlášen"
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "Vytvořit"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "Vytvořit"
+msgstr "Reset"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3523,25 +2408,10 @@ msgstr "Vytvořit"
 msgid "Replies to %s"
 msgstr "Odpovědi na %s"
 
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "Odpovědi na %s"
-
-#: actions/replies.php:145
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/replies.php:152
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Feed sdělení pro %s"
-
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Feed sdělení pro %s"
+msgstr "Odpovědi na %s"
 
 #: actions/replies.php:199
 #, php-format
@@ -3564,35 +2434,25 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "Odpovědi na %s"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Neodeslal jste nám profil"
+msgstr ""
 
 #: actions/revokerole.php:82
-#, fuzzy
 msgid "User doesn't have this role."
-msgstr "Uživatel nemá profil."
+msgstr ""
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Obrázek nahrán"
+msgstr "Statistiky"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
 msgid "You cannot sandbox users on this site."
-msgstr "Neodeslal jste nám profil"
+msgstr ""
 
 #: actions/sandbox.php:72
-#, fuzzy
 msgid "User is already sandboxed."
-msgstr "Uživatel nemá profil."
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3622,43 +2482,18 @@ msgstr ""
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "Nastavení"
-
-#: actions/showapplication.php:82
-msgid "You must be logged in to view an application."
-msgstr ""
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Sdělení nemá profil"
+msgstr "Nastavené Profilu"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Přezdívka"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "Umístění"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:187 actions/version.php:200
-#: lib/applicationeditform.php:216 lib/groupeditform.php:172
-#, fuzzy
-msgid "Description"
-msgstr "Odběry"
+msgstr ""
 
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
@@ -3670,18 +2505,10 @@ msgstr "Statistiky"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3713,28 +2540,19 @@ msgid "Are you sure you want to reset your consumer key and secret?"
 msgstr ""
 
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s a přátelé"
-
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
 msgstr ""
 
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Feed přítel uživatele: %s"
+msgstr ""
 
 #: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Feed přítel uživatele: %s"
-
-#: actions/showfavorites.php:185
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr "Feed přítel uživatele: %s"
+msgstr ""
 
 #: actions/showfavorites.php:206
 msgid ""
@@ -3761,20 +2579,14 @@ msgstr ""
 msgid "This is a way to share what you like."
 msgstr ""
 
-#: actions/showgroup.php:82 lib/groupnav.php:86
-#, php-format
-msgid "%s group"
-msgstr ""
-
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Všechny odběry"
+msgstr ""
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "Žádné takové oznámení."
+msgstr "Logo skupiny"
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
@@ -3790,49 +2602,20 @@ msgstr "Poznámka"
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Feed sdělení pro %s"
+msgstr ""
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/showgroup.php:350
-#, fuzzy, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr "Feed sdělení pro %s"
+msgstr ""
 
 #: actions/showgroup.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s group"
-msgstr "Feed sdělení pro %s"
-
-#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
-#, fuzzy
-msgid "Members"
-msgstr "Členem od"
-
-#: actions/showgroup.php:398 lib/profileaction.php:117
-#: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
-#: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
-msgid "(None)"
-msgstr ""
-
-#: actions/showgroup.php:404
-msgid "All members"
-msgstr ""
-
-#: actions/showgroup.php:439
-#, fuzzy
-msgid "Created"
-msgstr "Vytvořit"
+msgstr "Upravit %s skupinu"
 
 #: actions/showgroup.php:455
 #, php-format
@@ -3857,10 +2640,6 @@ msgstr ""
 msgid "Admins"
 msgstr ""
 
-#: actions/showmessage.php:81
-msgid "No such message."
-msgstr ""
-
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
 msgstr ""
@@ -3876,9 +2655,8 @@ msgid "Message from %1$s on %2$s"
 msgstr ""
 
 #: actions/shownotice.php:90
-#, fuzzy
 msgid "Notice deleted."
-msgstr "Sdělení"
+msgstr "Avatar smazán."
 
 #: actions/showstream.php:73
 #, php-format
@@ -3886,33 +2664,13 @@ msgid " tagged %s"
 msgstr ""
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s a přátelé"
+msgstr ""
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
-msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/showstream.php:129
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/showstream.php:136
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/showstream.php:143
-#, fuzzy, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/showstream.php:148
 #, php-format
-msgid "FOAF for %s"
+msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
 msgstr ""
 
 #: actions/showstream.php:200
@@ -3950,19 +2708,13 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "Odpovědi na %s"
-
 #: actions/silence.php:65 actions/unsilence.php:65
 msgid "You cannot silence users on this site."
 msgstr ""
 
 #: actions/silence.php:72
-#, fuzzy
 msgid "User is already silenced."
-msgstr "Uživatel nemá profil."
+msgstr ""
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
@@ -3972,11 +2724,6 @@ msgstr ""
 msgid "Site name must have non-zero length."
 msgstr ""
 
-#: actions/siteadminpanel.php:141
-#, fuzzy
-msgid "You must have a valid contact email address."
-msgstr "Není platnou mailovou adresou."
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -3994,11 +2741,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Nové sdělení"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4019,16 +2761,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Žádný registrovaný email pro tohoto uživatele."
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Umístění"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4066,42 +2798,25 @@ msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "Nové sdělení"
+msgstr "Sdělení"
 
 #: actions/sitenoticeadminpanel.php:67
 msgid "Edit site-wide message"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Problém při ukládání sdělení"
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Nové sdělení"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "Nové sdělení"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "IM nastavení"
+msgstr "Nastavené Profilu"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4112,15 +2827,8 @@ msgstr ""
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Tato stránka není k dispozici v typu média která přijímáte."
-
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "IM adresa"
+msgstr ""
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4132,39 +2840,15 @@ msgstr ""
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-msgid "Confirmation code"
-msgstr ""
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Heslo znovu"
-
-#. TRANS: Field label for SMS phone number input in SMS settings form.
-#: actions/smssettings.php:153
-#, fuzzy
-msgid "SMS phone number"
-msgstr "Žádné telefonní číslo."
-
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr ""
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Nastavení"
+msgstr "Nastavení uloženo"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4173,62 +2857,24 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Nastavení uloženo"
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
 msgstr "Žádné telefonní číslo."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-msgid "That is already your phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-msgid "That phone number already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
-msgstr "Tento potvrzující kód vám nepatří!"
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-msgid "That is the wrong confirmation number."
 msgstr ""
+"Ověřující kód byl poslán na vloženou IM adresu. Musíte prokázat %s pro "
+"posílání zpráv."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Potvrď zrušení"
-
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-msgid "That is not your phone number."
-msgstr ""
-
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "Žádné telefonní číslo."
+msgstr "Žádný potvrzující kód."
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
@@ -4249,11 +2895,6 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-msgid "No code entered"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
@@ -4261,13 +2902,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Odběry"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Potvrzení emailové adresy"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4309,50 +2945,23 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Nastavení"
-
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "Neodeslal jste nám profil"
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "Nelze vytvořit odebírat"
+msgstr "Nelze vložit odebírání"
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Žádné takové oznámení."
-
 #: actions/subscribe.php:117
-#, fuzzy
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Neodeslal jste nám profil"
-
-#: actions/subscribe.php:145
-#, fuzzy
-msgid "Subscribed"
-msgstr "Odebírat"
+msgstr ""
 
 #: actions/subscribers.php:50
-#, fuzzy, php-format
+#, php-format
 msgid "%s subscribers"
-msgstr "Odběratelé"
-
-#: actions/subscribers.php:52
-#, fuzzy, php-format
-msgid "%1$s subscribers, page %2$d"
-msgstr "Všechny odběry"
+msgstr "Všichni odběratelé"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4381,16 +2990,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Všechny odběry"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "Všechny odběry"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr "Toto jsou lidé, jejiž sdělením nasloucháte"
@@ -4410,55 +3009,34 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
-msgid "%s is not listening to anyone."
-msgstr "%1 od teď naslouchá tvým sdělením v %2"
-
-#: actions/subscriptions.php:208
-#, fuzzy
-msgid "Jabber"
-msgstr "Žádné Jabber ID."
-
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
 msgstr ""
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Mikroblog od %s"
+msgstr ""
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Feed sdělení pro %s"
+msgstr ""
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Feed sdělení pro %s"
-
-#: actions/tag.php:99
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr "Feed sdělení pro %s"
+msgstr ""
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Žádný takový dokument."
+msgstr ""
 
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
 msgstr ""
 
-#: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
-msgid "User profile"
-msgstr "Uživatel nemá profil."
-
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
@@ -4480,43 +3058,16 @@ msgid ""
 msgstr ""
 
 #: actions/tagother.php:200
-#, fuzzy
 msgid "Could not save tags."
-msgstr "Nelze uložin informace o obrázku"
+msgstr "Nelze uložit profil"
 
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
 
-#: actions/tagrss.php:35
-#, fuzzy
-msgid "No such tag."
-msgstr "Žádné takové oznámení."
-
-#: actions/unblock.php:59
-#, fuzzy
-msgid "You haven't blocked that user."
-msgstr "Již jste přihlášen"
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Uživatel nemá profil."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Uživatel nemá profil."
-
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Nebylo vráceno žádné URL profilu od servu."
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "Odhlásit"
+msgstr "Žádné potvrení!"
 
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
@@ -4573,20 +3124,9 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Všechny odběry"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "Odběr autorizován"
-
 #: actions/useradminpanel.php:251
-#, fuzzy
 msgid "Invitations"
-msgstr "Umístění"
+msgstr ""
 
 #: actions/useradminpanel.php:256
 msgid "Invitations enabled"
@@ -4601,15 +3141,11 @@ msgid "Authorize subscription"
 msgstr "Autorizovaný odběr"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Prosím zkontrolujte tyto detailu, a ujistěte se že opravdu chcete odebírat "
-"sdělení tohoto uživatele. Pokud ne, ask to subscribe to somone's notices, "
-"klikněte na \"Zrušit\""
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4621,18 +3157,16 @@ msgstr "Přijmout"
 
 #: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
-#, fuzzy
 msgid "Subscribe to this user"
-msgstr "Odběr autorizován"
+msgstr "Neodeslal jste nám profil"
 
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Odmítnout"
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "Všechny odběry"
+msgstr "Autorizovaný odběr"
 
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
@@ -4643,29 +3177,22 @@ msgid "Subscription authorized"
 msgstr "Odběr autorizován"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"Odběr byl potvrzen, ale neprošla žádná callback adresa. Zkontrolujte v "
-"nápovědě jak správně postupovat při potvrzování odběru. Váš řetězec odběru "
-"je:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Odběr odmítnut"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"Odebírání bylo zamítnuto, ale neprošla žádná callback adresa. Zkontrolujte v "
-"nápovědě jak správně postupovat při zamítání odběru"
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4693,19 +3220,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Nelze přečíst adresu obrázku '%s'"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Neplatný typ obrázku pro '%s'"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Nastavené Profilu"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4719,19 +3241,14 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Všechny odběry"
+msgstr ""
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "Neodeslal jste nám profil"
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4748,11 +3265,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr ""
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "Statistiky"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4791,12 +3303,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Osobní"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4835,43 +3341,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Neplatná velikost"
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Žádné takové oznámení."
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Nelze aktualizovat uživatele"
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Žádné takové oznámení."
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Nelze aktualizovat uživatele"
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Nelze uložin informace o obrázku"
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
@@ -4882,16 +3351,6 @@ msgstr ""
 msgid "You are banned from sending direct messages."
 msgstr ""
 
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-msgid "Could not insert message."
-msgstr ""
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4900,61 +3359,43 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Chyba v DB při vkládání odpovědi: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Problém při ukládání sdělení"
-
-#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-#, fuzzy
-msgid "Problem saving notice. Unknown user."
-msgstr "Problém při ukládání sdělení"
+msgstr "Chyba při kládání obrázku"
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problém při ukládání sdělení"
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Problém při ukládání sdělení"
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -4973,57 +3414,25 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Uživatel nemá profil."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Problém při ukládání sdělení"
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
-
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-#, fuzzy
-msgid "User has blocked you."
-msgstr "Uživatel nemá profil."
-
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Nepřihlášen!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Nelze smazat odebírání"
+msgstr "Nelze vložit odebírání"
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Nelze smazat odebírání"
+msgstr "Nelze vložit odebírání"
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Nelze smazat odebírání"
+msgstr "Nelze vložit odebírání"
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5034,71 +3443,34 @@ msgstr ""
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
-#, fuzzy
 msgid "Could not create group."
-msgstr "Nelze uložin informace o obrázku"
+msgstr "Nelze aktualizovat uživatele"
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Nelze vytvořit odebírat"
+msgstr "Nelze uložit profil"
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "Nelze vytvořit odebírat"
+msgstr "Nelze aktualizovat uživatele"
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "Nelze vytvořit odebírat"
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:109
-msgid "Change your profile settings"
-msgstr ""
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "Nahrávání obrázku selhalo."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:123
-msgid "Change your password"
-msgstr ""
+msgstr "Nelze uložit profil"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "Uživatel nemá profil."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-msgid "Other options"
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
 msgstr ""
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1 statusů na %2"
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5115,39 +3487,23 @@ msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Osobní"
-
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "Změnit heslo"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Nelze přesměrovat na server: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "Připojit"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Odběry"
-
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
 msgctxt "MENU"
@@ -5163,10 +3519,9 @@ msgstr ""
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
-#, fuzzy
 msgctxt "MENU"
 msgid "Invite"
-msgstr "Neplatná velikost"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
@@ -5176,24 +3531,15 @@ msgstr ""
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "Odhlásit"
+msgstr "Logo"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Vytvořit nový účet"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Registrovat"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
@@ -5201,23 +3547,10 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Přihlásit"
-
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "Pomoci mi!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "Nápověda"
 
 #. TRANS: Tooltip for main menu option "Search"
@@ -5226,35 +3559,15 @@ msgctxt "TOOLTIP"
 msgid "Search for people or text"
 msgstr ""
 
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Hledat"
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Nové sdělení"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Nové sdělení"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "Odběry"
+msgstr ""
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5302,13 +3615,11 @@ msgstr ""
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** je služba microblogů, kterou pro vás poskytuje [%%site."
-"broughtby%%](%%site.broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5328,12 +3639,6 @@ msgstr ""
 "dostupná pod [GNU Affero General Public License](http://www.fsf.org/"
 "licensing/licenses/agpl-3.0.html)."
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "Nové sdělení"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5367,16 +3672,14 @@ msgstr ""
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
-#, fuzzy
 msgid "After"
-msgstr "« Novější"
+msgstr ""
 
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: past than the currently displayed information.
 #: lib/action.php:1213
-#, fuzzy
 msgid "Before"
-msgstr "Starší »"
+msgstr ""
 
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
@@ -5421,122 +3724,36 @@ msgstr ""
 msgid "Unable to delete design setting."
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Potvrzení emailové adresy"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
-#, fuzzy
 msgctxt "MENU"
 msgid "Site"
-msgstr "Nové sdělení"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "Potvrzení emailové adresy"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-#, fuzzy
-msgctxt "MENU"
-msgid "Design"
-msgstr "Vzhled"
+msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
-#, fuzzy
 msgid "User configuration"
-msgstr "Potvrzení emailové adresy"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Potvrzení emailové adresy"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "Potvrzení emailové adresy"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Potvrzení emailové adresy"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Nové sdělení"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Potvrzení emailové adresy"
+msgstr "Akce uživatele"
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, fuzzy, php-format
-msgid "Describe your application in %d characters"
-msgstr "Popiš sebe a své zájmy ve 140 znacích"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Popiš sebe a své zájmy ve 140 znacích"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "Adresa vašich stránek, blogu nebo profilu na jiných stránkách."
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Zdroj"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
 msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
-#, fuzzy
 msgid "URL for the homepage of the organization"
-msgstr "Adresa vašich stránek, blogu nebo profilu na jiných stránkách."
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5596,15 +3813,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "Odstranit"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
+msgstr "Obnovit"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
@@ -5620,22 +3831,8 @@ msgstr "Poskytovatel"
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Heslo uloženo"
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "Heslo uloženo"
-
-#: lib/channel.php:157 lib/channel.php:177
-msgid "Command results"
 msgstr ""
 
 #: lib/channel.php:229 lib/mailhandler.php:142
@@ -5646,46 +3843,33 @@ msgstr ""
 msgid "Command failed"
 msgstr ""
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Vzdálený profil s nesouhlasícím profilem"
-
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Uživatel nemá profil."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Nelze aktualizovat uživatele"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Nelze aktualizovat uživatele"
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
+msgstr ""
 
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Odpovědi na %s"
+#: lib/command.php:240
+#, php-format
+msgid "Nudge sent to %s."
+msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5693,56 +3877,20 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "Již jste přihlášen"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Nelze přesměrovat na server: %s"
-
-#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: Message given having added a user to a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Nelze vytvořit OpenID z: %s"
-
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "Celé jméno"
-
-#. TRANS: Whois output. %s is the location of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, php-format
-msgid "Location: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the homepage of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
-#, php-format
-msgid "Homepage: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:360
 #, php-format
-msgid "About: %s"
+msgid "%1$s joined group %2$s."
 msgstr ""
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5751,153 +3899,93 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr ""
-
-#: lib/command.php:494
-msgid "Error sending direct message."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Odstranit toto oznámení"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Sdělení"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "Problém při ukládání sdělení"
+msgstr "Chyba nastavení uživatele"
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Odpovědi na %s"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Problém při ukládání sdělení"
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
-#, fuzzy
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
-msgstr "Neodeslal jste nám profil"
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr ""
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
 msgstr ""
 
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:685
-msgid "Notification off."
-msgstr ""
-
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
-msgstr ""
-
-#: lib/command.php:710
-msgid "Can't turn on notification."
-msgstr ""
-
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Odhlásit"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Neodeslal jste nám profil"
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Neodeslal jste nám profil"
 msgstr[1] "Neodeslal jste nám profil"
 msgstr[2] ""
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Vzdálený odběr"
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Vzdálený odběr"
 msgstr[1] "Vzdálený odběr"
 msgstr[2] ""
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Neodeslal jste nám profil"
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Neodeslal jste nám profil"
 msgstr[1] "Neodeslal jste nám profil"
 msgstr[2] ""
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5939,11 +4027,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Žádný potvrzující kód."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5968,46 +4051,17 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Připojit"
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Upload"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
 
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-msgid "Disfavor this notice"
-msgstr ""
-
 #: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
 msgid "Favor this notice"
-msgstr "Žádné takové oznámení."
-
-#: lib/favorform.php:140
-msgid "Favor"
-msgstr ""
+msgstr "Odstranit toto oznámení"
 
 #: lib/feed.php:85
 msgid "RSS 1.0"
@@ -6058,51 +4112,15 @@ msgstr ""
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr "Adresa vašich stránek, blogu nebo profilu na jiných stránkách."
-
 #: lib/groupeditform.php:168
-#, fuzzy
 msgid "Describe the group or topic"
-msgstr "Popiš sebe a své zájmy ve 140 znacích"
-
-#: lib/groupeditform.php:170
-#, fuzzy, php-format
-msgid "Describe the group or topic in %d characters"
-msgstr "Popiš sebe a své zájmy ve 140 znacích"
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "Místo. Město, stát."
+msgstr ""
 
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
-#: lib/groupnav.php:85
-msgid "Group"
-msgstr ""
-
-#: lib/groupnav.php:101
-#, fuzzy
-msgid "Blocked"
-msgstr "Žádný takový uživatel."
-
-#: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "Žádný takový uživatel."
-
-#: lib/groupnav.php:108
-#, php-format
-msgid "Edit %s group properties"
-msgstr ""
-
 #: lib/groupnav.php:113
 msgid "Logo"
 msgstr "Logo"
@@ -6139,11 +4157,6 @@ msgstr "Tato stránka není k dispozici v typu média která přijímáte."
 msgid "Unsupported image file format."
 msgstr "Nepodporovaný formát obrázku."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Částečné náhrání."
@@ -6156,11 +4169,6 @@ msgstr "Chyba systému při nahrávání souboru"
 msgid "Not an image or corrupt file."
 msgstr "Není obrázkem, nebo jde o poškozený soubor."
 
-#: lib/imagefile.php:122
-#, fuzzy
-msgid "Lost our file."
-msgstr "Žádné takové oznámení."
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr ""
@@ -6187,20 +4195,9 @@ msgstr ""
 msgid "Join"
 msgstr "Přidat se"
 
-#: lib/leaveform.php:114
-#, fuzzy
-msgid "Leave"
-msgstr "Uložit"
-
-#: lib/logingroupnav.php:80
-#, fuzzy
-msgid "Login with a username and password"
-msgstr "Neplatné jméno nebo heslo"
-
 #: lib/logingroupnav.php:86
-#, fuzzy
 msgid "Sign up for a new account"
-msgstr "Vytvořit nový účet"
+msgstr ""
 
 #. TRANS: Subject for address confirmation email
 #: lib/mail.php:174
@@ -6240,7 +4237,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6253,24 +4250,6 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1 naslouchá vašim sdělením na %s. \n"
-"\n"
-"\t%3\n"
-"\n"
-"S úctou váš,\n"
-"%4$s.\n"
-
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "O mě"
-
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, php-format
-msgid "New email address for posting to %s"
-msgstr ""
 
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
@@ -6286,17 +4265,6 @@ msgid ""
 "%4$s"
 msgstr ""
 
-#. TRANS: Subject line for SMS-by-email notification messages
-#: lib/mail.php:433
-#, php-format
-msgid "%s status"
-msgstr ""
-
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-msgid "SMS confirmation"
-msgstr ""
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6354,9 +4322,9 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%1 od teď naslouchá tvým sdělením v %2"
+msgstr ""
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6432,32 +4400,18 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
-#, fuzzy
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr " od "
-
-#: lib/mailhandler.php:37
-msgid "Could not parse message."
 msgstr ""
 
 #: lib/mailhandler.php:42
 msgid "Not a registered user."
 msgstr "Není registrovaný uživatel."
 
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
 #: lib/mailhandler.php:50
 msgid "Sorry, no incoming email allowed."
 msgstr ""
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Nepodporovaný formát obrázku."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6497,9 +4451,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Nelze aktualizovat uživatele"
+msgstr "Nelze smazat oblíbenou položku."
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6519,56 +4472,34 @@ msgstr ""
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "6 a více znaků"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Odeslat"
-
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "Nové sdělení"
+msgstr ""
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Co se děje %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Nelze uložit profil"
-
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "Nelze uložit profil"
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-msgid "N"
-msgstr ""
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6593,42 +4524,18 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "Žádný obsah!"
-
-#: lib/noticelist.php:602
-#, fuzzy
-msgid "Repeated by"
-msgstr "Vytvořit"
-
-#: lib/noticelist.php:629
-msgid "Reply to this notice"
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/noticelist.php:630
-#, fuzzy
+#: lib/noticelist.php:631
 msgid "Reply"
-msgstr "odpověď"
-
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Sdělení"
-
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
+msgstr "Odpovědi"
 
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "Chyba při vkládání nového profilu"
@@ -6646,9 +4553,8 @@ msgid "Error inserting remote profile"
 msgstr "Chyba při vkládaní vzdáleného profilu"
 
 #: lib/oauthstore.php:345
-#, fuzzy
 msgid "Duplicate notice"
-msgstr "Nové sdělení"
+msgstr "Odstranit toto oznámení"
 
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
@@ -6720,10 +4626,6 @@ msgstr "Členem od"
 msgid "Daily average"
 msgstr ""
 
-#: lib/profileaction.php:264
-msgid "All groups"
-msgstr ""
-
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
 msgstr ""
@@ -6732,47 +4634,18 @@ msgstr ""
 msgid "Public"
 msgstr "Veřejné"
 
-#: lib/publicgroupnav.php:82
-msgid "User groups"
-msgstr ""
-
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
 msgid "Recent tags"
 msgstr ""
 
-#: lib/publicgroupnav.php:88
-msgid "Featured"
-msgstr ""
-
-#: lib/publicgroupnav.php:92
-#, fuzzy
-msgid "Popular"
-msgstr "Hledání lidí"
-
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "Žádný takový dokument."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Odstranit toto oznámení"
+msgstr ""
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Ano"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Odstranit toto oznámení"
-
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "Žádný takový uživatel."
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
@@ -6782,14 +4655,8 @@ msgid "Sandbox"
 msgstr ""
 
 #: lib/sandboxform.php:78
-#, fuzzy
 msgid "Sandbox this user"
-msgstr "Žádný takový uživatel."
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Hledat"
+msgstr "Zablokovat tohoto uživatele"
 
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
@@ -6799,15 +4666,6 @@ msgstr ""
 msgid "Search"
 msgstr "Hledat"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Hledat"
-
-#: lib/searchgroupnav.php:80
-msgid "People"
-msgstr ""
-
 #: lib/searchgroupnav.php:81
 msgid "Find people on this site"
 msgstr ""
@@ -6829,24 +4687,12 @@ msgid "More..."
 msgstr ""
 
 #: lib/silenceform.php:67
-#, fuzzy
 msgid "Silence"
-msgstr "Nové sdělení"
+msgstr ""
 
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "Žádný takový uživatel."
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "Vzdálený odběr"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "Vzdálený odběr"
+msgstr "Odstranit tohoto uživatele"
 
 #: lib/subgroupnav.php:99
 #, php-format
@@ -6872,10 +4718,6 @@ msgstr ""
 msgid "People Tagcloud as tagged"
 msgstr ""
 
-#: lib/tagcloudsection.php:56
-msgid "None"
-msgstr ""
-
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
 msgstr ""
@@ -6884,13 +4726,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Nahrávání obrázku selhalo."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6915,46 +4750,22 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Chyba při aktualizaci vzdáleného profilu"
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
 
-#: lib/unsandboxform.php:69
-msgid "Unsandbox"
-msgstr ""
-
 #: lib/unsandboxform.php:80
-#, fuzzy
 msgid "Unsandbox this user"
-msgstr "Žádný takový uživatel."
-
-#: lib/unsilenceform.php:67
-msgid "Unsilence"
-msgstr ""
+msgstr "Zablokovat tohoto uživatele"
 
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "Žádný takový uživatel."
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-msgid "Unsubscribe from this user"
-msgstr ""
+msgstr "Odstranit tohoto uživatele"
 
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr "Odhlásit"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Uživatel nemá profil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Upravit avatar"
@@ -6967,11 +4778,6 @@ msgstr "Akce uživatele"
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Nastavené Profilu"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
@@ -6988,11 +4794,6 @@ msgstr "Zpráva"
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Uživatel nemá profil."
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -7004,70 +4805,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "před pár sekundami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "asi před minutou"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "asi před %d minutami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "asi před hodinou"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "asi před %d hodinami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "asi přede dnem"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "před %d dny"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "asi před měsícem"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "asi před %d mesíci"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "asi před rokem"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "Stránka není platnou URL."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index f68253d22660679ed9a0b1a52cd7c52ecee30d97..1178cb70144f6204d0c3a8d7e4be24259b57518a 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:15+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:21+0000\n"
 "Language-Team: Danish\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: da\n"
 "X-Message-Group: out-statusnet\n"
@@ -88,6 +88,7 @@ msgstr "Gem"
 msgid "No such page."
 msgstr "Siden findes ikke"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -107,7 +108,7 @@ msgstr "Siden findes ikke"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Ingen bruger fundet."
@@ -171,15 +172,6 @@ msgid ""
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
-"post a notice to them."
-msgstr ""
-"Hvorfor ikke [registrere en konto] (%%action.register%%), og vær den første "
-"til at tilføje en meddelelse til dine favoritter!"
-
 #. TRANS: H1 text
 #: actions/all.php:182
 msgid "You and friends"
@@ -345,7 +337,8 @@ msgstr "Ingen status fundet med dette ID."
 msgid "This status is already a favorite."
 msgstr "Denne status er allerede en favorit."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Kunne ikke oprette favorit."
 
@@ -357,10 +350,6 @@ msgstr "Denne status er ikke en favorit."
 msgid "Could not delete favorite."
 msgstr "Kunne ikke slette favorit."
 
-#: actions/apifriendshipscreate.php:109
-msgid "Could not follow user: profile not found."
-msgstr ""
-
 #: actions/apifriendshipscreate.php:118
 #, php-format
 msgid "Could not follow user: %s is already on your list."
@@ -457,15 +446,19 @@ msgstr "Alias kan ikke være det samme som kaldenavn."
 msgid "Group not found."
 msgstr "Gruppen blev ikke fundet."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Du er allerede medlem af denne gruppe."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Du er blevet blokeret fra denne gruppe af administratoren."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Kunne ikke tilslutte bruger %1$s til gruppe %2$s."
@@ -474,7 +467,10 @@ msgstr "Kunne ikke tilslutte bruger %1$s til gruppe %2$s."
 msgid "You are not a member of this group."
 msgstr "Du er ikke medlem af denne gruppe."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Kunne ikke fjerne brugeren %1$s fra gruppen %2$s."
@@ -503,11 +499,6 @@ msgstr "%s's grupper"
 msgid "groups on %s"
 msgstr "grupper på %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Ophæv blokering af bruger mislykkedes."
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "Ingen oauth_token parameter angivet."
@@ -635,11 +626,13 @@ msgstr "Du kan ikke slette en anden brugers status."
 msgid "No such notice."
 msgstr "Ingen sådan meddelelse."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Kan ikke gentage din egen meddelelse."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Allerede gentaget denne medelelse."
 
@@ -655,7 +648,7 @@ msgstr "Ingen status med dette ID fundet."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -665,7 +658,7 @@ msgstr "Det er for langt. Maksimal besked størrelse er %d tegn."
 msgid "Not found."
 msgstr "Ikke fundet."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Max meddelelse størrelse er %d tegn, inklusiv vedlagt URL."
@@ -724,10 +717,6 @@ msgstr "Bekendtgørelser tagged med %s"
 msgid "Updates tagged with %1$s on %2$s!"
 msgstr "Opdateringer tagged med %1$s på %2$s!"
 
-#: actions/apitrends.php:87
-msgid "API method under construction."
-msgstr ""
-
 #: actions/attachment.php:73
 msgid "No such attachment."
 msgstr "Ingen sådan fil."
@@ -781,7 +770,7 @@ msgid "Preview"
 msgstr "Forhåndsvisning"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Slet"
 
@@ -874,6 +863,8 @@ msgstr "Bloker denne bruger"
 msgid "Failed to save block information."
 msgstr "Kunne ikke gemme blokerings oplysninger."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -883,8 +874,8 @@ msgstr "Kunne ikke gemme blokerings oplysninger."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Ingen sådan gruppe."
 
@@ -1061,7 +1052,7 @@ msgid "Do not delete this notice"
 msgstr "Slet ikke denne meddelelse"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Slet denne meddelelse"
 
@@ -1839,27 +1830,10 @@ msgstr "Mislykket ajourføring af logo."
 msgid "%s group members"
 msgstr "%s gruppe medlemmer"
 
-#: actions/groupmembers.php:103
-#, php-format
-msgid "%1$s group members, page %2$d"
-msgstr ""
-
-#: actions/groupmembers.php:118
-msgid "A list of the users in this group."
-msgstr ""
-
 #: actions/groupmembers.php:182 lib/groupnav.php:107
 msgid "Admin"
 msgstr ""
 
-#: actions/groupmembers.php:392 lib/blockform.php:69
-msgid "Block"
-msgstr ""
-
-#: actions/groupmembers.php:487
-msgid "Make user an admin of the group"
-msgstr ""
-
 #: actions/groupmembers.php:519
 msgid "Make Admin"
 msgstr ""
@@ -1868,31 +1842,6 @@ msgstr ""
 msgid "Make this user an admin"
 msgstr ""
 
-#. TRANS: Message is used as link title. %s is a user nickname.
-#. TRANS: Title in atom group notice feed. %s is a group name.
-#. TRANS: Title in atom user notice feed. %s is a user name.
-#: actions/grouprss.php:139 actions/userrss.php:94
-#: lib/atomgroupnoticefeed.php:63 lib/atomusernoticefeed.php:69
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr ""
-
-#: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
-#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
-msgid "Groups"
-msgstr ""
-
-#: actions/groups.php:64
-#, php-format
-msgid "Groups, page %d"
-msgstr ""
-
 #: actions/groups.php:90
 #, php-format
 msgid ""
@@ -1930,30 +1879,10 @@ msgid ""
 "newgroup%%) yourself."
 msgstr ""
 
-#: actions/groupsearch.php:85
-#, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and [create the group](%%"
-"action.newgroup%%) yourself!"
-msgstr ""
-
-#: actions/groupunblock.php:91
-msgid "Only an admin can unblock group members."
-msgstr ""
-
-#: actions/groupunblock.php:95
-msgid "User is not blocked from group."
-msgstr ""
-
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
 msgstr ""
 
-#. TRANS: Title for instance messaging settings.
-#: actions/imsettings.php:60
-msgid "IM settings"
-msgstr ""
-
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
 #. TRANS: the order and formatting of link text and link should remain unchanged.
@@ -1964,30 +1893,6 @@ msgid ""
 "doc.im%%). Configure your address and settings below."
 msgstr ""
 
-#. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
-#: actions/imsettings.php:94
-msgid "IM is not available."
-msgstr ""
-
-#. TRANS: Form legend for IM settings form.
-#. TRANS: Field label for IM address input in IM settings form.
-#: actions/imsettings.php:106 actions/imsettings.php:136
-msgid "IM address"
-msgstr ""
-
-#: actions/imsettings.php:113
-msgid "Current confirmed Jabber/GTalk address."
-msgstr ""
-
-#. TRANS: Form note in IM settings form.
-#. TRANS: %s is the IM address set for the site.
-#: actions/imsettings.php:124
-#, php-format
-msgid ""
-"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
-"message with further instructions. (Did you add %s to your buddy list?)"
-msgstr ""
-
 #. TRANS: IM address input field instructions in IM settings form.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:140
@@ -1997,16 +1902,6 @@ msgid ""
 "add %s to your buddy list in your IM client or on GTalk."
 msgstr ""
 
-#. TRANS: Form legend for IM preferences form.
-#: actions/imsettings.php:155
-msgid "IM preferences"
-msgstr ""
-
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:160
-msgid "Send me notices through Jabber/GTalk."
-msgstr ""
-
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:166
 msgid "Post a notice when my Jabber/GTalk status changes."
@@ -2017,76 +1912,6 @@ msgstr ""
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
 msgstr ""
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
-#. TRANS: Confirmation message for successful IM preferences save.
-#: actions/imsettings.php:287 actions/othersettings.php:180
-msgid "Preferences saved."
-msgstr ""
-
-#. TRANS: Message given saving IM address without having provided one.
-#: actions/imsettings.php:309
-msgid "No Jabber ID."
-msgstr ""
-
-#. TRANS: Message given saving IM address that cannot be normalised.
-#: actions/imsettings.php:317
-msgid "Cannot normalize that Jabber ID"
-msgstr ""
-
-#. TRANS: Message given saving IM address that not valid.
-#: actions/imsettings.php:322
-msgid "Not a valid Jabber ID"
-msgstr ""
-
-#. TRANS: Message given saving IM address that is already set.
-#: actions/imsettings.php:326
-msgid "That is already your Jabber ID."
-msgstr ""
-
-#. TRANS: Message given saving IM address that is already set for another user.
-#: actions/imsettings.php:330
-msgid "Jabber ID already belongs to another user."
-msgstr ""
-
-#. TRANS: Message given saving valid IM address that is to be confirmed.
-#. TRANS: %s is the IM address set for the site.
-#: actions/imsettings.php:358
-#, php-format
-msgid ""
-"A confirmation code was sent to the IM address you added. You must approve %"
-"s for sending messages to you."
-msgstr ""
-
-#. TRANS: Message given canceling IM address confirmation for the wrong IM address.
-#: actions/imsettings.php:388
-msgid "That is the wrong IM address."
-msgstr ""
-
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-msgid "Couldn't delete IM confirmation."
-msgstr ""
-
-#. TRANS: Message given after successfully canceling IM address confirmation.
-#: actions/imsettings.php:402
-msgid "IM confirmation cancelled."
-msgstr ""
-
-#. TRANS: Message given trying to remove an IM address that is not
-#. TRANS: registered for the active user.
-#: actions/imsettings.php:424
-msgid "That is not your Jabber ID."
-msgstr ""
-
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-msgid "The IM address was removed."
-msgstr ""
-
 #: actions/inbox.php:59
 #, php-format
 msgid "Inbox for %1$s - page %2$d"
@@ -2105,16 +1930,6 @@ msgstr ""
 msgid "Invites have been disabled."
 msgstr ""
 
-#: actions/invite.php:41
-#, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr ""
-
-#: actions/invite.php:72
-#, php-format
-msgid "Invalid email address: %s"
-msgstr ""
-
 #: actions/invite.php:110
 msgid "Invitation(s) sent"
 msgstr ""
@@ -2123,13 +1938,9 @@ msgstr ""
 msgid "Invite new users"
 msgstr ""
 
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr ""
@@ -2154,10 +1965,6 @@ msgid ""
 "Use this form to invite your friends and colleagues to use this service."
 msgstr ""
 
-#: actions/invite.php:187
-msgid "Email addresses"
-msgstr ""
-
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
 msgstr ""
@@ -2214,52 +2021,10 @@ msgid ""
 "Sincerely, %2$s\n"
 msgstr ""
 
-#: actions/joingroup.php:60
-msgid "You must be logged in to join a group."
-msgstr ""
-
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-msgid "No nickname or ID."
-msgstr ""
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, php-format
-msgid "%1$s joined group %2$s"
-msgstr ""
-
-#: actions/leavegroup.php:60
-msgid "You must be logged in to leave a group."
-msgstr ""
-
-#: actions/leavegroup.php:100 lib/command.php:373
-msgid "You are not a member of that group."
-msgstr ""
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, php-format
-msgid "%1$s left group %2$s"
-msgstr ""
-
-#: actions/login.php:102 actions/otp.php:62 actions/register.php:144
-msgid "Already logged in."
-msgstr ""
-
 #: actions/login.php:148
 msgid "Incorrect username or password."
 msgstr ""
 
-#: actions/login.php:154 actions/otp.php:120
-msgid "Error setting user. You are probably not authorized."
-msgstr ""
-
-#: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
-msgid "Login"
-msgstr ""
-
 #: actions/login.php:249
 msgid "Login to site"
 msgstr ""
@@ -2292,100 +2057,25 @@ msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
 
-#: actions/makeadmin.php:92
-msgid "Only an admin can make another user an admin."
-msgstr ""
-
-#: actions/makeadmin.php:96
-#, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr ""
-
 #: actions/makeadmin.php:133
 #, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
 msgstr ""
 
-#: actions/makeadmin.php:146
-#, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr ""
-
 #: actions/microsummary.php:69
 msgid "No current status."
 msgstr ""
 
-#: actions/newapplication.php:52
-msgid "New Application"
-msgstr ""
-
-#: actions/newapplication.php:64
-msgid "You must be logged in to register an application."
-msgstr ""
-
-#: actions/newapplication.php:143
-msgid "Use this form to register a new application."
-msgstr ""
-
-#: actions/newapplication.php:176
-msgid "Source URL is required."
-msgstr ""
-
-#: actions/newapplication.php:258 actions/newapplication.php:267
-msgid "Could not create application."
-msgstr ""
-
-#: actions/newgroup.php:53
-msgid "New group"
-msgstr ""
-
-#: actions/newgroup.php:110
-msgid "Use this form to create a new group."
-msgstr ""
-
-#: actions/newmessage.php:71 actions/newmessage.php:231
-msgid "New message"
-msgstr ""
-
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-msgid "You can't send a message to this user."
-msgstr ""
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
-msgid "No content!"
-msgstr ""
-
-#: actions/newmessage.php:158
-msgid "No recipient specified."
-msgstr ""
-
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 
-#: actions/newmessage.php:181
-msgid "Message sent"
-msgstr ""
-
-#: actions/newmessage.php:185
-#, php-format
-msgid "Direct message to %s sent."
-msgstr ""
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
-#: actions/newnotice.php:69
-msgid "New notice"
-msgstr ""
-
-#: actions/newnotice.php:217
-msgid "Notice posted"
-msgstr ""
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2397,11 +2087,6 @@ msgstr ""
 msgid "Text search"
 msgstr ""
 
-#: actions/noticesearch.php:91
-#, php-format
-msgid "Search results for \"%1$s\" on %2$s"
-msgstr ""
-
 #: actions/noticesearch.php:121
 #, php-format
 msgid ""
@@ -2409,23 +2094,6 @@ msgid ""
 "status_textarea=%s)!"
 msgstr ""
 
-#: actions/noticesearch.php:124
-#, php-format
-msgid ""
-"Why not [register an account](%%%%action.register%%%%) and be the first to "
-"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
-msgstr ""
-
-#: actions/noticesearchrss.php:96
-#, php-format
-msgid "Updates with \"%s\""
-msgstr ""
-
-#: actions/noticesearchrss.php:98
-#, php-format
-msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr ""
-
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
@@ -2439,35 +2107,14 @@ msgstr ""
 msgid "Nudge sent!"
 msgstr ""
 
-#: actions/oauthappssettings.php:59
-msgid "You must be logged in to list your applications."
-msgstr ""
-
-#: actions/oauthappssettings.php:74
-msgid "OAuth applications"
-msgstr ""
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-msgid "You are not a user of that application."
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2481,15 +2128,6 @@ msgstr ""
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
-#: actions/oembed.php:80 actions/shownotice.php:100
-msgid "Notice has no profile."
-msgstr ""
-
-#: actions/oembed.php:87 actions/shownotice.php:175
-#, php-format
-msgid "%1$s's status on %2$s"
-msgstr ""
-
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
 #, php-format
@@ -2502,24 +2140,10 @@ msgstr ""
 msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
-#. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
-msgid "Not a supported data format."
-msgstr ""
-
 #: actions/opensearch.php:64
 msgid "People Search"
 msgstr ""
 
-#: actions/opensearch.php:67
-msgid "Notice Search"
-msgstr ""
-
-#: actions/othersettings.php:60
-msgid "Other settings"
-msgstr ""
-
 #: actions/othersettings.php:71
 msgid "Manage various other options."
 msgstr ""
@@ -2544,26 +2168,10 @@ msgstr ""
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr ""
-
-#: actions/otp.php:69
-msgid "No user ID specified."
-msgstr ""
-
-#: actions/otp.php:83
-msgid "No login token specified."
-msgstr ""
-
 #: actions/otp.php:90
 msgid "No login token requested."
 msgstr ""
 
-#: actions/otp.php:95
-msgid "Invalid login token specified."
-msgstr ""
-
 #: actions/otp.php:104
 msgid "Login token expired."
 msgstr ""
@@ -2582,43 +2190,14 @@ msgstr ""
 msgid "This is your outbox, which lists private messages you have sent."
 msgstr ""
 
-#: actions/passwordsettings.php:58
-msgid "Change password"
-msgstr ""
-
-#: actions/passwordsettings.php:69
-msgid "Change your password."
-msgstr ""
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-msgid "Password change"
-msgstr ""
-
-#: actions/passwordsettings.php:104
-msgid "Old password"
-msgstr ""
-
-#: actions/passwordsettings.php:108 actions/recoverpassword.php:235
-msgid "New password"
-msgstr ""
-
 #: actions/passwordsettings.php:109
 msgid "6 or more characters"
 msgstr ""
 
-#: actions/passwordsettings.php:112 actions/recoverpassword.php:239
-#: actions/register.php:440
-msgid "Confirm"
-msgstr ""
-
 #: actions/passwordsettings.php:113 actions/recoverpassword.php:240
 msgid "Same as password above"
 msgstr ""
 
-#: actions/passwordsettings.php:117
-msgid "Change"
-msgstr ""
-
 #: actions/passwordsettings.php:154 actions/register.php:237
 msgid "Password must be 6 or more characters."
 msgstr ""
@@ -2639,24 +2218,11 @@ msgstr ""
 msgid "Can't save new password."
 msgstr ""
 
-#: actions/passwordsettings.php:192 actions/recoverpassword.php:211
-msgid "Password saved."
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:384
 msgid "Paths"
 msgstr ""
 
-#: actions/pathsadminpanel.php:70
-msgid "Path and server settings for this StatusNet site."
-msgstr ""
-
-#: actions/pathsadminpanel.php:157
-#, php-format
-msgid "Theme directory not readable: %s."
-msgstr ""
-
 #: actions/pathsadminpanel.php:163
 #, php-format
 msgid "Avatar directory not writable: %s."
@@ -2676,14 +2242,6 @@ msgstr ""
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-msgid "Site"
-msgstr ""
-
-#: actions/pathsadminpanel.php:238
-msgid "Server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2692,10 +2250,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-msgid "Site path"
-msgstr ""
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2728,38 +2282,6 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-msgid "Avatars"
-msgstr ""
-
-#: actions/pathsadminpanel.php:284
-msgid "Avatar server"
-msgstr ""
-
-#: actions/pathsadminpanel.php:288
-msgid "Avatar path"
-msgstr ""
-
-#: actions/pathsadminpanel.php:292
-msgid "Avatar directory"
-msgstr ""
-
-#: actions/pathsadminpanel.php:301
-msgid "Backgrounds"
-msgstr ""
-
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
-#: actions/pathsadminpanel.php:309
-msgid "Background path"
-msgstr ""
-
-#: actions/pathsadminpanel.php:313
-msgid "Background directory"
-msgstr ""
-
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
 msgstr ""
@@ -2768,10 +2290,6 @@ msgstr ""
 msgid "Never"
 msgstr ""
 
-#: actions/pathsadminpanel.php:324
-msgid "Sometimes"
-msgstr ""
-
 #: actions/pathsadminpanel.php:325
 msgid "Always"
 msgstr ""
@@ -2807,29 +2325,11 @@ msgstr ""
 msgid "People search"
 msgstr ""
 
-#: actions/peopletag.php:68
-#, php-format
-msgid "Not a valid people tag: %s."
-msgstr ""
-
-#: actions/peopletag.php:142
-#, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr ""
-
-#: actions/postnotice.php:95
-msgid "Invalid notice content."
-msgstr ""
-
-#: actions/postnotice.php:101
+#: actions/postnotice.php:101
 #, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#: actions/profilesettings.php:60
-msgid "Profile settings"
-msgstr ""
-
 #: actions/profilesettings.php:71
 msgid ""
 "You can update your personal profile info here so people know more about you."
@@ -2839,10 +2339,6 @@ msgstr ""
 msgid "Profile information"
 msgstr ""
 
-#: actions/profilesettings.php:108 lib/groupeditform.php:154
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
-msgstr ""
-
 #: actions/profilesettings.php:111 actions/register.php:455
 #: actions/showgroup.php:256 actions/tagother.php:104
 #: lib/groupeditform.php:157 lib/userprofile.php:150
@@ -2872,13 +2368,6 @@ msgstr ""
 msgid "Bio"
 msgstr ""
 
-#: actions/profilesettings.php:132 actions/register.php:478
-#: actions/showgroup.php:265 actions/tagother.php:112
-#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:165
-msgid "Location"
-msgstr ""
-
 #: actions/profilesettings.php:134 actions/register.php:480
 msgid "Where you are, like \"City, State (or Region), Country\""
 msgstr ""
@@ -2919,63 +2408,15 @@ msgid ""
 "Automatically subscribe to whoever subscribes to me (best for non-humans)"
 msgstr ""
 
-#: actions/profilesettings.php:228 actions/register.php:230
-#, php-format
-msgid "Bio is too long (max %d chars)."
-msgstr ""
-
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
-#: actions/profilesettings.php:253 actions/tagother.php:178
-#, php-format
-msgid "Invalid tag: \"%s\""
-msgstr ""
-
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
-#: actions/profilesettings.php:363
-msgid "Couldn't save location prefs."
-msgstr ""
-
-#: actions/profilesettings.php:375
-msgid "Couldn't save profile."
-msgstr ""
-
-#: actions/profilesettings.php:383
-msgid "Couldn't save tags."
-msgstr ""
-
-#. TRANS: Message after successful saving of administrative settings.
-#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
-msgid "Settings saved."
-msgstr ""
-
 #: actions/public.php:83
 #, php-format
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
-#: actions/public.php:130
-#, php-format
-msgid "Public timeline, page %d"
-msgstr ""
-
-#: actions/public.php:132 lib/publicgroupnav.php:79
-msgid "Public timeline"
-msgstr ""
-
 #: actions/public.php:160
 msgid "Public Stream Feed (RSS 1.0)"
 msgstr ""
@@ -2988,23 +2429,10 @@ msgstr ""
 msgid "Public Stream Feed (Atom)"
 msgstr ""
 
-#: actions/public.php:188
-#, php-format
-msgid ""
-"This is the public timeline for %%site.name%% but no one has posted anything "
-"yet."
-msgstr ""
-
 #: actions/public.php:191
 msgid "Be the first to post!"
 msgstr ""
 
-#: actions/public.php:195
-#, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and be the first to post!"
-msgstr ""
-
 #: actions/public.php:242
 #, php-format
 msgid ""
@@ -3040,25 +2468,6 @@ msgstr ""
 msgid "Be the first to post one!"
 msgstr ""
 
-#: actions/publictagcloud.php:75
-#, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and be the first to post "
-"one!"
-msgstr ""
-
-#: actions/publictagcloud.php:134
-msgid "Tag cloud"
-msgstr ""
-
-#: actions/recoverpassword.php:36
-msgid "You are already logged in!"
-msgstr ""
-
-#: actions/recoverpassword.php:62
-msgid "No such recovery code."
-msgstr ""
-
 #: actions/recoverpassword.php:66
 msgid "Not a recovery code."
 msgstr ""
@@ -3067,18 +2476,6 @@ msgstr ""
 msgid "Recovery code for unknown user."
 msgstr ""
 
-#: actions/recoverpassword.php:86
-msgid "Error with confirmation code."
-msgstr ""
-
-#: actions/recoverpassword.php:97
-msgid "This confirmation code is too old. Please start again."
-msgstr ""
-
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
@@ -3089,26 +2486,10 @@ msgstr ""
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr ""
 
-#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
-msgid "Recover"
-msgstr ""
-
-#: actions/recoverpassword.php:208
-msgid "Reset password"
-msgstr ""
-
 #: actions/recoverpassword.php:209
 msgid "Recover password"
 msgstr ""
@@ -3129,10 +2510,6 @@ msgstr ""
 msgid "Reset"
 msgstr ""
 
-#: actions/recoverpassword.php:252
-msgid "Enter a nickname or email address."
-msgstr ""
-
 #: actions/recoverpassword.php:282
 msgid "No user with that email address or username."
 msgstr ""
@@ -3151,22 +2528,10 @@ msgid ""
 "address registered to your account."
 msgstr ""
 
-#: actions/recoverpassword.php:357
-msgid "Unexpected password reset."
-msgstr ""
-
 #: actions/recoverpassword.php:365
 msgid "Password must be 6 chars or more."
 msgstr ""
 
-#: actions/recoverpassword.php:369
-msgid "Password and confirmation do not match."
-msgstr ""
-
-#: actions/recoverpassword.php:388 actions/register.php:255
-msgid "Error setting user."
-msgstr ""
-
 #: actions/recoverpassword.php:395
 msgid "New password successfully saved. You are now logged in."
 msgstr ""
@@ -3179,30 +2544,10 @@ msgstr ""
 msgid "Sorry, invalid invitation code."
 msgstr ""
 
-#: actions/register.php:119
-msgid "Registration successful"
-msgstr ""
-
-#: actions/register.php:121 actions/register.php:506 lib/logingroupnav.php:85
-msgid "Register"
-msgstr ""
-
-#: actions/register.php:142
-msgid "Registration not allowed."
-msgstr ""
-
 #: actions/register.php:205
 msgid "You can't register if you don't agree to the license."
 msgstr ""
 
-#: actions/register.php:219
-msgid "Email address already exists."
-msgstr ""
-
-#: actions/register.php:250 actions/register.php:272
-msgid "Invalid username or password."
-msgstr ""
-
 #: actions/register.php:350
 msgid ""
 "With this form you can create a new account. You can then post notices and "
@@ -3217,10 +2562,6 @@ msgstr ""
 msgid "6 or more characters. Required."
 msgstr ""
 
-#: actions/register.php:441
-msgid "Same as password above. Required."
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
 #: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:132
@@ -3305,10 +2646,6 @@ msgstr ""
 msgid "Subscribe to a remote user"
 msgstr ""
 
-#: actions/remotesubscribe.php:129
-msgid "User nickname"
-msgstr ""
-
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
 msgstr ""
@@ -3338,68 +2675,15 @@ msgstr ""
 msgid "That’s a local profile! Login to subscribe."
 msgstr ""
 
-#: actions/remotesubscribe.php:183
-msgid "Couldn’t get a request token."
-msgstr ""
-
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-msgid "No notice specified."
-msgstr ""
-
-#: actions/repeat.php:76
-msgid "You can't repeat your own notice."
-msgstr ""
-
-#: actions/repeat.php:90
-msgid "You already repeated that notice."
-msgstr ""
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-msgid "Repeated"
-msgstr ""
-
-#: actions/repeat.php:119
-msgid "Repeated!"
-msgstr ""
-
-#: actions/replies.php:126 actions/repliesrss.php:68
-#: lib/personalgroupnav.php:105
-#, php-format
-msgid "Replies to %s"
-msgstr ""
-
 #: actions/replies.php:128
 #, php-format
 msgid "Replies to %1$s, page %2$d"
 msgstr ""
 
-#: actions/replies.php:145
-#, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/replies.php:152
-#, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr ""
-
-#: actions/replies.php:159
-#, php-format
-msgid "Replies feed for %s (Atom)"
-msgstr ""
-
-#: actions/replies.php:199
-#, fuzzy, php-format
-msgid ""
-"This is the timeline showing replies to %1$s but %2$s hasn't received a "
-"notice to them yet."
-msgstr ""
-"Dette er tidslinjen for %s og venner, men ingen har skrevet noget endnu."
-
 #: actions/replies.php:204
 #, php-format
 msgid ""
@@ -3414,41 +2698,12 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr ""
-
-#: actions/revokerole.php:75
-msgid "You cannot revoke user roles on this site."
-msgstr ""
-
-#: actions/revokerole.php:82
-msgid "User doesn't have this role."
-msgstr ""
-
-#: actions/rsd.php:146 actions/version.php:159
-msgid "StatusNet"
-msgstr ""
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-msgid "You cannot sandbox users on this site."
-msgstr ""
-
-#: actions/sandbox.php:72
-msgid "User is already sandboxed."
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
 msgid "Sessions"
 msgstr ""
 
-#: actions/sessionsadminpanel.php:65
-msgid "Session settings for this StatusNet site."
-msgstr ""
-
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
 msgstr ""
@@ -3465,41 +2720,11 @@ msgstr ""
 msgid "Turn on debugging output for sessions."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/useradminpanel.php:294
-msgid "Save site settings"
-msgstr ""
-
-#: actions/showapplication.php:82
-msgid "You must be logged in to view an application."
-msgstr ""
-
-#: actions/showapplication.php:157
-msgid "Application profile"
-msgstr ""
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-msgid "Name"
-msgstr ""
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:178 lib/applicationeditform.php:235
-msgid "Organization"
-msgstr ""
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:187 actions/version.php:200
-#: lib/applicationeditform.php:216 lib/groupeditform.php:172
-msgid "Description"
-msgstr ""
-
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
 msgid "Statistics"
@@ -3510,18 +2735,10 @@ msgstr ""
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3548,34 +2765,6 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr ""
-
-#: actions/showfavorites.php:79
-#, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr ""
-
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
-msgstr ""
-
-#: actions/showfavorites.php:171
-#, php-format
-msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr ""
-
-#: actions/showfavorites.php:178
-#, php-format
-msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr ""
-
-#: actions/showfavorites.php:185
-#, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr ""
-
 #: actions/showfavorites.php:206
 msgid ""
 "You haven't chosen any favorite notices yet. Click the fave button on "
@@ -3589,70 +2778,19 @@ msgid ""
 "would add to their favorites :)"
 msgstr ""
 
-#: actions/showfavorites.php:212
-#, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
-"action.register%%%%) and then post something interesting they would add to "
-"their favorites :)"
-msgstr ""
-
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
 msgstr ""
 
-#: actions/showgroup.php:82 lib/groupnav.php:86
-#, php-format
-msgid "%s group"
-msgstr ""
-
-#: actions/showgroup.php:84
-#, php-format
-msgid "%1$s group, page %2$d"
-msgstr ""
-
-#: actions/showgroup.php:227
-msgid "Group profile"
-msgstr ""
-
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-msgid "Note"
-msgstr ""
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
-#: actions/showgroup.php:338
-#, php-format
-msgid "Notice feed for %s group (RSS 1.0)"
-msgstr ""
-
-#: actions/showgroup.php:344
-#, php-format
-msgid "Notice feed for %s group (RSS 2.0)"
-msgstr ""
-
-#: actions/showgroup.php:350
-#, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr ""
-
-#: actions/showgroup.php:355
-#, php-format
-msgid "FOAF for %s group"
-msgstr ""
-
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
 msgstr ""
@@ -3694,68 +2832,15 @@ msgstr ""
 msgid "Admins"
 msgstr ""
 
-#: actions/showmessage.php:81
-msgid "No such message."
-msgstr ""
-
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
 msgstr ""
 
-#: actions/showmessage.php:108
-#, php-format
-msgid "Message to %1$s on %2$s"
-msgstr ""
-
-#: actions/showmessage.php:113
-#, php-format
-msgid "Message from %1$s on %2$s"
-msgstr ""
-
-#: actions/shownotice.php:90
-msgid "Notice deleted."
-msgstr ""
-
-#: actions/showstream.php:73
-#, php-format
-msgid " tagged %s"
-msgstr ""
-
-#: actions/showstream.php:79
-#, php-format
-msgid "%1$s, page %2$d"
-msgstr ""
-
-#: actions/showstream.php:122
-#, php-format
-msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr ""
-
-#: actions/showstream.php:129
-#, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/showstream.php:136
-#, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr ""
-
-#: actions/showstream.php:143
-#, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr ""
-
 #: actions/showstream.php:148
 #, php-format
 msgid "FOAF for %s"
 msgstr ""
 
-#: actions/showstream.php:200
-#, php-format
-msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr ""
-
 #: actions/showstream.php:205
 msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
@@ -3786,31 +2871,10 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, php-format
-msgid "Repeat of %s"
-msgstr ""
-
-#: actions/silence.php:65 actions/unsilence.php:65
-msgid "You cannot silence users on this site."
-msgstr ""
-
-#: actions/silence.php:72
-msgid "User is already silenced."
-msgstr ""
-
-#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site"
-msgstr ""
-
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
 msgstr ""
 
-#: actions/siteadminpanel.php:141
-msgid "You must have a valid contact email address."
-msgstr ""
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -3828,10 +2892,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-msgid "Site name"
-msgstr ""
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -3852,10 +2912,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-msgid "Contact email address for your site"
-msgstr ""
-
 #: actions/siteadminpanel.php:245
 msgid "Local"
 msgstr ""
@@ -3896,82 +2952,28 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-msgid "Site Notice"
-msgstr ""
-
 #: actions/sitenoticeadminpanel.php:67
 msgid "Edit site-wide message"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:103
-msgid "Unable to save site notice."
-msgstr ""
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-msgid "Site notice text"
-msgstr ""
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-msgid "Save site notice"
-msgstr ""
-
-#. TRANS: Title for SMS settings.
-#: actions/smssettings.php:59
-msgid "SMS settings"
-msgstr ""
-
-#. TRANS: SMS settings page instructions.
-#. TRANS: %%site.name%% is the name of the site.
-#: actions/smssettings.php:74
-#, php-format
-msgid "You can receive SMS messages through email from %%site.name%%."
-msgstr ""
-
-#. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
-#: actions/smssettings.php:97
-msgid "SMS is not available."
-msgstr ""
-
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-msgid "SMS address"
-msgstr ""
-
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-msgid "Current confirmed SMS-enabled phone number."
-msgstr ""
-
 #. TRANS: Form guide in IM settings form.
 #: actions/smssettings.php:133
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-msgid "Confirmation code"
-msgstr ""
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr ""
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
@@ -3982,11 +2984,6 @@ msgstr ""
 msgid "Phone number, no punctuation or spaces, with area code"
 msgstr ""
 
-#. TRANS: Form legend for SMS preferences form.
-#: actions/smssettings.php:195
-msgid "SMS preferences"
-msgstr ""
-
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
 msgid ""
@@ -3994,59 +2991,6 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-msgid "SMS preferences saved."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number without having provided one.
-#: actions/smssettings.php:338
-msgid "No phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-msgid "That is already your phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-msgid "That phone number already belongs to another user."
-msgstr ""
-
-#. TRANS: Message given saving valid SMS phone number that is to be confirmed.
-#: actions/smssettings.php:384
-msgid ""
-"A confirmation code was sent to the phone number you added. Check your phone "
-"for the code and instructions on how to use it."
-msgstr ""
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-msgid "That is the wrong confirmation number."
-msgstr ""
-
-#. TRANS: Message given after successfully canceling SMS phone number confirmation.
-#: actions/smssettings.php:427
-msgid "SMS confirmation cancelled."
-msgstr ""
-
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-msgid "That is not your phone number."
-msgstr ""
-
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-msgid "The SMS phone number was removed."
-msgstr ""
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
@@ -4081,18 +3025,10 @@ msgstr ""
 msgid "Manage snapshot configuration"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-msgid "Invalid snapshot report URL."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4125,27 +3061,10 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-msgid "Save snapshot settings"
-msgstr ""
-
-#: actions/subedit.php:70
-msgid "You are not subscribed to that profile."
-msgstr ""
-
-#. TRANS: Exception thrown when a subscription could not be stored on the server.
-#: actions/subedit.php:83 classes/Subscription.php:136
-msgid "Could not save subscription."
-msgstr ""
-
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-msgid "No such profile."
-msgstr ""
-
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
@@ -4159,11 +3078,6 @@ msgstr ""
 msgid "%s subscribers"
 msgstr ""
 
-#: actions/subscribers.php:52
-#, php-format
-msgid "%1$s subscribers, page %2$d"
-msgstr ""
-
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
 msgstr ""
@@ -4184,23 +3098,11 @@ msgstr ""
 msgid "%s has no subscribers. Want to be the first?"
 msgstr ""
 
-#: actions/subscribers.php:114
-#, php-format
-msgid ""
-"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
-"%) and be the first?"
-msgstr ""
-
 #: actions/subscriptions.php:52
 #, php-format
 msgid "%s subscriptions"
 msgstr ""
 
-#: actions/subscriptions.php:54
-#, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr ""
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr ""
@@ -4233,39 +3135,11 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: actions/tag.php:69
-#, php-format
-msgid "Notices tagged with %1$s, page %2$d"
-msgstr ""
-
-#: actions/tag.php:87
-#, php-format
-msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr ""
-
-#: actions/tag.php:93
-#, php-format
-msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr ""
-
-#: actions/tag.php:99
-#, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr ""
-
-#: actions/tagother.php:39
-msgid "No ID argument."
-msgstr ""
-
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
 msgstr ""
 
-#: actions/tagother.php:77 lib/userprofile.php:76
-msgid "User profile"
-msgstr ""
-
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
@@ -4286,34 +3160,6 @@ msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
 msgstr ""
 
-#: actions/tagother.php:200
-msgid "Could not save tags."
-msgstr ""
-
-#: actions/tagother.php:236
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr ""
-
-#: actions/tagrss.php:35
-msgid "No such tag."
-msgstr ""
-
-#: actions/unblock.php:59
-msgid "You haven't blocked that user."
-msgstr ""
-
-#: actions/unsandbox.php:72
-msgid "User is not sandboxed."
-msgstr ""
-
-#: actions/unsilence.php:72
-msgid "User is not silenced."
-msgstr ""
-
-#: actions/unsubscribe.php:77
-msgid "No profile ID in request."
-msgstr ""
-
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
 msgstr ""
@@ -4330,10 +3176,6 @@ msgctxt "TITLE"
 msgid "User"
 msgstr ""
 
-#: actions/useradminpanel.php:70
-msgid "User settings for this StatusNet site."
-msgstr ""
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4361,18 +3203,10 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-msgid "New users"
-msgstr ""
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
 
-#: actions/useradminpanel.php:236
-msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
-
 #: actions/useradminpanel.php:241
 msgid "Default subscription"
 msgstr ""
@@ -4381,10 +3215,6 @@ msgstr ""
 msgid "Automatically subscribe new users to this user."
 msgstr ""
 
-#: actions/useradminpanel.php:251
-msgid "Invitations"
-msgstr ""
-
 #: actions/useradminpanel.php:256
 msgid "Invitations enabled"
 msgstr ""
@@ -4404,35 +3234,14 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:196 actions/version.php:167
-msgid "License"
-msgstr ""
-
-#: actions/userauthorization.php:217
-msgid "Accept"
-msgstr ""
-
-#: actions/userauthorization.php:218 lib/subscribeform.php:115
-#: lib/subscribeform.php:139
-msgid "Subscribe to this user"
-msgstr ""
-
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr ""
 
-#: actions/userauthorization.php:220
-msgid "Reject this subscription"
-msgstr ""
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:254
-msgid "Subscription authorized"
-msgstr ""
-
 #: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4440,10 +3249,6 @@ msgid ""
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:266
-msgid "Subscription rejected"
-msgstr ""
-
 #: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4471,11 +3276,6 @@ msgstr ""
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:345
-#, php-format
-msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
-
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
@@ -4486,51 +3286,19 @@ msgstr ""
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr ""
 
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-msgid "Profile design"
-msgstr ""
-
-#: actions/userdesignsettings.php:87 lib/designsettings.php:76
-msgid ""
-"Customize the way your profile looks with a background image and a colour "
-"palette of your choice."
-msgstr ""
-
 #: actions/userdesignsettings.php:282
 msgid "Enjoy your hotdog!"
 msgstr ""
 
-#. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
-#: actions/usergroups.php:66
-#, php-format
-msgid "%1$s groups, page %2$d"
-msgstr ""
-
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, php-format
-msgid "%s is not a member of any group."
-msgstr ""
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
 msgstr ""
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom group notice feed.
-#. TRANS: %1$s is a group name, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom user notice feed.
-#. TRANS: %1$s is a user name, %2$s is a site name.
-#: actions/userrss.php:97 lib/atomgroupnoticefeed.php:70
-#: lib/atomusernoticefeed.php:76
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
 #: actions/version.php:75
 #, php-format
 msgid "StatusNet %s"
@@ -4574,11 +3342,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-msgid "Version"
-msgstr ""
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4617,38 +3380,11 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-msgid "Invalid filename."
-msgstr ""
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-msgid "Group join failed."
-msgstr ""
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-msgid "Not part of group."
-msgstr ""
-
 #. TRANS: Exception thrown when trying to leave a group fails.
 #: classes/Group_member.php:63
 msgid "Group leave failed."
 msgstr ""
 
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-msgid "Could not update local group."
-msgstr ""
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, php-format
-msgid "Could not create login token for %s"
-msgstr ""
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
@@ -4659,16 +3395,6 @@ msgstr ""
 msgid "You are banned from sending direct messages."
 msgstr ""
 
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-msgid "Could not insert message."
-msgstr ""
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4676,59 +3402,48 @@ msgstr ""
 msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
-#. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, php-format
-msgid "Database error inserting hashtag: %s"
-msgstr ""
-
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr ""
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-msgid "You are banned from posting notices on this site."
-msgstr ""
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr ""
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -4747,51 +3462,16 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-msgid "Missing profile."
-msgstr ""
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-msgid "Unable to save tag."
-msgstr ""
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-msgid "You have been banned from subscribing."
-msgstr ""
-
 #. TRANS: Exception thrown when trying to subscribe while already subscribed.
 #: classes/Subscription.php:80
 msgid "Already subscribed!"
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-msgid "User has blocked you."
-msgstr ""
-
 #. TRANS: Exception thrown when trying to unsibscribe without a subscription.
 #: classes/Subscription.php:171
 msgid "Not subscribed!"
 msgstr ""
 
-#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
-#: classes/Subscription.php:178
-msgid "Could not delete self-subscription."
-msgstr ""
-
-#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
-#: classes/Subscription.php:206
-msgid "Could not delete subscription OMB token."
-msgstr ""
-
-#. TRANS: Exception thrown when a subscription could not be deleted on the server.
-#: classes/Subscription.php:218
-msgid "Could not delete subscription."
-msgstr ""
-
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
 #: classes/User.php:365
@@ -4799,51 +3479,16 @@ msgstr ""
 msgid "Welcome to %1$s, @%2$s!"
 msgstr ""
 
-#. TRANS: Server exception thrown when creating a group failed.
-#: classes/User_group.php:496
-msgid "Could not create group."
-msgstr ""
-
-#. TRANS: Server exception thrown when updating a group URI failed.
-#: classes/User_group.php:506
-msgid "Could not set group URI."
-msgstr ""
-
-#. TRANS: Server exception thrown when setting group membership failed.
-#: classes/User_group.php:529
-msgid "Could not set group membership."
-msgstr ""
-
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-msgid "Could not save local group info."
-msgstr ""
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-msgid "Upload an avatar"
-msgstr ""
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:123
-msgid "Change your password"
-msgstr ""
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-msgid "Design your profile"
-msgstr ""
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -4894,11 +3539,6 @@ msgctxt "TOOLTIP"
 msgid "Connect to services"
 msgstr ""
 
-#. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
-#: lib/action.php:455
-msgid "Connect"
-msgstr ""
-
 #. TRANS: Tooltip for menu option "Admin"
 #: lib/action.php:458
 msgctxt "TOOLTIP"
@@ -4918,47 +3558,12 @@ msgctxt "TOOLTIP"
 msgid "Invite friends and colleagues to join you on %s"
 msgstr ""
 
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-msgctxt "MENU"
-msgid "Invite"
-msgstr ""
-
-#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:474
-msgctxt "TOOLTIP"
-msgid "Logout from the site"
-msgstr ""
-
-#. TRANS: Main menu option when logged in to log out the current user
-#: lib/action.php:477
-msgctxt "MENU"
-msgid "Logout"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
 msgctxt "TOOLTIP"
 msgid "Create an account"
 msgstr ""
 
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-msgctxt "MENU"
-msgid "Register"
-msgstr ""
-
-#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:488
-msgctxt "TOOLTIP"
-msgid "Login to the site"
-msgstr ""
-
-#: lib/action.php:491
-msgctxt "MENU"
-msgid "Login"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
 msgctxt "TOOLTIP"
@@ -4976,27 +3581,11 @@ msgctxt "TOOLTIP"
 msgid "Search for people or text"
 msgstr ""
 
-#: lib/action.php:503
-msgctxt "MENU"
-msgid "Search"
-msgstr ""
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-msgid "Site notice"
-msgstr ""
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-msgid "Page notice"
-msgstr ""
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
 msgid "Secondary site navigation"
@@ -5007,11 +3596,6 @@ msgstr ""
 msgid "Help"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to text about StatusNet site.
-#: lib/action.php:771
-msgid "About"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option leading to Frequently Asked Questions.
 #: lib/action.php:774
 msgid "FAQ"
@@ -5022,21 +3606,11 @@ msgstr ""
 msgid "TOS"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to privacy policy.
-#: lib/action.php:783
-msgid "Privacy"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option.
 #: lib/action.php:786
 msgid "Source"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to contact information on the StatusNet site.
-#: lib/action.php:792
-msgid "Contact"
-msgstr ""
-
 #: lib/action.php:794
 msgid "Badge"
 msgstr ""
@@ -5099,11 +3673,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5133,11 +3702,6 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-msgid "You cannot make changes to this site."
-msgstr ""
-
 #. TRANS: Client error message throw when a certain panel's settings cannot be changed.
 #: lib/adminpanelaction.php:110
 msgid "Changes to that panel are not allowed."
@@ -5153,39 +3717,16 @@ msgstr ""
 msgid "saveSettings() not implemented."
 msgstr ""
 
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-msgid "Unable to delete design setting."
-msgstr ""
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
 msgid "Basic site configuration"
 msgstr ""
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-msgctxt "MENU"
-msgid "Site"
-msgstr ""
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:358
 msgid "Design configuration"
 msgstr ""
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-msgctxt "MENU"
-msgid "Design"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-msgid "User configuration"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
@@ -5193,68 +3734,23 @@ msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:374
-msgid "Access configuration"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-msgid "Paths configuration"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-msgid "Sessions configuration"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-msgid "Edit site notice"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-msgid "Snapshots configuration"
-msgstr ""
-
-#. TRANS: Client error 401.
-#: lib/apiauth.php:113
-msgid "API resource requires read-write access, but you only have read access."
-msgstr ""
-
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, php-format
-msgid "Describe your application in %d characters"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:213
-msgid "Describe your application"
+msgid "Access configuration"
 msgstr ""
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-msgid "URL of the homepage of this application"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:406
+msgid "Snapshots configuration"
 msgstr ""
 
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-msgid "Source URL"
+#. TRANS: Client error 401.
+#: lib/apiauth.php:113
+msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
 #. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
+#: lib/applicationeditform.php:209
+#, php-format
+msgid "Describe your application in %d characters"
 msgstr ""
 
 #. TRANS: Form input field instructions.
@@ -5297,11 +3793,6 @@ msgstr ""
 msgid "Default access for this application: read-only, or read-write"
 msgstr ""
 
-#. TRANS: Submit button title
-#: lib/applicationeditform.php:359
-msgid "Cancel"
-msgstr ""
-
 #. TRANS: Application access type
 #: lib/applicationlist.php:136
 msgid "read-write"
@@ -5318,35 +3809,15 @@ msgstr ""
 msgid "Approved %1$s - \"%2$s\" access."
 msgstr ""
 
-#. TRANS: Button label
-#: lib/applicationlist.php:159
-msgctxt "BUTTON"
-msgid "Revoke"
-msgstr ""
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
-
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
 msgstr ""
 
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:279
-msgid "Provider"
-msgstr ""
-
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
 msgid "Password changing failed"
 msgstr ""
@@ -5355,56 +3826,32 @@ msgstr ""
 msgid "Password changing is not allowed"
 msgstr ""
 
-#: lib/channel.php:157 lib/channel.php:177
-msgid "Command results"
-msgstr ""
-
 #: lib/channel.php:229 lib/mailhandler.php:142
 msgid "Command complete"
 msgstr ""
 
-#: lib/channel.php:240
-msgid "Command failed"
-msgstr ""
-
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr ""
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr ""
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr ""
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
+#: lib/command.php:240
 #, php-format
-msgid "Nudge sent to %s"
+msgid "Nudge sent to %s."
 msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5412,55 +3859,34 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
-msgid "Notice marked as fave."
-msgstr ""
-
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr ""
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr ""
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr ""
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr ""
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr ""
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr ""
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr ""
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5469,145 +3895,115 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr ""
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr ""
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr ""
-
 #. TRANS: Message given having repeated a notice from another user.
 #. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
+#: lib/command.php:554
 #, php-format
-msgid "Notice from %s repeated"
-msgstr ""
-
-#: lib/command.php:531
-msgid "Error repeating notice."
+msgid "Notice from %s repeated."
 msgstr ""
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
+#. TRANS: Text shown having sent a reply to a notice successfully.
+#. TRANS: %s is the nickname of the user of the notice the reply was sent to.
+#: lib/command.php:603
 #, php-format
-msgid "Reply to %s sent"
-msgstr ""
-
-#: lib/command.php:573
-msgid "Error saving notice."
+msgid "Reply to %s sent."
 msgstr ""
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
+#. TRANS: Text shown after having subscribed to another user successfully.
+#. TRANS: %s is the name of the user the subscription was requested for.
+#: lib/command.php:672
 #, php-format
-msgid "Subscribed to %s"
-msgstr ""
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+msgid "Subscribed to %s."
 msgstr ""
 
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:685
-msgid "Notification off."
-msgstr ""
-
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
-msgstr ""
-
-#: lib/command.php:710
-msgid "Can't turn on notification."
-msgstr ""
-
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
+#. TRANS: Text shown after issuing the lose command successfully (stop another user from following the current user).
+#. TRANS: %s is the name of the user the unsubscription was requested for.
+#: lib/command.php:813
 #, php-format
-msgid "Unsubscribed  %s"
-msgstr ""
-
-#: lib/command.php:778
-msgid "You are not subscribed to anyone."
+msgid "Unsubscribed %s."
 msgstr ""
 
-#: lib/command.php:780
-#, fuzzy
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
-msgstr[0] "You are subscribed to this person:"
-msgstr[1] "You are subscribed to these people:"
+msgstr[0] ""
+msgstr[1] ""
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr ""
 
-#: lib/command.php:802
-#, fuzzy
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
-msgstr[0] "This person is subscribed to you:"
-msgstr[1] "These people are subscribed to you:"
-
-#: lib/command.php:822
-msgid "You are not a member of any groups."
-msgstr ""
-
-#: lib/command.php:824
-#, fuzzy
-msgid "You are a member of this group:"
-msgid_plural "You are a member of these groups:"
-msgstr[0] "You are a member of this group:"
-msgstr[1] "You are a member of these groups:"
+msgstr[0] ""
+msgstr[1] ""
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5649,10 +4045,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-msgid "No configuration file found. "
-msgstr ""
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5677,39 +4069,10 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-msgid "Connections"
-msgstr ""
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-msgid "Upload file"
-msgstr ""
-
-#: lib/designsettings.php:109
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr ""
-
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-msgid "Disfavor this notice"
-msgstr ""
-
-#: lib/favorform.php:114 lib/favorform.php:140
-msgid "Favor this notice"
-msgstr ""
-
 #: lib/favorform.php:140
 msgid "Favor"
 msgstr ""
@@ -5738,10 +4101,6 @@ msgstr ""
 msgid "Filter tags"
 msgstr ""
 
-#: lib/galleryaction.php:131
-msgid "All"
-msgstr ""
-
 #: lib/galleryaction.php:139
 msgid "Select tag to filter"
 msgstr ""
@@ -5786,24 +4145,6 @@ msgstr ""
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
-#: lib/groupnav.php:85
-msgid "Group"
-msgstr ""
-
-#: lib/groupnav.php:101
-msgid "Blocked"
-msgstr ""
-
-#: lib/groupnav.php:102
-#, php-format
-msgid "%s blocked users"
-msgstr ""
-
-#: lib/groupnav.php:108
-#, php-format
-msgid "Edit %s group properties"
-msgstr ""
-
 #: lib/groupnav.php:113
 msgid "Logo"
 msgstr ""
@@ -5818,10 +4159,6 @@ msgstr ""
 msgid "Add or edit %s design"
 msgstr ""
 
-#: lib/groupsbymemberssection.php:71
-msgid "Groups with most members"
-msgstr ""
-
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
 msgstr ""
@@ -5836,19 +4173,6 @@ msgstr ""
 msgid "This page is not available in a media type you accept"
 msgstr ""
 
-#: lib/imagefile.php:72
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:88
-#, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr ""
-
-#: lib/imagefile.php:93
-msgid "Partial upload."
-msgstr ""
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -5857,10 +4181,6 @@ msgstr ""
 msgid "Not an image or corrupt file."
 msgstr ""
 
-#: lib/imagefile.php:122
-msgid "Lost our file."
-msgstr ""
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr ""
@@ -5887,10 +4207,6 @@ msgstr ""
 msgid "Join"
 msgstr ""
 
-#: lib/leaveform.php:114
-msgid "Leave"
-msgstr ""
-
 #: lib/logingroupnav.php:80
 msgid "Login with a username and password"
 msgstr ""
@@ -5899,11 +4215,6 @@ msgstr ""
 msgid "Sign up for a new account"
 msgstr ""
 
-#. TRANS: Subject for address confirmation email
-#: lib/mail.php:174
-msgid "Email address confirmation"
-msgstr ""
-
 #. TRANS: Body for address confirmation email.
 #: lib/mail.php:177
 #, php-format
@@ -5957,12 +4268,6 @@ msgstr ""
 msgid "Bio: %s"
 msgstr ""
 
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, php-format
-msgid "New email address for posting to %s"
-msgstr ""
-
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
 #, php-format
@@ -5983,11 +4288,6 @@ msgstr ""
 msgid "%s status"
 msgstr ""
 
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-msgid "SMS confirmation"
-msgstr ""
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6017,12 +4317,6 @@ msgid ""
 "%4$s\n"
 msgstr ""
 
-#. TRANS: Subject for direct-message notification email
-#: lib/mail.php:536
-#, php-format
-msgid "New private message from %s"
-msgstr ""
-
 #. TRANS: Body for direct-message notification email
 #: lib/mail.php:541
 #, php-format
@@ -6043,12 +4337,6 @@ msgid ""
 "%5$s\n"
 msgstr ""
 
-#. TRANS: Subject for favorite notification email
-#: lib/mail.php:589
-#, php-format
-msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
-
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
 #, php-format
@@ -6123,31 +4411,14 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr ""
 
-#: lib/mailhandler.php:37
-msgid "Could not parse message."
-msgstr ""
-
 #: lib/mailhandler.php:42
 msgid "Not a registered user."
 msgstr ""
 
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
-#: lib/mailhandler.php:50
-msgid "Sorry, no incoming email allowed."
-msgstr ""
-
-#: lib/mailhandler.php:228
-#, php-format
-msgid "Unsupported message type: %s"
-msgstr ""
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6186,10 +4457,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-msgid "Could not determine file's MIME type."
-msgstr ""
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6200,59 +4467,42 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-msgid "Send a direct notice"
-msgstr ""
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr ""
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr ""
 
-#: lib/noticeform.php:160
-msgid "Send a notice"
-msgstr ""
-
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr ""
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr ""
 
-#: lib/noticeform.php:215
-msgid "Do not share my location"
-msgstr ""
-
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-msgid "N"
-msgstr ""
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6277,62 +4527,30 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-msgid "in context"
-msgstr ""
-
-#: lib/noticelist.php:602
-msgid "Repeated by"
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/noticelist.php:629
-msgid "Reply to this notice"
+#: lib/noticelist.php:568
+msgid "in context"
 msgstr ""
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr ""
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr ""
 
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
-
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
-#: lib/oauthstore.php:283
-msgid "Error inserting new profile"
-msgstr ""
-
 #: lib/oauthstore.php:291
 msgid "Error inserting avatar"
 msgstr ""
 
-#: lib/oauthstore.php:306
-msgid "Error updating remote profile"
-msgstr ""
-
-#: lib/oauthstore.php:311
-msgid "Error inserting remote profile"
-msgstr ""
-
-#: lib/oauthstore.php:345
-msgid "Duplicate notice"
-msgstr ""
-
-#: lib/oauthstore.php:490
-msgid "Couldn't insert new subscription."
-msgstr ""
-
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr ""
@@ -6341,26 +4559,14 @@ msgstr ""
 msgid "Replies"
 msgstr ""
 
-#: lib/personalgroupnav.php:114
-msgid "Favorites"
-msgstr ""
-
 #: lib/personalgroupnav.php:125
 msgid "Inbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:126
-msgid "Your incoming messages"
-msgstr ""
-
 #: lib/personalgroupnav.php:130
 msgid "Outbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:131
-msgid "Your sent messages"
-msgstr ""
-
 #: lib/personaltagcloudsection.php:56
 #, php-format
 msgid "Tags in %s's notices"
@@ -6399,10 +4605,6 @@ msgstr ""
 msgid "Daily average"
 msgstr ""
 
-#: lib/profileaction.php:264
-msgid "All groups"
-msgstr ""
-
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
 msgstr ""
@@ -6411,43 +4613,10 @@ msgstr ""
 msgid "Public"
 msgstr ""
 
-#: lib/publicgroupnav.php:82
-msgid "User groups"
-msgstr ""
-
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
 msgid "Recent tags"
 msgstr ""
 
-#: lib/publicgroupnav.php:88
-msgid "Featured"
-msgstr ""
-
-#: lib/publicgroupnav.php:92
-msgid "Popular"
-msgstr ""
-
-#: lib/redirectingaction.php:95
-msgid "No return-to arguments."
-msgstr ""
-
-#: lib/repeatform.php:107
-msgid "Repeat this notice?"
-msgstr ""
-
-#: lib/repeatform.php:132
-msgid "Yes"
-msgstr ""
-
-#: lib/repeatform.php:132
-msgid "Repeat this notice"
-msgstr ""
-
-#: lib/revokeroleform.php:91
-#, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr ""
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
@@ -6456,10 +4625,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr ""
 
-#: lib/sandboxform.php:78
-msgid "Sandbox this user"
-msgstr ""
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr ""
@@ -6468,10 +4633,6 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
-#: lib/searchaction.php:127
-msgid "Search"
-msgstr ""
-
 #: lib/searchaction.php:162
 msgid "Search help"
 msgstr ""
@@ -6488,10 +4649,6 @@ msgstr ""
 msgid "Find content of notices"
 msgstr ""
 
-#: lib/searchgroupnav.php:85
-msgid "Find groups on this site"
-msgstr ""
-
 #: lib/section.php:89
 msgid "Untitled section"
 msgstr ""
@@ -6504,10 +4661,6 @@ msgstr ""
 msgid "Silence"
 msgstr ""
 
-#: lib/silenceform.php:78
-msgid "Silence this user"
-msgstr ""
-
 #: lib/subgroupnav.php:83
 #, php-format
 msgid "People %s subscribes to"
@@ -6518,15 +4671,6 @@ msgstr ""
 msgid "People subscribed to %s"
 msgstr ""
 
-#: lib/subgroupnav.php:99
-#, php-format
-msgid "Groups %s is a member of"
-msgstr ""
-
-#: lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
-
 #: lib/subgroupnav.php:106
 #, php-format
 msgid "Invite friends and colleagues to join you on %s"
@@ -6542,10 +4686,6 @@ msgstr ""
 msgid "People Tagcloud as tagged"
 msgstr ""
 
-#: lib/tagcloudsection.php:56
-msgid "None"
-msgstr ""
-
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
 msgstr ""
@@ -6554,12 +4694,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-msgid "Failed saving theme."
-msgstr ""
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6584,10 +4718,6 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-msgid "Error opening theme archive."
-msgstr ""
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
@@ -6596,35 +4726,14 @@ msgstr ""
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-msgid "Unsandbox this user"
-msgstr ""
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-msgid "Unsilence this user"
-msgstr ""
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-msgid "Unsubscribe from this user"
-msgstr ""
-
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr ""
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr ""
-
-#: lib/userprofile.php:117
-msgid "Edit Avatar"
-msgstr ""
-
 #: lib/userprofile.php:234 lib/userprofile.php:248
 msgid "User actions"
 msgstr ""
@@ -6633,18 +4742,10 @@ msgstr ""
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-msgid "Edit profile settings"
-msgstr ""
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
 
-#: lib/userprofile.php:287
-msgid "Send a direct message to this user"
-msgstr ""
-
 #: lib/userprofile.php:288
 msgid "Message"
 msgstr ""
@@ -6653,10 +4754,6 @@ msgstr ""
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-msgid "User role"
-msgstr ""
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -6668,70 +4765,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
-#: lib/webcolor.php:82
-#, php-format
-msgid "%s is not a valid color!"
-msgstr ""
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 5a52a7c0cba325291d5996fbb7461421bd72c584..bf1e08955c17fa08cb2873c6344fa487c17a0bce 100644 (file)
@@ -16,12 +16,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:17+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:25+0000\n"
 "Language-Team: German\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: de\n"
 "X-Message-Group: out-statusnet\n"
@@ -97,6 +97,7 @@ msgstr "Speichern"
 msgid "No such page."
 msgstr "Seite nicht vorhanden"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -116,7 +117,7 @@ msgstr "Seite nicht vorhanden"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Unbekannter Benutzer."
@@ -161,7 +162,7 @@ msgstr "Feed der Freunde von %s (Atom)"
 msgid ""
 "This is the timeline for %s and friends but no one has posted anything yet."
 msgstr ""
-"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
+"Dies ist die Zeitleiste von %s und Freunden, aber bisher hat niemand etwas "
 "gepostet."
 
 #: actions/all.php:143
@@ -189,7 +190,7 @@ msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"Warum [registrierst du nicht ein Benutzerkonto](%%%%action.register%%%%) und "
 "gibst %s dann einen Stups oder postest ihm etwas."
 
 #. TRANS: H1 text
@@ -249,7 +250,7 @@ msgid ""
 "You must specify a parameter named 'device' with a value of one of: sms, im, "
 "none."
 msgstr ""
-"Du musst einen Parameter mit Namen 'device' übergeben. Mögliche Werte sind: "
+"Du musst einen Parameter mit Namen „device“ übergeben. Mögliche Werte sind: "
 "sms, im, none."
 
 #: actions/apiaccountupdatedeliverydevice.php:133
@@ -314,7 +315,7 @@ msgstr "Freigeben des Benutzers fehlgeschlagen."
 #: actions/apidirectmessage.php:89
 #, php-format
 msgid "Direct messages from %s"
-msgstr "Direkte Nachricht an %s"
+msgstr "Direkte Nachrichten von %s"
 
 #: actions/apidirectmessage.php:93
 #, php-format
@@ -324,7 +325,7 @@ msgstr "Alle von %s gesendeten direkten Nachrichten"
 #: actions/apidirectmessage.php:101
 #, php-format
 msgid "Direct messages to %s"
-msgstr "Direkte Nachricht an %s"
+msgstr "Direkte Nachrichten an %s"
 
 #: actions/apidirectmessage.php:105
 #, php-format
@@ -339,7 +340,7 @@ msgstr "Fehlender Nachrichtentext!"
 #, php-format
 msgid "That's too long. Max message size is %d chars."
 msgstr ""
-"Die Nachricht ist zu lang. Die maximale Nachrichtenlänge ist 140 Zeichen."
+"Die Nachricht ist zu lang. Die maximale Nachrichtenlänge ist %d Zeichen."
 
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
@@ -360,7 +361,8 @@ msgstr "Keine Nachricht mit dieser ID gefunden."
 msgid "This status is already a favorite."
 msgstr "Diese Nachricht ist bereits ein Favorit!"
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Konnte keinen Favoriten erstellen."
 
@@ -427,7 +429,7 @@ msgstr "Ungültiger Nutzername."
 #: actions/register.php:224
 msgid "Homepage is not a valid URL."
 msgstr ""
-"Homepage ist keine gültige URL. URLs müssen ein Präfix wie http enthalten."
+"Homepage ist keine gültige URL. URLs müssen ein Präfix wie http enthalten."
 
 #: actions/apigroupcreate.php:208 actions/editgroup.php:202
 #: actions/newgroup.php:142 actions/profilesettings.php:225
@@ -467,7 +469,7 @@ msgstr "Nutzername „%s“ wird bereits verwendet. Suche dir einen anderen aus.
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
-msgstr "Alias kann nicht das gleiche wie der Spitznamen sein."
+msgstr "Alias kann nicht das gleiche wie der Spitzname sein."
 
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
@@ -475,24 +477,31 @@ msgstr "Alias kann nicht das gleiche wie der Spitznamen sein."
 msgid "Group not found."
 msgstr "Gruppe nicht gefunden!"
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Du bist bereits Mitglied dieser Gruppe"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Der Admin dieser Gruppe hat dich gesperrt."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "Konnte Benutzer %s nicht der Gruppe %s hinzufügen."
+msgstr "Konnte Benutzer %1$s nicht der Gruppe %2$s hinzufügen."
 
 #: actions/apigroupleave.php:115
 msgid "You are not a member of this group."
 msgstr "Du bist kein Mitglied dieser Gruppe."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Konnte Benutzer %1$s nicht aus der Gruppe %2$s entfernen."
@@ -501,7 +510,7 @@ msgstr "Konnte Benutzer %1$s nicht aus der Gruppe %2$s entfernen."
 #: actions/apigrouplist.php:98
 #, php-format
 msgid "%s's groups"
-msgstr "%s’s Gruppen"
+msgstr "Gruppen von %s"
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
@@ -557,7 +566,7 @@ msgstr "Benutzername oder Passwort falsch."
 
 #: actions/apioauthauthorize.php:159
 msgid "Database error deleting OAuth application user."
-msgstr "Datenbank Fehler beim Löschen des OAuth Anwendungs Nutzers."
+msgstr "Datenbankfehler beim Löschen des OAuth Anwendungs Nutzers."
 
 #: actions/apioauthauthorize.php:185
 msgid "Database error inserting OAuth application user."
@@ -652,11 +661,13 @@ msgstr "Du kannst den Status eines anderen Benutzers nicht löschen."
 msgid "No such notice."
 msgstr "Unbekannte Nachricht."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Du kannst deine eigenen Nachrichten nicht wiederholen."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Nachricht bereits wiederholt"
 
@@ -674,7 +685,7 @@ msgstr ""
 "Der Client muss einen „status“-Parameter mit einen Wert zur Verfügung "
 "stellen."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -685,7 +696,7 @@ msgstr ""
 msgid "Not found."
 msgstr "Nicht gefunden."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -803,7 +814,7 @@ msgid "Preview"
 msgstr "Vorschau"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Löschen"
 
@@ -854,7 +865,7 @@ msgid ""
 "unsubscribed from you, unable to subscribe to you in the future, and you "
 "will not be notified of any @-replies from them."
 msgstr ""
-"Bist du sicher, dass du den Benutzer blockieren willst?  Die Verbindung zum "
+"Bist du sicher, dass du den Benutzer blockieren willst? Die Verbindung zum "
 "Benutzer wird gelöscht, dieser kann dich in Zukunft nicht mehr abonnieren "
 "und bekommt keine @-Antworten."
 
@@ -897,6 +908,8 @@ msgstr "Diesen Benutzer blockieren"
 msgid "Failed to save block information."
 msgstr "Konnte Blockierungsdaten nicht speichern."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -906,8 +919,8 @@ msgstr "Konnte Blockierungsdaten nicht speichern."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Keine derartige Gruppe."
 
@@ -1084,7 +1097,7 @@ msgid "Do not delete this notice"
 msgstr "Diese Nachricht nicht löschen"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Nachricht löschen"
 
@@ -1176,7 +1189,7 @@ msgid ""
 "You can upload a background image for the site. The maximum file size is %1"
 "$s."
 msgstr ""
-"Du kannst ein Hintergrundbild für Deine Gruppe hochladen. Die maximale "
+"Du kannst ein Hintergrundbild für deine Gruppe hochladen. Die maximale "
 "Dateigröße beträgt %1$s."
 
 #. TRANS: Used as radio button label to add a background image.
@@ -1263,7 +1276,7 @@ msgstr "Zu Favoriten hinzufügen"
 #: actions/doc.php:158
 #, php-format
 msgid "No such document \"%s\""
-msgstr "Unbekanntes Dokument \"%s\""
+msgstr "Unbekanntes Dokument „%s“"
 
 #: actions/editapplication.php:54
 msgid "Edit Application"
@@ -1305,7 +1318,7 @@ msgstr "Homepage ist zu lang."
 #: actions/editapplication.php:200 actions/newapplication.php:185
 msgid "Source URL is not valid."
 msgstr ""
-"Homepage ist keine gültige URL. URLs müssen ein Präfix wie http enthalten."
+"Homepage ist keine gültige URL. URLs müssen ein Präfix wie http enthalten."
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
@@ -1325,7 +1338,7 @@ msgstr "Antwort ist zu lang"
 
 #: actions/editapplication.php:225 actions/newapplication.php:215
 msgid "Callback URL is not valid."
-msgstr "Antwort URL ist nicht gültig"
+msgstr "Antwort-URL ist nicht gültig"
 
 #: actions/editapplication.php:258
 msgid "Could not update application."
@@ -1412,7 +1425,7 @@ msgid ""
 "Awaiting confirmation on this address. Check your inbox (and spam box!) for "
 "a message with further instructions."
 msgstr ""
-"Warte auf die Bestätigung dieser Adresse. Prüfe Deinen Nachrichteneingang "
+"Warte auf die Bestätigung dieser Adresse. Prüfe deinen Nachrichteneingang "
 "(auch den Spam-Ordner) auf eine Nachricht mit weiteren Instruktionen."
 
 #. TRANS: Button label to cancel an e-mail address confirmation procedure.
@@ -1449,7 +1462,7 @@ msgstr "Eingehende E-Mail"
 #. TRANS: Form instructions for incoming SMS e-mail address form in SMS settings.
 #: actions/emailsettings.php:155 actions/smssettings.php:178
 msgid "Send email to this address to post new notices."
-msgstr "Schicke ein E-Mail an diese Adresse um eine Nachricht zu posten."
+msgstr "Schicke eine E-Mail an diese Adresse um eine Nachricht zu posten."
 
 #. TRANS: Instructions for incoming e-mail address input form.
 #. TRANS: Instructions for incoming SMS e-mail address input form.
@@ -1511,7 +1524,7 @@ msgstr "MicroID für meine E-Mail-Adresse veröffentlichen."
 #. TRANS: Confirmation message for successful e-mail preferences save.
 #: actions/emailsettings.php:334
 msgid "Email preferences saved."
-msgstr "E-Mail Einstellungen gespeichert."
+msgstr "E-Mail-Einstellungen gespeichert."
 
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
@@ -1573,7 +1586,7 @@ msgstr "Dies ist die falsche E-Mail Adresse"
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
 msgid "Email confirmation cancelled."
-msgstr "E-Mail Bestätigung abgebrochen."
+msgstr "E-Mail-Bestätigung abgebrochen."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1584,7 +1597,7 @@ msgstr "Dies ist nicht deine E-Mail-Adresse."
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
 msgid "The email address was removed."
-msgstr "Die E-Mail Adresse wurde entfernt."
+msgstr "Die E-Mail-Adresse wurde entfernt."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1649,7 +1662,7 @@ msgid ""
 "Why not [register an account](%%action.register%%) and be the first to add a "
 "notice to your favorites!"
 msgstr ""
-"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"Warum [registrierst du nicht einen Account](%%%%action.register%%%%) und "
 "bist der erste der eine Nachricht favorisiert!"
 
 #: actions/favoritesrss.php:111 actions/showfavorites.php:77
@@ -1680,7 +1693,7 @@ msgstr "Eine Auswahl toller Benutzer auf %s"
 
 #: actions/file.php:34
 msgid "No notice ID."
-msgstr "Keine Nachrichten ID"
+msgstr "Keine Nachrichten-ID"
 
 #: actions/file.php:38
 msgid "No notice."
@@ -1748,7 +1761,7 @@ msgstr "Auf dieser Seite können keine Benutzerrollen gewährt werden."
 
 #: actions/grantrole.php:82
 msgid "User already has this role."
-msgstr "Nutzer hat diese Aufgabe bereits"
+msgstr "Nutzer hat bereits diese Aufgabe"
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1790,10 +1803,9 @@ msgid ""
 "will be removed from the group, unable to post, and unable to subscribe to "
 "the group in the future."
 msgstr ""
-"Bist du sicher, dass du den Benutzer \"%1$s\" in der Gruppe \"%2$s\" "
-"blockieren willst? Er wird aus der Gruppe gelöscht, kann keine Beiträge mehr "
-"abschicken und wird auch in Zukunft dieser Gruppe nicht mehr beitreten "
-"können."
+"Bist du sicher, dass du den Benutzer „%1$s“ in der Gruppe „%2$s“ blockieren "
+"willst? Er wird aus der Gruppe gelöscht, kann keine Beiträge mehr abschicken "
+"und wird auch in Zukunft dieser Gruppe nicht mehr beitreten können."
 
 #. TRANS: Submit button title for 'No' when blocking a user from a group.
 #: actions/groupblock.php:182
@@ -1807,7 +1819,7 @@ msgstr "Diesen Nutzer von der Gruppe sperren"
 
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
-msgstr "Datenbank Fehler beim Versuch den Nutzer aus der Gruppe zu blockieren."
+msgstr "Datenbankfehler beim Versuch den Nutzer aus der Gruppe zu blockieren."
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
 msgid "No ID."
@@ -1847,7 +1859,7 @@ msgstr "Gruppen-Logo"
 msgid ""
 "You can upload a logo image for your group. The maximum file size is %s."
 msgstr ""
-"Du kannst ein Logo für Deine Gruppe hochladen. Die maximale Dateigröße ist %"
+"Du kannst ein Logo für deine Gruppe hochladen. Die maximale Dateigröße ist %"
 "s."
 
 #: actions/grouplogo.php:365
@@ -1930,11 +1942,11 @@ msgid ""
 "for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
 "%%%%)"
 msgstr ""
-"Finde und rede mit Gleichgesinnten in %%%%site.name%%%% Gruppen. Nachdem du "
-"einer Gruppe beigetreten bis kannst du mit \\\"!Gruppenname\\\" eine "
-"Nachricht an alle Gruppenmitglieder schicken. Du kannst nach einer [Gruppe "
-"suchen](%%%%action.groupsearch%%%%) oder deine eigene [Gruppe aufmachen!](%%%"
-"%action.newgroup%%%%)"
+"Finde und rede mit Gleichgesinnten in %%%%site.name%%%%-Gruppen. Nachdem du "
+"einer Gruppe beigetreten bist kannst du mit „!Gruppenname“ eine Nachricht an "
+"alle Gruppenmitglieder schicken. Du kannst nach einer [Gruppe suchen](%%%%"
+"action.groupsearch%%%%) oder deine eigene [Gruppe aufmachen!](%%%%action."
+"newgroup%%%%)"
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
 msgid "Create a new group"
@@ -1974,7 +1986,7 @@ msgid ""
 "Why not [register an account](%%action.register%%) and [create the group](%%"
 "action.newgroup%%) yourself!"
 msgstr ""
-"Warum [registrierst Du nicht einen Account](%%action.register%%) und [legst "
+"Warum [registrierst du nicht einen Account](%%action.register%%) und [legst "
 "diese Gruppe selbst an](%%action.newgroup%%)?"
 
 #: actions/groupunblock.php:91
@@ -2048,7 +2060,7 @@ msgstr ""
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
 msgid "IM preferences"
-msgstr "IM Einstellungen"
+msgstr "IM-Einstellungen"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2085,7 +2097,7 @@ msgstr "Keine Jabber-ID"
 #. TRANS: Message given saving IM address that cannot be normalised.
 #: actions/imsettings.php:317
 msgid "Cannot normalize that Jabber ID"
-msgstr "Konnte diese Jabber ID nicht normalisieren"
+msgstr "Konnte diese Jabber-ID nicht normalisieren"
 
 #. TRANS: Message given saving IM address that not valid.
 #: actions/imsettings.php:322
@@ -2095,12 +2107,12 @@ msgstr "Ungültige Jabber-ID"
 #. TRANS: Message given saving IM address that is already set.
 #: actions/imsettings.php:326
 msgid "That is already your Jabber ID."
-msgstr "Diese JabberID hast du schon angegeben."
+msgstr "Diese Jabber-ID hast du schon angegeben."
 
 #. TRANS: Message given saving IM address that is already set for another user.
 #: actions/imsettings.php:330
 msgid "Jabber ID already belongs to another user."
-msgstr "Diese Jabber ID wird bereits von einem anderen Benutzer verwendet."
+msgstr "Diese Jabber-ID wird bereits von einem anderen Benutzer verwendet."
 
 #. TRANS: Message given saving valid IM address that is to be confirmed.
 #. TRANS: %s is the IM address set for the site.
@@ -2121,23 +2133,23 @@ msgstr "Das ist die falsche IM-Adresse."
 #. TRANS: Server error thrown on database error canceling IM address confirmation.
 #: actions/imsettings.php:397
 msgid "Couldn't delete IM confirmation."
-msgstr "Konnte die IM Bestätigung nicht löschen."
+msgstr "Konnte die IM-Bestätigung nicht löschen."
 
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
 msgid "IM confirmation cancelled."
-msgstr "IM Bestätigung abgebrochen."
+msgstr "IM-Bestätigung abgebrochen."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
 #: actions/imsettings.php:424
 msgid "That is not your Jabber ID."
-msgstr "Dies ist nicht deine JabberID."
+msgstr "Dies ist nicht deine Jabber-ID."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
 msgid "The IM address was removed."
-msgstr "Die IM Adresse wurde entfernt."
+msgstr "Die IM-Adresse wurde entfernt."
 
 #: actions/inbox.php:59
 #, php-format
@@ -2183,7 +2195,7 @@ msgstr "Du hast diese Benutzer bereits abonniert:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2192,7 +2204,7 @@ msgstr "%1$s (%2$s)"
 msgid ""
 "These people are already users and you were automatically subscribed to them:"
 msgstr ""
-"Diese Leute sind bereits registrierte Benutzer und Du hast Sie automatisch "
+"Diese Leute sind bereits registrierte Benutzer und du hast Sie automatisch "
 "abonniert."
 
 #: actions/invite.php:144
@@ -2220,7 +2232,7 @@ msgstr "E-Mail-Adressen"
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
 msgstr ""
-"Adressen von Freunden, die Du einladen möchtest. (Jeweils eine Adresse pro "
+"Adressen von Freunden, die du einladen möchtest. (Jeweils eine Adresse pro "
 "Zeile)"
 
 #: actions/invite.php:192
@@ -2243,7 +2255,7 @@ msgstr "Senden"
 #: actions/invite.php:228
 #, php-format
 msgid "%1$s has invited you to join them on %2$s"
-msgstr "%1$s hat Dich eingeladen, auch bei %2$s mitzumachen."
+msgstr "%1$s hat dich eingeladen, auch bei %2$s mitzumachen."
 
 #. TRANS: Body text for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:231
@@ -2276,12 +2288,12 @@ msgid ""
 "\n"
 "Sincerely, %2$s\n"
 msgstr ""
-"%1$s hat Dich eingeladen, auch bei %2$s mitzumachen. (%3$s).\n"
+"%1$s hat dich eingeladen, auch bei %2$s mitzumachen. (%3$s).\n"
 "\n"
-"%2$s ist ein Microblogging-Service der Dich über Deine Freunde auf dem "
-"Laufenden hält und Deine Freunde über Dich informiert. \n"
+"%2$s ist ein Microblogging-Service, der dich über deine Freunde auf dem "
+"Laufenden hält und deine Freunde über dich informiert. \n"
 "\n"
-"Du kannst Neuigkeiten über Dich und Deine Gedanken verbreiten. Lerne neue "
+"Du kannst Neuigkeiten über dich und deine Gedanken verbreiten. Lerne neue "
 "Leute mit ähnlichen Interessen kennen. \n"
 "\n"
 "%1$s sagte:\n"
@@ -2292,12 +2304,12 @@ msgstr ""
 "\n"
 "%5$s\n"
 "\n"
-"Wenn Du den Service ausprobieren möchtest klicke den Link unten an, um die "
+"Wenn du den Service ausprobieren möchtest, klicke den Link unten an, um die "
 "Einladung anzunehmen.\n"
 "\n"
 "%6$s\n"
 "\n"
-"Wenn nicht, ignoriere diese Nachricht. Danke für Deine Geduld und Deine "
+"Wenn nicht, ignoriere diese Nachricht. Danke für deine Geduld und deine "
 "Zeit\n"
 "\n"
 "Schöne Grüße von %2$s\n"
@@ -2310,9 +2322,7 @@ msgstr "Du musst angemeldet sein, um Mitglied einer Gruppe zu werden."
 msgid "No nickname or ID."
 msgstr "Kein Benutzername oder ID"
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s ist der Gruppe %2$s beigetreten"
@@ -2321,13 +2331,12 @@ msgstr "%1$s ist der Gruppe %2$s beigetreten"
 msgid "You must be logged in to leave a group."
 msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Du bist kein Mitglied dieser Gruppe."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s hat die Gruppe %2$s verlassen"
@@ -2343,7 +2352,7 @@ msgstr "Falscher Benutzername oder Passwort."
 #: actions/login.php:154 actions/otp.php:120
 msgid "Error setting user. You are probably not authorized."
 msgstr ""
-"Fehler beim setzen des Benutzers. Du bist vermutlich nicht autorisiert."
+"Fehler beim Setzen des Benutzers. Du bist vermutlich nicht autorisiert."
 
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
@@ -2392,7 +2401,7 @@ msgstr "Nur Administratoren können andere Nutzer zu Administratoren ernennen."
 #: actions/makeadmin.php:96
 #, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "%1$s ist bereits Administrator der Gruppe \"%2$s\"."
+msgstr "%1$s ist bereits Administrator der Gruppe „%2$s“."
 
 #: actions/makeadmin.php:133
 #, php-format
@@ -2434,18 +2443,21 @@ msgstr "Neue Gruppe"
 
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
-msgstr "Benutzer dieses Formular, um eine neue Gruppe zu erstellen."
+msgstr "Benutze dieses Formular, um eine neue Gruppe zu erstellen."
 
 #: actions/newmessage.php:71 actions/newmessage.php:231
 msgid "New message"
 msgstr "Neue Nachricht"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Kein Inhalt!"
 
@@ -2453,7 +2465,8 @@ msgstr "Kein Inhalt!"
 msgid "No recipient specified."
 msgstr "Kein Empfänger angegeben."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2463,12 +2476,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Nachricht gesendet"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Direkte Nachricht an %s abgeschickt"
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax-Fehler"
 
@@ -2476,7 +2491,7 @@ msgstr "Ajax-Fehler"
 msgid "New notice"
 msgstr "Neue Nachricht"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Nachricht hinzugefügt"
 
@@ -2497,7 +2512,7 @@ msgstr "Volltextsuche"
 #: actions/noticesearch.php:91
 #, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Suchergebnisse für \"%1$s\" auf %2$s"
+msgstr "Suchergebnisse für „%1$s“ auf %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2514,7 +2529,7 @@ msgid ""
 "Why not [register an account](%%%%action.register%%%%) and be the first to "
 "[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
 msgstr ""
-"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"Warum [registrierst du nicht einen Account](%%%%action.register%%%%) und "
 "bist der erste der [auf diese Nachricht antwortet](%%%%action.newnotice%%%%?"
 "status_textarea=%s)!"
 
@@ -2582,7 +2597,7 @@ msgstr "Kann Zugang dieses Programm nicht entfernen: %s."
 #: actions/oauthconnectionssettings.php:198
 msgid "You have not authorized any applications to use your account."
 msgstr ""
-"Du hast noch kein Programm die Erlaubnis gegeben dein Profil zu benutzen."
+"Du hast noch keinem Programm die Erlaubnis gegeben dein Profil zu benutzen."
 
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
@@ -2596,7 +2611,7 @@ msgstr "Nachricht hat kein Profil"
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
 msgid "%1$s's status on %2$s"
-msgstr "%1$s Status auf %2$s"
+msgstr "Status von %1$s auf %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
@@ -2611,8 +2626,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Bitte nur %s URLs über einfaches HTTP."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Kein unterstütztes Datenformat."
 
@@ -2759,7 +2774,7 @@ msgstr "Pfad"
 
 #: actions/pathsadminpanel.php:70
 msgid "Path and server settings for this StatusNet site."
-msgstr "Pfad- und Serverangaben für diese StatusNet Seite."
+msgstr "Pfad- und Serverangaben für diese StatusNet-Website."
 
 #: actions/pathsadminpanel.php:157
 #, php-format
@@ -2795,7 +2810,7 @@ msgstr "Server"
 
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
-msgstr "Server Name der Seite"
+msgstr "Server-Name der Seite"
 
 #: actions/pathsadminpanel.php:242
 msgid "Path"
@@ -2867,7 +2882,7 @@ msgstr "Pfad zu den Hintergrundbildern"
 
 #: actions/pathsadminpanel.php:313
 msgid "Background directory"
-msgstr "Hintergrund Verzeichnis"
+msgstr "Hintergrund-Verzeichnis"
 
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
@@ -2937,8 +2952,8 @@ msgstr "Ungültiger Nachrichteninhalt."
 #, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
-"Die Nachrichtenlizenz '%1$s' ist nicht kompatibel mit der Lizenz der Seite '%"
-"2$s'."
+"Die Nachrichtenlizenz „%1$s“ ist nicht kompatibel mit der Lizenz der Seite „%"
+"2$s."
 
 #: actions/profilesettings.php:60
 msgid "Profile settings"
@@ -2998,11 +3013,11 @@ msgstr "Aufenthaltsort"
 
 #: actions/profilesettings.php:134 actions/register.php:480
 msgid "Where you are, like \"City, State (or Region), Country\""
-msgstr "Wo du bist, beispielsweise „Stadt, Gebiet, Land“"
+msgstr "Wo du bist, beispielsweise „Stadt, Region, Land“"
 
 #: actions/profilesettings.php:138
 msgid "Share my current location when posting notices"
-msgstr "Teile meine aktuelle Position wenn ich Nachrichten sende"
+msgstr "Teile meine aktuelle Position, wenn ich Nachrichten sende"
 
 #: actions/profilesettings.php:145 actions/tagother.php:149
 #: actions/tagother.php:209 lib/subscriptionlist.php:106
@@ -3120,7 +3135,7 @@ msgstr ""
 
 #: actions/public.php:191
 msgid "Be the first to post!"
-msgstr "Sei der erste der etwas schreibt!"
+msgstr "Sei der erste, der etwas schreibt!"
 
 #: actions/public.php:195
 #, php-format
@@ -3139,7 +3154,7 @@ msgid ""
 "friends, family, and colleagues! ([Read more](%%doc.help%%))"
 msgstr ""
 "Das ist %%site.name%%, ein [Mikroblogging](http://de.wikipedia.org/wiki/"
-"Mikroblogging) Dienst auf Basis der freien Software [StatusNet](http://"
+"Mikroblogging)-Dienst auf Basis der freien Software [StatusNet](http://"
 "status.net/). [Melde dich jetzt an](%%action.register%%) und tausche "
 "Nachrichten mit deinen Freunden, Familie oder Kollegen aus! ([Mehr "
 "Informationen](%%doc.help%%))"
@@ -3173,7 +3188,7 @@ msgstr ""
 
 #: actions/publictagcloud.php:72
 msgid "Be the first to post one!"
-msgstr "Sei der Erste der etwas schreibt!"
+msgstr "Sei der erste, der etwas schreibt!"
 
 #: actions/publictagcloud.php:75
 #, php-format
@@ -3181,7 +3196,7 @@ msgid ""
 "Why not [register an account](%%action.register%%) and be the first to post "
 "one!"
 msgstr ""
-"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"Warum [registrierst du nicht einen Account](%%%%action.register%%%%) und "
 "bist der erste der eine Nachricht abschickt!"
 
 #: actions/publictagcloud.php:134
@@ -3221,7 +3236,7 @@ msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
 "the email address you have stored in your account."
 msgstr ""
-"Wenn du dein Passwort vergessen hast kannst du dir ein neues an deine "
+"Wenn du dein Passwort vergessen hast, kannst du dir ein neues an deine "
 "hinterlegte Email schicken lassen."
 
 #: actions/recoverpassword.php:158
@@ -3230,11 +3245,11 @@ msgstr "Du wurdest identifiziert. Gib ein neues Passwort ein. "
 
 #: actions/recoverpassword.php:188
 msgid "Password recovery"
-msgstr "Password-Wiederherstellung"
+msgstr "Passwort-Wiederherstellung"
 
 #: actions/recoverpassword.php:191
 msgid "Nickname or email address"
-msgstr "Spitzname oder e-mail Adresse"
+msgstr "Spitzname oder E-Mail-Adresse"
 
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
@@ -3381,7 +3396,7 @@ msgstr ""
 
 #: actions/register.php:457
 msgid "Longer name, preferably your \"real\" name"
-msgstr "Längerer Name, bevorzugt dein „echter“ Name"
+msgstr "Längerer Name, bevorzugt dein bürgerlicher Name"
 
 #: actions/register.php:518
 #, php-format
@@ -3412,7 +3427,7 @@ msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-"Abgesehen von folgenden Daten: Passwort, Email Adresse, IM Adresse und "
+"Abgesehen von folgenden Daten: Passwort, Email Adresse, IM-Adresse und "
 "Telefonnummer, sind all meine Texte und Dateien unter %s verfügbar."
 
 #: actions/register.php:583
@@ -3446,7 +3461,7 @@ msgstr ""
 "* die [Dokumentation](%%%%doc.help%%%%) lesen um mehr über weitere Features "
 "zu erfahren\n"
 "\n"
-"Danke für deine Anmeldung, wir hoffen das dir der Service gefällt."
+"Danke für deine Anmeldung, wir hoffen, dass dir der Service gefällt."
 
 #: actions/register.php:607
 msgid ""
@@ -3520,7 +3535,7 @@ msgstr "Nur angemeldete Nutzer können Nachrichten wiederholen."
 
 #: actions/repeat.php:64 actions/repeat.php:71
 msgid "No notice specified."
-msgstr "Keine Nachricht angegeen."
+msgstr "Keine Nachricht angegeben."
 
 #: actions/repeat.php:76
 msgid "You can't repeat your own notice."
@@ -3530,7 +3545,7 @@ msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
 msgid "You already repeated that notice."
 msgstr "Nachricht bereits wiederholt"
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Wiederholt"
 
@@ -3649,7 +3664,7 @@ msgstr "Site-Einstellungen speichern"
 
 #: actions/showapplication.php:82
 msgid "You must be logged in to view an application."
-msgstr "Du musst angemeldet sein, um aus dieses Programm zu betrachten."
+msgstr "Du musst angemeldet sein, um dieses Programm zu betrachten."
 
 #: actions/showapplication.php:157
 msgid "Application profile"
@@ -3701,11 +3716,11 @@ msgstr "Programminformation"
 
 #: actions/showapplication.php:263
 msgid "Consumer key"
-msgstr "Anwender Schlüssel"
+msgstr "Anwender-Schlüssel"
 
 #: actions/showapplication.php:268
 msgid "Consumer secret"
-msgstr "Anwender Geheimnis"
+msgstr "Anwender-Geheimnis"
 
 #: actions/showapplication.php:273
 msgid "Request token URL"
@@ -3713,7 +3728,7 @@ msgstr "Anfrage-Token Adresse"
 
 #: actions/showapplication.php:278
 msgid "Access token URL"
-msgstr "Zugriffs-Token Adresse"
+msgstr "Zugriffs-Token-Adresse"
 
 #: actions/showapplication.php:283
 msgid "Authorize URL"
@@ -3724,8 +3739,8 @@ msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
-"Hinweis: Wir unterstützen HMAC-SHA1 Signaturen. Wir unterstützen keine "
-"Klartext Signaturen."
+"Hinweis: Wir unterstützen HMAC-SHA1-Signaturen. Wir unterstützen keine "
+"Klartext-Signaturen."
 
 #: actions/showapplication.php:309
 msgid "Are you sure you want to reset your consumer key and secret?"
@@ -3734,7 +3749,7 @@ msgstr "Bist du sicher, dass du den Schlüssel zurücksetzen willst?"
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "%1$ss favorisierte Nachrichten, Seite %2$d"
+msgstr "Favorisierte Nachrichten von %1$s, Seite %2$d"
 
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
@@ -3770,8 +3785,8 @@ msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
 msgstr ""
-"%s hat noch keine Nachricht zu den Favoriten hinzugefügt. Sende du doch "
-"einfach eine interessante Nachricht, damit sich daran etwas ändert :)"
+"%s hat noch keine Nachricht zu den Favoriten hinzugefügt. Sende doch einfach "
+"eine interessante Nachricht, damit sich daran etwas ändert :)"
 
 #: actions/showfavorites.php:212
 #, php-format
@@ -3786,7 +3801,7 @@ msgstr ""
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
-msgstr "Dies ist ein Weg Dinge zu teilen die dir gefallen."
+msgstr "Dies ist ein Weg, Dinge zu teilen, die dir gefallen."
 
 #: actions/showgroup.php:82 lib/groupnav.php:86
 #, php-format
@@ -3883,8 +3898,8 @@ msgid ""
 msgstr ""
 "**%s** ist eine Benutzergruppe auf %%%%site.name%%%%, einem [Mikro-blogging-"
 "Dienst](http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der "
-"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
-"kurze Nachrichten über Ihr Leben und Interessen. "
+"freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
+"kurze Nachrichten über ihr Leben und Interessen. "
 
 #: actions/showgroup.php:489
 msgid "Admins"
@@ -3951,7 +3966,7 @@ msgstr "FOAF von %s"
 #, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
 msgstr ""
-"Dies ist die Zeitleiste für %1$s und Freunde aber bisher hat niemand etwas "
+"Dies ist die Zeitleiste von %1$s und Freunden, aber bisher hat niemand etwas "
 "gepostet."
 
 #: actions/showstream.php:205
@@ -3959,7 +3974,7 @@ msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
 "would be a good time to start :)"
 msgstr ""
-"In letzter Zeit irgendwas interessantes erlebt? Du hast noch nichts "
+"In letzter Zeit irgendwas Interessantes erlebt? Du hast noch nichts "
 "geschrieben, jetzt wäre doch ein guter Zeitpunkt los zu legen :)"
 
 #: actions/showstream.php:207
@@ -3993,7 +4008,7 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 "**%s** hat ein Konto auf %%%%site.name%%%%, einem [Mikro-blogging-Dienst]"
-"(http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der Freien "
+"(http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der freien "
 "Software [StatusNet](http://status.net/). "
 
 #: actions/showstream.php:305
@@ -4011,11 +4026,11 @@ msgstr "Nutzer ist bereits ruhig gestellt."
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
-msgstr "Grundeinstellungen für diese StatusNet Seite."
+msgstr "Grundeinstellungen für diese StatusNet-Seite."
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
-msgstr "Der Seiten Name darf nicht leer sein."
+msgstr "Der Seitenname darf nicht leer sein."
 
 #: actions/siteadminpanel.php:141
 msgid "You must have a valid contact email address."
@@ -4044,7 +4059,7 @@ msgstr "Seitenname"
 
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr "Der Name deiner Seite, sowas wie \"DeinUnternehmen Mircoblog\""
+msgstr "Der Name deiner Seite, sowas wie „DeinUnternehmen-Microblog“"
 
 #: actions/siteadminpanel.php:229
 msgid "Brought by"
@@ -4062,11 +4077,11 @@ msgstr "Erstellt von Adresse"
 #: actions/siteadminpanel.php:235
 msgid "URL used for credits link in footer of each page"
 msgstr ""
-"Adresse die für den Credit-Link im Fußbereich auf jeder Seite benutzt wird"
+"Adresse, die für den Credit-Link im Fußbereich auf jeder Seite benutzt wird"
 
 #: actions/siteadminpanel.php:239
 msgid "Contact email address for your site"
-msgstr "Kontakt-E-Mail-Adresse für Deine Site."
+msgstr "Kontakt-E-Mail-Adresse für deine Site."
 
 #: actions/siteadminpanel.php:245
 msgid "Local"
@@ -4074,11 +4089,11 @@ msgstr "Lokal"
 
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
-msgstr "Standard Zeitzone"
+msgstr "Standard-Zeitzone"
 
 #: actions/siteadminpanel.php:257
 msgid "Default timezone for the site; usually UTC."
-msgstr "Standard Zeitzone für die Seite (meistens UTC)."
+msgstr "Standard-Zeitzone für die Seite (meistens UTC)."
 
 #: actions/siteadminpanel.php:262
 msgid "Default language"
@@ -4109,7 +4124,7 @@ msgstr "Wiederholungslimit"
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
-"Wie lange muss ein Benutzer warten bis er eine identische Nachricht "
+"Wie lange muss ein Benutzer warten, bis er eine identische Nachricht "
 "abschicken kann (in Sekunden)."
 
 #: actions/sitenoticeadminpanel.php:56
@@ -4150,7 +4165,7 @@ msgstr "SMS-Einstellungen"
 #: actions/smssettings.php:74
 #, php-format
 msgid "You can receive SMS messages through email from %%site.name%%."
-msgstr "Du kannst SMS per E-Mail empfangen von %%site.name%%."
+msgstr "Du kannst SMS von %%site.name%% per E-Mail empfangen."
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
@@ -4160,7 +4175,7 @@ msgstr "SMS ist nicht verfügbar."
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
 msgid "SMS address"
-msgstr "SMS Adresse"
+msgstr "SMS-Adresse"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4201,7 +4216,7 @@ msgstr "Telefonnummer, keine Sonder- oder Leerzeichen mit Vorwahl"
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
 msgid "SMS preferences"
-msgstr "SMS Einstellungen"
+msgstr "SMS-Einstellungen"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4209,13 +4224,13 @@ msgid ""
 "Send me notices through SMS; I understand I may incur exorbitant charges "
 "from my carrier."
 msgstr ""
-"Schicke mir Nachrichten per SMS; ich weiss, dass mir dadurch hohe Kosten bei "
+"Schicke mir Nachrichten per SMS; ich weiß, dass mir dadurch hohe Kosten bei "
 "meinem Netzbetreiber entstehen können."
 
 #. TRANS: Confirmation message for successful SMS preferences save.
 #: actions/smssettings.php:315
 msgid "SMS preferences saved."
-msgstr "SMS Einstellungen gesichert."
+msgstr "SMS-Einstellungen gesichert."
 
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
@@ -4243,9 +4258,9 @@ msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
 msgstr ""
-"Ein Bestätigungscode wurde an die von Ihnen angegebene Telefonnummer "
-"gesandt. Überprüfen Sie bitte Ihren Posteingang (auch den Spamordner!) auf "
-"den Code und die Anweisungen, um ihn zu benutzen."
+"Ein Bestätigungscode wurde an die von dir angegebene Telefonnummer gesandt. "
+"Überprüfe bitte deinen Posteingang (auch den Spamordner!) auf den Code und "
+"die Anweisungen, um ihn zu benutzen."
 
 #. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
 #: actions/smssettings.php:413
@@ -4255,7 +4270,7 @@ msgstr "Die Bestätigungsnummer ist falsch."
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
 msgid "SMS confirmation cancelled."
-msgstr "SMS Bestätigung abgebrochen."
+msgstr "SMS-Bestätigung abgebrochen."
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4266,7 +4281,7 @@ msgstr "Dies ist nicht deine Telefonnummer."
 #. TRANS: Message given after successfully removing a registered SMS phone number.
 #: actions/smssettings.php:470
 msgid "The SMS phone number was removed."
-msgstr "SMS Telefonnummer wurde entfernt."
+msgstr "SMS-Telefonnummer wurde entfernt."
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
@@ -4303,7 +4318,7 @@ msgstr "Snapshots"
 
 #: actions/snapshotadminpanel.php:65
 msgid "Manage snapshot configuration"
-msgstr "Verwalten Snapshot-Konfiguration"
+msgstr "Snapshot-Konfiguration verwalten"
 
 #: actions/snapshotadminpanel.php:127
 msgid "Invalid snapshot run value."
@@ -4331,7 +4346,7 @@ msgstr "Daten-Snapshot"
 
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
-msgstr "Wann sollen Statistiken zum status.net Server geschickt werden"
+msgstr "Wann sollen Statistiken zum status.net-Server geschickt werden"
 
 #: actions/snapshotadminpanel.php:217
 msgid "Frequency"
@@ -4339,7 +4354,7 @@ msgstr "Frequenz"
 
 #: actions/snapshotadminpanel.php:218
 msgid "Snapshots will be sent once every N web hits"
-msgstr "Snapshots werden all N Webseitenbesuche gesendet"
+msgstr "Snapshots werden alle N Webseitenbesuche gesendet"
 
 #: actions/snapshotadminpanel.php:226
 msgid "Report URL"
@@ -4395,15 +4410,15 @@ msgstr "Dies sind die Leute, die deine Nachrichten lesen."
 #: actions/subscribers.php:67
 #, php-format
 msgid "These are the people who listen to %s's notices."
-msgstr "Dies sind die Leute, die %ss Nachrichten lesen."
+msgstr "Dies sind die Leute, die Nachrichten von %s lesen."
 
 #: actions/subscribers.php:108
 msgid ""
 "You have no subscribers. Try subscribing to people you know and they might "
 "return the favor"
 msgstr ""
-"Du hast keine Abonnenten. Warum abonnierst Du nicht Leute, die Du kennst? "
-"Sie werden Dir diesen Gefallen vielleicht auch tun."
+"Du hast keine Abonnenten. Warum abonnierst du nicht Leute, die du kennst? "
+"Sie werden dir diesen Gefallen vielleicht auch tun."
 
 #: actions/subscribers.php:110
 #, php-format
@@ -4416,7 +4431,7 @@ msgid ""
 "%s has no subscribers. Why not [register an account](%%%%action.register%%%"
 "%) and be the first?"
 msgstr ""
-"% hat keine Abonnenten. Warum [registrierst Du nicht einen Account](%%%%"
+"% hat keine Abonnenten. Warum [registrierst du nicht einen Account](%%%%"
 "action.register%%%%) und bist der erste?"
 
 #: actions/subscriptions.php:52
@@ -4449,8 +4464,8 @@ msgid ""
 msgstr ""
 "Du hast momentan noch niemanden abonniert. Benutze die [Personensuche](%%"
 "action.peoplesearch%%) um nach Freunden zu suchen oder besuche die [Beliebte "
-"Benutzer](%%action.featured%%) Seite. Wenn du ein [Twitter Benutzer](%%"
-"action.twittersettings%%) bist kannst du auch automatisch deine Twitter "
+"Benutzer](%%action.featured%%) Seite. Wenn du ein [Twitter-Benutzer](%%"
+"action.twittersettings%%) bist, kannst du auch automatisch deine Twitter-"
 "Freunde abonnieren."
 
 #: actions/subscriptions.php:128 actions/subscriptions.php:132
@@ -4488,7 +4503,7 @@ msgstr "Nachrichten Feed für Tag %s (Atom)"
 
 #: actions/tagother.php:39
 msgid "No ID argument."
-msgstr "Kein ID Argument."
+msgstr "Kein ID-Argument."
 
 #: actions/tagother.php:65
 #, php-format
@@ -4562,8 +4577,8 @@ msgstr "Abbestellt"
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
-"Die Benutzerlizenz â\80\98%1$sâ\80\99 ist nicht kompatibel mit der Lizenz der Seite â\80\98%2"
-"$sâ\80\99."
+"Die Benutzerlizenz â\80\9e%1$sâ\80\9c ist nicht kompatibel mit der Lizenz der Seite â\80\9e%2"
+"$sâ\80\9c."
 
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
@@ -4573,7 +4588,7 @@ msgstr "Benutzer"
 
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
-msgstr "Nutzer Einstellungen dieser StatusNet Seite."
+msgstr "Nutzer-Einstellungen dieser StatusNet-Seite."
 
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
@@ -4586,7 +4601,7 @@ msgstr "Willkommens-Nachricht ungültig. Maximale Länge sind 255 Zeichen."
 #: actions/useradminpanel.php:165
 #, php-format
 msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr "Ungültiges Abonnement: '%1$s' ist kein Benutzer"
+msgstr "Ungültiges Abonnement: „%1$s“ ist kein Benutzer"
 
 #. TRANS: Link description in user account settings menu.
 #: actions/useradminpanel.php:218 lib/accountsettingsaction.php:111
@@ -4596,11 +4611,11 @@ msgstr "Profil"
 
 #: actions/useradminpanel.php:222
 msgid "Bio Limit"
-msgstr "Bio Limit"
+msgstr "Bio-Limit"
 
 #: actions/useradminpanel.php:223
 msgid "Maximum length of a profile bio in characters."
-msgstr "Maximale Länge in Zeichen der Profil Bio."
+msgstr "Maximale Länge in Zeichen der Profil-Bio."
 
 #: actions/useradminpanel.php:231
 msgid "New users"
@@ -4616,7 +4631,7 @@ msgstr "Willkommens-Nachricht für neue Nutzer (maximal 255 Zeichen)."
 
 #: actions/useradminpanel.php:241
 msgid "Default subscription"
-msgstr "Standard Abonnement"
+msgstr "Standard-Abonnement"
 
 #: actions/useradminpanel.php:242
 msgid "Automatically subscribe new users to this user."
@@ -4719,12 +4734,12 @@ msgstr "Die URI „%s“ für den Stream ist ein lokaler Benutzer."
 #: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
-msgstr "Profiladresse '%s' ist für einen lokalen Benutzer."
+msgstr "Profiladresse „%s“ ist für einen lokalen Benutzer."
 
 #: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
-msgstr "Avatar Adresse '%s' ist nicht gültig."
+msgstr "Avataradresse „%s“ ist nicht gültig."
 
 #: actions/userauthorization.php:350
 #, php-format
@@ -4921,12 +4936,12 @@ msgstr "Konnte keinen Login-Token für %s erstellen"
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
-msgstr "Nirgedwo einen Datenbanknamen oder DSN gefunden."
+msgstr "Nirgendwo einen Datenbanknamen oder DSN gefunden."
 
 #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
 #: classes/Message.php:46
 msgid "You are banned from sending direct messages."
-msgstr "Direktes senden von Nachrichten wurde blockiert"
+msgstr "Direktes Senden von Nachrichten wurde blockiert"
 
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
@@ -4946,23 +4961,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Kein Profil (%1$d) für eine Notiz gefunden (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4970,7 +4985,7 @@ msgstr ""
 "ein paar Minuten ab."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4979,31 +4994,31 @@ msgstr ""
 "ein paar Minuten ab."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 "Du wurdest für das Schreiben von Nachrichten auf dieser Seite gesperrt."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problem bei Speichern der Nachricht."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 "Der Methode saveKnownGroups wurde ein schlechter Wert zur Verfügung gestellt"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problem bei Speichern der Nachricht."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5051,12 +5066,6 @@ msgstr "Bereits abonniert!"
 msgid "User has blocked you."
 msgstr "Dieser Benutzer hat dich blockiert."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Nicht abonniert!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
 msgid "Could not delete self-subscription."
@@ -5087,7 +5096,7 @@ msgstr "Konnte Gruppe nicht erstellen."
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
 msgid "Could not set group URI."
-msgstr "Konnte die Gruppen URI nicht setzen."
+msgstr "Konnte die Gruppen-URI nicht setzen."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
@@ -5408,7 +5417,7 @@ msgstr "Vorher"
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
 msgid "Expecting a root feed element but got a whole XML document."
-msgstr "root-Element eines Feeds erwartet aber ganzes XML Dokument erhalten."
+msgstr "Root-Element eines Feeds erwartet, aber ganzes XML-Dokument erhalten."
 
 #: lib/activityutils.php:208
 msgid "Can't handle remote content yet."
@@ -5416,11 +5425,11 @@ msgstr "Fremdinhalt kann noch nicht eingebunden werden."
 
 #: lib/activityutils.php:244
 msgid "Can't handle embedded XML content yet."
-msgstr "Kann eingebundenen XML Inhalt nicht verarbeiten."
+msgstr "Kann eingebundenen XML-Inhalt nicht verarbeiten."
 
 #: lib/activityutils.php:248
 msgid "Can't handle embedded Base64 content yet."
-msgstr "Eingebundener Base64 Inhalt kann noch nicht verarbeitet werden."
+msgstr "Eingebundener Base64-Inhalt kann noch nicht verarbeitet werden."
 
 #. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
 #: lib/adminpanelaction.php:98
@@ -5446,12 +5455,12 @@ msgstr "saveSettings() noch nicht implementiert."
 #. TRANS: the admin panel Design.
 #: lib/adminpanelaction.php:284
 msgid "Unable to delete design setting."
-msgstr "Konnte die Design Einstellungen nicht löschen."
+msgstr "Konnte die Design-Einstellungen nicht löschen."
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
 msgid "Basic site configuration"
-msgstr "Basis Seiteneinstellungen"
+msgstr "Basis-Seiteneinstellungen"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
@@ -5503,7 +5512,7 @@ msgstr "Seitennachricht bearbeiten"
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:406
 msgid "Snapshots configuration"
-msgstr "Snapshot Konfiguration"
+msgstr "Snapshot-Konfiguration"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
@@ -5607,7 +5616,7 @@ msgstr "Schreibgeschützt"
 #: lib/applicationlist.php:144
 #, php-format
 msgid "Approved %1$s - \"%2$s\" access."
-msgstr "Genehmigte %1$s - \"%2$s\" Zugriff."
+msgstr "Genehmigte %1$s - „%2$s“ Zugriff."
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
@@ -5658,44 +5667,21 @@ msgstr "Befehl ausgeführt"
 msgid "Command failed"
 msgstr "Befehl fehlgeschlagen"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Nachricht mit dieser ID existiert nicht"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Benutzer hat keine letzte Nachricht"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Die bestätigte E-Mail-Adresse konnte nicht gespeichert werden."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Konnte keinen lokalen Nutzer mit dem Nick %s finden"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Leider ist dieser Befehl noch nicht implementiert."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Es macht keinen Sinn dich selbst anzustupsen!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Stups an %s geschickt"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5706,55 +5692,39 @@ msgstr ""
 "Abonnenten: %2$s\n"
 "Mitteilungen: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Nachricht als Favorit markiert."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Du bist bereits Mitglied dieser Gruppe"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Konnte Benutzer %s nicht der Gruppe %s hinzufügen."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Konnte Benutzer %1$s nicht aus der Gruppe %2$s entfernen."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Vollständiger Name: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Standort: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Homepage: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Über: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5765,143 +5735,103 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "Nachricht zu lang - maximal %1$d Zeichen erlaubt, du hast %2$d gesendet."
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Direkte Nachricht an %s abgeschickt"
-
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Fehler beim Senden der Nachricht"
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Du kannst deine eigenen Nachrichten nicht wiederholen."
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Nachricht bereits wiederholt"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Nachricht von %s wiederholt"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Fehler beim Wiederholen der Nachricht"
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Nachricht zu lange - maximal %d Zeichen erlaubt, du hast %d gesendet"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Antwort an %s gesendet"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Problem beim Speichern der Nachricht."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest"
-
-#: lib/command.php:628
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "OMB Profile können nicht mit einem Kommando abonniert werden."
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "%s abonniert"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Gib den Namen des Benutzers ein, den du nicht mehr abonnieren möchtest"
-
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "%s nicht mehr abonniert"
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "OMB-Profile können nicht mit einem Kommando abonniert werden."
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Befehl noch nicht implementiert."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Benachrichtigung deaktiviert."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Konnte Benachrichtigung nicht deaktivieren."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Benachrichtigung aktiviert."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Konnte Benachrichtigung nicht aktivieren."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Anmeldung ist abgeschaltet"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr "Der Link ist nur einmal benutzbar und für eine Dauer von 2 Minuten: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "%s nicht mehr abonniert"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Du hast niemanden abonniert."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
-msgstr[0] "Du hast diese Benutzer bereits abonniert:"
+msgstr[0] "Du hast diesen Benutzer bereits abonniert:"
 msgstr[1] "Du hast diese Benutzer bereits abonniert:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
-msgstr "Niemand hat Dich abonniert."
+msgstr "Niemand hat dich abonniert."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
-msgstr[0] "Die Gegenseite konnte Dich nicht abonnieren."
-msgstr[1] "Die Gegenseite konnte Dich nicht abonnieren."
+msgstr[0] "Die Gegenseite konnte dich nicht abonnieren."
+msgstr[1] "Die Gegenseite konnte dich nicht abonnieren."
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Du bist in keiner Gruppe Mitglied."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Du bist Mitglied dieser Gruppe:"
 msgstr[1] "Du bist Mitglied dieser Gruppen:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6034,7 +5964,7 @@ msgstr ""
 
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
-msgstr "Standard Design wieder hergestellt."
+msgstr "Standard-Design wieder hergestellt."
 
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
 msgid "Disfavor this notice"
@@ -6095,7 +6025,7 @@ msgstr "Los geht's"
 #: lib/grantroleform.php:91
 #, php-format
 msgid "Grant this user the \"%s\" role"
-msgstr "Teile dem Benutzer die \"%s\" Rolle zu"
+msgstr "Teile dem Benutzer die „%s“-Rolle zu"
 
 #: lib/groupeditform.php:163
 msgid "URL of the homepage or blog of the group or topic"
@@ -6113,8 +6043,7 @@ msgstr "Beschreibe die Gruppe oder das Thema in %d Zeichen"
 #: lib/groupeditform.php:179
 msgid ""
 "Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr ""
-"Ort der Gruppe, optional, beispielsweise „Stadt, Gebiet (oder Region), Land“"
+msgstr "Ort der Gruppe, optional, beispielsweise „Stadt, Region, Land“"
 
 #: lib/groupeditform.php:187
 #, php-format
@@ -6178,9 +6107,9 @@ msgid "Unsupported image file format."
 msgstr "Bildformat wird nicht unterstützt."
 
 #: lib/imagefile.php:88
-#, fuzzy, php-format
+#, php-format
 msgid "That file is too big. The maximum file size is %s."
-msgstr "Du kannst ein Logo für Deine Gruppe hochladen."
+msgstr "Du kannst ein Logo für deine Gruppe hochladen."
 
 #: lib/imagefile.php:93
 msgid "Partial upload."
@@ -6188,7 +6117,7 @@ msgstr "Unvollständiges Hochladen."
 
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
-msgstr "Systemfehler beim hochladen der Datei."
+msgstr "Systemfehler beim Hochladen der Datei."
 
 #: lib/imagefile.php:109
 msgid "Not an image or corrupt file."
@@ -6218,7 +6147,7 @@ msgstr "[%s]"
 #: lib/jabber.php:567
 #, php-format
 msgid "Unknown inbox source %d."
-msgstr "Unbekannte inbox Quelle %d."
+msgstr "Unbekannte inbox-Quelle %d."
 
 #: lib/joinform.php:114
 msgid "Join"
@@ -6262,7 +6191,7 @@ msgstr ""
 "\n"
 "jemand hat diese E-Mail-Adresse gerade auf %s eingegeben.\n"
 "\n"
-"Falls Du es warst und Du Deinen Eintrag bestätigen möchtest, benutze\n"
+"Falls du es warst und du deinen Eintrag bestätigen möchtest, benutze\n"
 "bitte diese URL:\n"
 "\n"
 "%s\n"
@@ -6312,7 +6241,7 @@ msgstr ""
 "%7$s.\n"
 "\n"
 "----\n"
-"Du kannst Deine E-Mail-Adresse und die Benachrichtigungseinstellungen auf %8"
+"Du kannst deine E-Mail-Adresse und die Benachrichtigungseinstellungen auf %8"
 "$s ändern.\n"
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
@@ -6390,10 +6319,10 @@ msgid ""
 "With kind regards,\n"
 "%4$s\n"
 msgstr ""
-"%1$s (%2$s) fragt sicht, was Du zur Zeit wohl so machst und lädt Dich ein, "
+"%1$s (%2$s) fragt sicht, was du zur Zeit wohl so machst und lädt dich ein, "
 "etwas Neues zu posten.\n"
 "\n"
-"Lass von Dir hören :)\n"
+"Lass von dir hören :)\n"
 "\n"
 "%3$s\n"
 "\n"
@@ -6427,7 +6356,7 @@ msgid ""
 "With kind regards,\n"
 "%5$s\n"
 msgstr ""
-"%1$s (%2$s) hat Dir eine private Nachricht geschickt:\n"
+"%1$s (%2$s) hat dir eine private Nachricht geschickt:\n"
 "\n"
 "------------------------------------------------------\n"
 "%3$s\n"
@@ -6560,9 +6489,9 @@ msgid ""
 msgstr ""
 "Du hast keine privaten Nachrichten. Du kannst anderen private Nachrichten "
 "schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir "
-"Nachrichten schicken, die nur Du sehen kannst."
+"Nachrichten schicken, die nur du sehen kannst."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "von"
 
@@ -6590,13 +6519,13 @@ msgstr "Nachrichten-Typ %s wird nicht unterstützt."
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
-"Beim Speichern der Datei trat ein Datenbank Fehler auf. Bitte versuche es "
+"Beim Speichern der Datei trat ein Datenbankfehler auf. Bitte versuche es "
 "noch einmal."
 
 #: lib/mediafile.php:142
 msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
 msgstr ""
-"Die Größe der hoch geladenen Datei überschreitet die upload_max_filesize "
+"Die Größe der hochgeladenen Datei überschreitet die upload_max_filesize "
 "Angabe in der php.ini."
 
 #: lib/mediafile.php:147
@@ -6604,8 +6533,8 @@ msgid ""
 "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 "the HTML form."
 msgstr ""
-"Die Größe der hoch geladenen Datei überschreitet die MAX_FILE_SIZE Angabe, "
-"die im HTML Formular angegeben wurde."
+"Die Größe der hochgeladenen Datei überschreitet die MAX_FILE_SIZE Angabe, "
+"die im HTML-Formular angegeben wurde."
 
 #: lib/mediafile.php:152
 msgid "The uploaded file was only partially uploaded."
@@ -6653,11 +6582,11 @@ msgstr "Versende eine direkte Nachricht"
 msgid "To"
 msgstr "An"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Verfügbare Zeichen"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Senden"
@@ -6666,33 +6595,33 @@ msgstr "Senden"
 msgid "Send a notice"
 msgstr "Nachricht senden"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Was ist los, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Anhängen"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Datei anhängen"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Teile meinen Aufenthaltsort"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Teile meinen Aufenthaltsort nicht"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
-"Es tut uns Leid, aber die Abfrage deiner GPS Position hat zu lange gedauert. "
+"Es tut uns leid, aber die Abfrage deiner GPS-Position hat zu lange gedauert. "
 "Bitte versuche es später wieder."
 
 #. TRANS: Used in coordinates as abbreviation of north
@@ -6724,23 +6653,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "in"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "Web"
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "im Zusammenhang"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Wiederholt von"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Auf diese Nachricht antworten"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Antworten"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Nachricht wiederholt"
 
@@ -6893,7 +6826,7 @@ msgstr "Diese Nachricht wiederholen"
 #: lib/revokeroleform.php:91
 #, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr "Widerrufe die \"%s\" Rolle von diesem Benutzer"
+msgstr "Widerrufe die „%s“-Rolle von diesem Benutzer"
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
@@ -6945,7 +6878,7 @@ msgstr "Abschnitt ohne Titel"
 
 #: lib/section.php:106
 msgid "More..."
-msgstr "Mehr..."
+msgstr "Mehr …"
 
 #: lib/silenceform.php:67
 msgid "Silence"
@@ -7065,11 +6998,6 @@ msgstr "Lösche dein Abonnement von diesem Benutzer"
 msgid "Unsubscribe"
 msgstr "Abbestellen"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Benutzer %s (%d) hat kein Profil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Avatar bearbeiten"
@@ -7080,11 +7008,11 @@ msgstr "Benutzeraktionen"
 
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
-msgstr "Löschung des Nutzers in Arbeit..."
+msgstr "Löschung des Nutzers in Arbeit …"
 
 #: lib/userprofile.php:263
 msgid "Edit profile settings"
-msgstr "Profil Einstellungen ändern"
+msgstr "Profil-Einstellungen ändern"
 
 #: lib/userprofile.php:264
 msgid "Edit"
@@ -7117,56 +7045,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "vor wenigen Sekunden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "vor einer Minute"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "vor %d Minuten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "vor einer Stunde"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "vor %d Stunden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "vor einem Tag"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "vor %d Tagen"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "vor einem Monat"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "vor %d Monaten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "vor einem Jahr"
 
@@ -7179,9 +7107,3 @@ msgstr "%s ist keine gültige Farbe!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s ist keine gültige Farbe! Verwenden Sie 3 oder 6 Hex-Zeichen."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Nachricht zu lang - maximal %1$d Zeichen erlaubt, du hast %2$d gesendet."
index 841e3172cb6e30bd5e13486d16f0ebc6c6c6fb79..51bd9d7633b97a6208436064ba295ef6645898b9 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:18+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:27+0000\n"
 "Language-Team: Greek\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: el\n"
 "X-Message-Group: out-statusnet\n"
@@ -88,10 +88,10 @@ msgstr "Αποθήκευση"
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "Î\94εν Ï\85Ï\80άÏ\81Ï\87ει Ï\84έÏ\84οια Ï\83ελίδα"
+msgstr "Î\9aανέναÏ\82 Ï\84έÏ\84οιοÏ\82 Ï\87Ï\81ήÏ\83Ï\84ηÏ\82."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -111,7 +111,7 @@ msgstr "Δεν υπάρχει τέτοια σελίδα"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Κανένας τέτοιος χρήστης."
@@ -188,40 +188,6 @@ msgstr ""
 msgid "You and friends"
 msgstr "Εσείς και οι φίλοι σας"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
-#: actions/allrss.php:121 actions/apitimelinefriends.php:216
-#: actions/apitimelinehome.php:122
-#, php-format
-msgid "Updates from %1$s and friends on %2$s!"
-msgstr ""
-
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Η μέθοδος του ΑΡΙ δε βρέθηκε!"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -242,26 +208,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
-
-#: actions/apiaccountupdateprofile.php:112
-#: actions/apiaccountupdateprofilebackgroundimage.php:194
-#: actions/apiaccountupdateprofilecolors.php:185
-#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
-#: actions/replies.php:80 actions/usergroups.php:100 lib/galleryaction.php:66
-#: lib/profileaction.php:84
-msgid "User has no profile."
-msgstr ""
-
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Απέτυχε η αποθήκευση του προφίλ."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -284,20 +230,10 @@ msgstr ""
 msgid "Unable to save your design settings."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
-
 #: actions/apiblockcreate.php:105
 msgid "You cannot block yourself!"
 msgstr "Δεν μπορείτε να κάνετε φραγή στον εαυτό σας!"
 
-#: actions/apiblockcreate.php:126
-msgid "Block user failed."
-msgstr ""
-
 #: actions/apiblockdestroy.php:114
 msgid "Unblock user failed."
 msgstr ""
@@ -331,10 +267,6 @@ msgstr ""
 msgid "That's too long. Max message size is %d chars."
 msgstr ""
 
-#: actions/apidirectmessagenew.php:138
-msgid "Recipient user not found."
-msgstr ""
-
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
@@ -348,22 +280,14 @@ msgstr ""
 msgid "This status is already a favorite."
 msgstr ""
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
-msgid "Could not create favorite."
-msgstr ""
-
 #: actions/apifavoritedestroy.php:123
 msgid "That status is not a favorite."
 msgstr ""
 
-#: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
-msgid "Could not delete favorite."
-msgstr ""
-
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Δε μπορώ να ακολουθήσω το χρήστη: ο χρήστης δε βρέθηκε."
+msgstr ""
+"Δε μπορώ να ακολουθήσω το χρήστη: ο χρήστης %s είναι ήδη στη λίστα σου."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -372,28 +296,21 @@ msgstr ""
 "Δε μπορώ να ακολουθήσω το χρήστη: ο χρήστης %s είναι ήδη στη λίστα σου."
 
 #: actions/apifriendshipsdestroy.php:109
-#, fuzzy
 msgid "Could not unfollow user: User not found."
-msgstr "Δε μπορώ να ακολουθήσω το χρήστη: ο χρήστης δε βρέθηκε."
+msgstr ""
+"Δε μπορώ να ακολουθήσω το χρήστη: ο χρήστης %s είναι ήδη στη λίστα σου."
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Î\94εν Î¼Ï\80οÏ\81είÏ\84ε Î½Î± ÎµÎ¼Ï\80οδίÏ\83εÏ\84ε τον εαυτό σας!"
+msgstr "Î\94εν Î¼Ï\80οÏ\81είÏ\84ε Î½Î± ÎºÎ¬Î½ÎµÏ\84ε Ï\86Ï\81αγή Ï\83τον εαυτό σας!"
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-#, fuzzy
-msgid "Could not determine source user."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
-
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "Απέτυχε η εύρεση οποιασδήποτε κατάστασης."
+msgstr "Απέτυχε η ενημέρωση του χρήστη."
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
@@ -407,12 +324,6 @@ msgstr "Το ψευδώνυμο πρέπει να έχει μόνο πεζούς
 msgid "Nickname already in use. Try another one."
 msgstr "Το ψευδώνυμο είναι ήδη σε χρήση. Δοκιμάστε κάποιο άλλο."
 
-#: actions/apigroupcreate.php:183 actions/editgroup.php:193
-#: actions/newgroup.php:133 actions/profilesettings.php:218
-#: actions/register.php:217
-msgid "Not a valid nickname."
-msgstr ""
-
 #: actions/apigroupcreate.php:199 actions/editapplication.php:215
 #: actions/editgroup.php:199 actions/newapplication.php:203
 #: actions/newgroup.php:139 actions/profilesettings.php:222
@@ -445,15 +356,9 @@ msgid "Too many aliases! Maximum %d."
 msgstr ""
 
 #: actions/apigroupcreate.php:267
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\"."
-msgstr "Μήνυμα"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Το ψευδώνυμο είναι ήδη σε χρήση. Δοκιμάστε κάποιο άλλο."
+msgstr ""
 
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
@@ -463,31 +368,23 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "Η ομάδα δεν βρέθηκε!"
-
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-msgid "You are already a member of that group."
-msgstr ""
-
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "Η μέθοδος του ΑΡΙ δε βρέθηκε!"
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
+#, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
-
-#: actions/apigroupleave.php:115
-msgid "You are not a member of this group."
-msgstr ""
+msgstr "Δεν ήταν δυνατή η δημιουργία ομάδας."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
@@ -497,15 +394,8 @@ msgstr "ομάδες των χρηστών %s"
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Δεν είστε μέλος καμίας ομάδας."
-
-#. TRANS: Message is used as a title. %s is a site name.
-#. TRANS: Message is used as a page title. %s is a nick name.
-#: actions/apigrouplistall.php:92 actions/usergroups.php:63
 #, php-format
-msgid "%s groups"
+msgid "%1$s groups %2$s is a member of."
 msgstr ""
 
 #: actions/apigrouplistall.php:96
@@ -513,19 +403,13 @@ msgstr ""
 msgid "groups on %s"
 msgstr "ομάδες του χρήστη %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "Μήνυμα"
+msgstr ""
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
@@ -550,14 +434,12 @@ msgid "Invalid nickname / password!"
 msgstr ""
 
 #: actions/apioauthauthorize.php:159
-#, fuzzy
 msgid "Database error deleting OAuth application user."
-msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
+msgstr ""
 
 #: actions/apioauthauthorize.php:185
-#, fuzzy
 msgid "Database error inserting OAuth application user."
-msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
+msgstr ""
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -638,21 +520,6 @@ msgstr ""
 msgid "You may not delete another user's status."
 msgstr ""
 
-#: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
-#: actions/deletenotice.php:52 actions/shownotice.php:92
-msgid "No such notice."
-msgstr ""
-
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
-msgid "Already repeated that notice."
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
 #: actions/apistatusesshow.php:139
 msgid "Status deleted."
 msgstr "Η κατάσταση διεγράφη."
@@ -665,17 +532,7 @@ msgstr ""
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr ""
-
-#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
-msgid "Not found."
-msgstr ""
-
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -684,11 +541,6 @@ msgstr ""
 msgid "Unsupported format."
 msgstr ""
 
-#: actions/apitimelinefavorites.php:110
-#, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr ""
-
 #: actions/apitimelinefavorites.php:119
 #, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
@@ -704,21 +556,11 @@ msgstr ""
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
 msgstr ""
 
-#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
-#, php-format
-msgid "%s public timeline"
-msgstr ""
-
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
 msgstr ""
 
-#: actions/apitimelineretweetedtome.php:111
-#, php-format
-msgid "Repeated to %s"
-msgstr ""
-
 #: actions/apitimelineretweetsofme.php:114
 #, php-format
 msgid "Repeats of %s"
@@ -738,31 +580,10 @@ msgstr ""
 msgid "API method under construction."
 msgstr "Η μέθοδος του ΑΡΙ είναι υπό κατασκευή."
 
-#: actions/attachment.php:73
-msgid "No such attachment."
-msgstr ""
-
-#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
-#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
-#: actions/grouplogo.php:86 actions/groupmembers.php:76
-#: actions/grouprss.php:91 actions/showgroup.php:121
-msgid "No nickname."
-msgstr ""
-
-#: actions/avatarbynickname.php:64
-msgid "No size."
-msgstr ""
-
 #: actions/avatarbynickname.php:69
 msgid "Invalid size."
 msgstr ""
 
-#. TRANS: Link description in user account settings menu.
-#: actions/avatarsettings.php:67 actions/showgroup.php:230
-#: lib/accountsettingsaction.php:118
-msgid "Avatar"
-msgstr ""
-
 #: actions/avatarsettings.php:78
 #, php-format
 msgid "You can upload your personal avatar. The maximum file size is %s."
@@ -790,18 +611,10 @@ msgid "Preview"
 msgstr ""
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Διαγραφή"
 
-#: actions/avatarsettings.php:166 actions/grouplogo.php:236
-msgid "Upload"
-msgstr ""
-
-#: actions/avatarsettings.php:231 actions/grouplogo.php:289
-msgid "Crop"
-msgstr ""
-
 #: actions/avatarsettings.php:305
 msgid "No file uploaded."
 msgstr ""
@@ -810,31 +623,13 @@ msgstr ""
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
 
-#: actions/avatarsettings.php:347 actions/grouplogo.php:380
-msgid "Lost our file data."
-msgstr ""
-
-#: actions/avatarsettings.php:370
-msgid "Avatar updated."
-msgstr ""
-
 #: actions/avatarsettings.php:373
 msgid "Failed updating avatar."
 msgstr ""
 
 #: actions/avatarsettings.php:397
-#, fuzzy
 msgid "Avatar deleted."
-msgstr "Ρυθμίσεις OpenID"
-
-#: actions/block.php:69
-#, fuzzy
-msgid "You already blocked that user."
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
-msgid "Block user"
-msgstr ""
+msgstr "Η κατάσταση διεγράφη."
 
 #: actions/block.php:138
 msgid ""
@@ -851,40 +646,22 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Î\8cÏ\87ι"
+msgstr "Î\9aανένα"
 
 #. TRANS: Submit button title for 'No' when blocking a user.
 #. TRANS: Submit button title for 'No' when deleting a user.
 #: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
 msgid "Do not block this user"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Ναι"
-
-#. TRANS: Submit button title for 'Yes' when blocking a user.
-#: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-msgid "Block this user"
-msgstr ""
+msgstr "Διαγράψτε αυτόν τον χρήστη"
 
 #: actions/block.php:187
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -894,21 +671,20 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\9aανέναÏ\82 Ï\84έÏ\84οιοÏ\82 Ï\87Ï\81ήÏ\83Ï\84ηÏ\82."
 
 #: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "ΠÏ\81οÏ\86ίλ Ï\87Ï\81ήÏ\83Ï\84η"
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s και οι φίλοι του/της"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
@@ -922,39 +698,16 @@ msgstr ""
 msgid "Unblock"
 msgstr ""
 
-#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-msgid "Unblock this user"
-msgstr ""
-
-#. TRANS: Title for mini-posting window loaded from bookmarklet.
-#: actions/bookmarklet.php:51
-#, fuzzy, php-format
-msgid "Post to %s"
-msgstr "ομάδες του χρήστη %s"
-
-#: actions/confirmaddress.php:75
-msgid "No confirmation code."
-msgstr ""
-
 #: actions/confirmaddress.php:80
 msgid "Confirmation code not found."
 msgstr "Ο κωδικός επιβεβαίωσης δεν βρέθηκε."
 
-#: actions/confirmaddress.php:85
-msgid "That confirmation code is not for you!"
-msgstr ""
-
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
 #, php-format
 msgid "Unrecognized address type %s."
 msgstr ""
 
-#. TRANS: Client error for an already confirmed email/jabbel/sms address.
-#: actions/confirmaddress.php:96
-msgid "That address has already been confirmed."
-msgstr ""
-
 #. TRANS: Server error thrown on database error updating e-mail preferences.
 #. TRANS: Server error thrown on database error removing a registered e-mail address.
 #. TRANS: Server error thrown on database error updating IM preferences.
@@ -977,9 +730,8 @@ msgid "Couldn't delete email confirmation."
 msgstr "Απέτυχε η διαγραφή email επιβεβαίωσης."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Î\95Ï\80ιβεβαίÏ\89Ï\83η Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82"
+msgstr "ΤÏ\81έÏ\87οÏ\85Ï\83α ÎµÏ\80ιβεβαιÏ\89μένη email Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η."
 
 #: actions/confirmaddress.php:161
 #, php-format
@@ -990,38 +742,12 @@ msgstr ""
 msgid "Conversation"
 msgstr "Συζήτηση"
 
-#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:229 lib/searchgroupnav.php:82
-msgid "Notices"
-msgstr ""
-
-#: actions/deleteapplication.php:63
-#, fuzzy
-msgid "You must be logged in to delete an application."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: actions/deleteapplication.php:71
-#, fuzzy
-msgid "Application not found."
-msgstr "Ο κωδικός επιβεβαίωσης δεν βρέθηκε."
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Ομάδες με τα περισσότερα μέλη"
-
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
 #: lib/action.php:1263
 msgid "There was a problem with your session token."
 msgstr ""
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Δεν υπάρχει τέτοιο σελίδα."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1029,33 +755,14 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
 #. TRANS: Submit button title for 'Yes' when deleting an application.
 #: actions/deleteapplication.php:164
-#, fuzzy
 msgid "Delete this application"
-msgstr "Περιγράψτε την ομάδα ή το θέμα"
-
-#. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
-#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
-#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
-#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
-#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:73 lib/profileformaction.php:64
-#: lib/settingsaction.php:72
-msgid "Not logged in."
-msgstr ""
+msgstr "Διαγράψτε αυτόν τον χρήστη"
 
 #: actions/deletenotice.php:71
-#, fuzzy
 msgid "Can't delete this notice."
-msgstr "Î\91δÏ\85ναμία Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82 Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82."
+msgstr "Î\95ίÏ\83αι Ï\83ίγοÏ\85Ï\81οÏ\82 Ï\8cÏ\84ι Î¸ÎµÏ\82 Î½Î± Î´Î¹Î±Î³Ï\81άÏ\88ειÏ\82 Î±Ï\85Ï\84Ï\8c Ï\84ο Î¼Î®Î½Ï\85μα;"
 
 #: actions/deletenotice.php:103
 msgid ""
@@ -1073,19 +780,8 @@ msgstr "Είσαι σίγουρος ότι θες να διαγράψεις αυ
 
 #. TRANS: Submit button title for 'No' when deleting a notice.
 #: actions/deletenotice.php:151
-#, fuzzy
 msgid "Do not delete this notice"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
-msgid "Delete this notice"
-msgstr ""
-
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
+msgstr "Διαγραφή μηνύματος"
 
 #: actions/deleteuser.php:74
 msgid "You can only delete local users."
@@ -1122,37 +818,25 @@ msgid "Invalid logo URL."
 msgstr ""
 
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Αλλάξτε τον κωδικό σας"
-
-#: actions/designadminpanel.php:431
-msgid "Site logo"
-msgstr ""
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
-msgstr "Αλλαγή"
+msgstr "Αλλαγή χρωμάτων"
 
 #: actions/designadminpanel.php:460
-#, fuzzy
 msgid "Site theme"
-msgstr "Αλλαγή"
+msgstr ""
 
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
 msgstr ""
 
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Αλλαγή"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1232,21 +916,6 @@ msgstr ""
 msgid "Reset back to default"
 msgstr ""
 
-#. TRANS: Submit button title
-#: actions/designadminpanel.php:685 actions/othersettings.php:126
-#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/sitenoticeadminpanel.php:195 actions/snapshotadminpanel.php:245
-#: actions/subscriptions.php:226 actions/tagother.php:154
-#: actions/useradminpanel.php:294 lib/applicationeditform.php:363
-#: lib/designsettings.php:256 lib/groupeditform.php:202
-msgid "Save"
-msgstr ""
-
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr ""
@@ -1260,21 +929,6 @@ msgstr ""
 msgid "No such document \"%s\""
 msgstr ""
 
-#: actions/editapplication.php:54
-#, fuzzy
-msgid "Edit Application"
-msgstr "Δεν υπάρχει τέτοιο σελίδα."
-
-#: actions/editapplication.php:66
-msgid "You must be logged in to edit an application."
-msgstr ""
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Δεν υπάρχει τέτοιο σελίδα."
-
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
 msgstr ""
@@ -1283,39 +937,14 @@ msgstr ""
 msgid "Name is required."
 msgstr ""
 
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Το ονοματεπώνυμο είναι πολύ μεγάλο (μέγιστο 255 χαρακτ.)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Το ψευδώνυμο είναι ήδη σε χρήση. Δοκιμάστε κάποιο άλλο."
-
-#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
-msgid "Description is required."
-msgstr "Περιγραφή"
-
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr ""
 
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Η τοποθεσία είναι πολύ μεγάλη (μέγιστο 255 χαρακτ.)."
-
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
 msgstr ""
@@ -1329,18 +958,8 @@ msgid "Callback URL is not valid."
 msgstr ""
 
 #: actions/editapplication.php:258
-#, fuzzy
 msgid "Could not update application."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: actions/editgroup.php:56
-#, php-format
-msgid "Edit %s group"
-msgstr ""
-
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-msgid "You must be logged in to create a group."
-msgstr ""
+msgstr "Απέτυχε η ενημέρωση του χρήστη."
 
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
@@ -1352,9 +971,9 @@ msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "Το Î²Î¹Î¿Î³Ï\81αÏ\86ικÏ\8c ÎµÎ¯Î½Î±Î¹ Ï\80ολÏ\8d Î¼ÎµÎ³Î¬Î»Î¿ (μέγιÏ\83Ï\84ο 140 χαρακτ.)."
+msgstr "Î\97 Ï\80εÏ\81ιγÏ\81αÏ\86ή ÎµÎ¯Î½Î±Î¹ Ï\80ολÏ\8d Î¼ÎµÎ³Î¬Î»Î· (μέγιÏ\83Ï\84ο %d χαρακτ.)."
 
 #: actions/editgroup.php:228 actions/newgroup.php:168
 #, php-format
@@ -1362,15 +981,13 @@ msgid "Invalid alias: \"%s\""
 msgstr ""
 
 #: actions/editgroup.php:258
-#, fuzzy
 msgid "Could not update group."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #: actions/editgroup.php:280
 msgid "Options saved."
@@ -1378,9 +995,8 @@ msgstr ""
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Ρυθμίσεις Email"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1389,13 +1005,6 @@ msgstr "Ρυθμίσεις Email"
 msgid "Manage how you get email from %%site.name%%."
 msgstr ""
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Διευθύνσεις email"
-
 #. TRANS: Form note in e-mail settings form.
 #: actions/emailsettings.php:112
 msgid "Current confirmed email address."
@@ -1414,24 +1023,13 @@ msgid "Remove"
 msgstr ""
 
 #: actions/emailsettings.php:122
-#, fuzzy
 msgid ""
 "Awaiting confirmation on this address. Check your inbox (and spam box!) for "
 "a message with further instructions."
 msgstr ""
-"Αναμένωντας επιβεβαίωση σε αυτή τη διεύθυνση. Έλεγξε το mail σου (και το "
-"φάκελο spam!) για μήνυμα με περαιτέρω οδηγίες. "
-
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Ακύρωση"
+"Έχει αποσταλεί ένας κωδικός επιβεβαίωσης στην διεύθυνση email που "
+"προσθέσατε. Ελέγξτε τα εισερχόμενα (και τον φάκελο ανεπιθύμητης "
+"αλληλογραφίας) για τον κωδικό και για το πως να τον χρησιμοποιήσετε."
 
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
@@ -1443,10 +1041,9 @@ msgstr "Διεύθυνση email, π.χ: \"UserName@example.org\""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Προσθήκη"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1475,9 +1072,8 @@ msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "ΠÏ\81οÏ\84ιμήÏ\83ειÏ\82"
+msgstr "Î\94ιεÏ\85θÏ\8dνÏ\83ειÏ\82 email"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1509,43 +1105,11 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr "Θέλω να δημοσιεύω ενημερώσεις μέσω email"
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-msgid "Publish a MicroID for my email address."
-msgstr ""
-
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Οι προτιμήσεις αποθηκεύτηκαν"
-
-#. TRANS: Message given saving e-mail address without having provided one.
-#: actions/emailsettings.php:353
-msgid "No email address."
-msgstr ""
-
 #. TRANS: Message given saving e-mail address that cannot be normalised.
 #: actions/emailsettings.php:361
 msgid "Cannot normalize that email address"
 msgstr "Αδυναμία κανονικοποίησης αυτής της email διεύθυνσης"
 
-#. TRANS: Message given saving e-mail address that not valid.
-#: actions/emailsettings.php:366 actions/register.php:208
-#: actions/siteadminpanel.php:144
-msgid "Not a valid email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that is already set.
-#: actions/emailsettings.php:370
-msgid "That is already your email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-msgid "That email address already belongs to another user."
-msgstr ""
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
@@ -1564,41 +1128,10 @@ msgstr ""
 "προσθέσατε. Ελέγξτε τα εισερχόμενα (και τον φάκελο ανεπιθύμητης "
 "αλληλογραφίας) για τον κωδικό και για το πως να τον χρησιμοποιήσετε."
 
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-msgid "No pending confirmation to cancel."
-msgstr ""
-
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Εισάγετε ψευδώνυμο ή διεύθυνση email."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Η επιβεβαίωση ακυρώθηκε."
-
-#. TRANS: Message given trying to remove an e-mail address that is not
-#. TRANS: registered for the active user.
-#: actions/emailsettings.php:458
-msgid "That is not your email address."
-msgstr ""
-
-#. TRANS: Message given after successfully removing a registered e-mail address.
-#: actions/emailsettings.php:479
-#, fuzzy
-msgid "The email address was removed."
-msgstr "Η διεύθυνση του εισερχόμενου email αφαιρέθηκε."
-
-#: actions/emailsettings.php:493 actions/smssettings.php:568
-msgid "No incoming email address."
-msgstr ""
+msgstr "Επιβεβαίωση διεύθυνσης email"
 
 #. TRANS: Server error thrown on database error removing incoming e-mail address.
 #. TRANS: Server error thrown on database error adding incoming e-mail address.
@@ -1612,11 +1145,6 @@ msgstr "Απέτυχε η ενημέρωση εγγραφής του χρήστ
 msgid "Incoming email address removed."
 msgstr "Η διεύθυνση του εισερχόμενου email αφαιρέθηκε."
 
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
-
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr ""
@@ -1625,16 +1153,6 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:91
-#: lib/publicgroupnav.php:93
-msgid "Popular notices"
-msgstr ""
-
-#: actions/favorited.php:67
-#, php-format
-msgid "Popular notices, page %d"
-msgstr ""
-
 #: actions/favorited.php:79
 msgid "The most popular notices on the site right now."
 msgstr ""
@@ -1656,41 +1174,19 @@ msgid ""
 "notice to your favorites!"
 msgstr ""
 
-#: actions/favoritesrss.php:111 actions/showfavorites.php:77
-#: lib/personalgroupnav.php:115
-#, php-format
-msgid "%s's favorite notices"
-msgstr ""
-
 #: actions/favoritesrss.php:115
 #, php-format
 msgid "Updates favored by %1$s on %2$s!"
 msgstr ""
 
-#: actions/featured.php:69 lib/featureduserssection.php:87
-#: lib/publicgroupnav.php:89
-msgid "Featured users"
-msgstr ""
-
-#: actions/featured.php:71
-#, php-format
-msgid "Featured users, page %d"
-msgstr ""
-
 #: actions/featured.php:99
 #, php-format
 msgid "A selection of some great users on %s"
 msgstr ""
 
-#: actions/file.php:34
-#, fuzzy
-msgid "No notice ID."
-msgstr "Μήνυμα"
-
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Î\9cήνÏ\85μα"
+msgstr "Î\94ιαγÏ\81αÏ\86ή Î¼Î·Î½Ï\8dμαÏ\84οÏ\82"
 
 #: actions/file.php:42
 msgid "No attachments."
@@ -1708,10 +1204,6 @@ msgstr ""
 msgid "User being listened to does not exist."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
-msgid "You can use the local subscription!"
-msgstr ""
-
 #: actions/finishremotesubscribe.php:99
 msgid "That user has blocked you from subscribing."
 msgstr ""
@@ -1721,42 +1213,32 @@ msgid "You are not authorized."
 msgstr ""
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Απέτυχε η μετατροπή αιτούμενων tokens σε tokens πρόσβασης."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Απέτυχε η αποθήκευση του προφίλ."
-
 #: actions/getfile.php:79
-#, fuzzy
 msgid "No such file."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\9aανέναÏ\82 Ï\84έÏ\84οιοÏ\82 Ï\87Ï\81ήÏ\83Ï\84ηÏ\82."
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr "Απέτυχε η αποθήκευση του προφίλ."
 
 #: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
 msgid "Invalid role."
-msgstr "Μήνυμα"
+msgstr ""
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Ομάδες με τα περισσότερα μέλη"
+msgstr ""
 
 #: actions/grantrole.php:82
 msgid "User already has this role."
@@ -1787,10 +1269,6 @@ msgstr ""
 msgid "User is already blocked from group."
 msgstr ""
 
-#: actions/groupblock.php:100
-msgid "User is not a member of group."
-msgstr ""
-
 #: actions/groupblock.php:134 actions/groupmembers.php:360
 msgid "Block user from group"
 msgstr ""
@@ -1803,11 +1281,6 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-msgid "Do not block this user from this group"
-msgstr ""
-
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
 msgid "Block this user from this group"
@@ -1835,21 +1308,6 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "Οι προτιμήσεις αποθηκεύτηκαν"
-
-#: actions/grouplogo.php:142 actions/grouplogo.php:195
-msgid "Group logo"
-msgstr ""
-
 #: actions/grouplogo.php:153
 #, php-format
 msgid ""
@@ -1860,25 +1318,10 @@ msgstr ""
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "Αποσύνδεση"
-
 #: actions/grouplogo.php:401
 msgid "Failed updating logo."
 msgstr ""
 
-#: actions/groupmembers.php:100 lib/groupnav.php:92
-#, php-format
-msgid "%s group members"
-msgstr ""
-
-#: actions/groupmembers.php:103
-#, php-format
-msgid "%1$s group members, page %2$d"
-msgstr ""
-
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
 msgstr ""
@@ -1895,11 +1338,6 @@ msgstr ""
 msgid "Make user an admin of the group"
 msgstr ""
 
-#: actions/groupmembers.php:519
-#, fuzzy
-msgid "Make Admin"
-msgstr "Διαχειριστής"
-
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
 msgstr ""
@@ -1919,16 +1357,6 @@ msgstr "χρονοδιάγραμμα του χρήστη %s"
 msgid "Updates from members of %1$s on %2$s!"
 msgstr ""
 
-#: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
-#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
-msgid "Groups"
-msgstr ""
-
-#: actions/groups.php:64
-#, php-format
-msgid "Groups, page %d"
-msgstr ""
-
 #: actions/groups.php:90
 #, php-format
 msgid ""
@@ -1940,9 +1368,8 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "Δημιουργία νέου λογαριασμού"
+msgstr ""
 
 #: actions/groupsearch.php:52
 #, php-format
@@ -1988,9 +1415,8 @@ msgstr ""
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "Ρυθμίσεις ΙΜ"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2004,33 +1430,19 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "Î\94ιεÏ\8dθÏ\85νÏ\83η Î\99Î\9c"
+msgstr "Î\94ιεÏ\85θÏ\8dνÏ\83ειÏ\82 email"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
 msgstr "Τρέχουσα επιβεβαιωμένη Jabber/GTalk διεύθυνση."
 
-#. TRANS: Form note in IM settings form.
-#. TRANS: %s is the IM address set for the site.
-#: actions/imsettings.php:124
-#, fuzzy, php-format
-msgid ""
-"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
-"message with further instructions. (Did you add %s to your buddy list?)"
-msgstr ""
-"Αναμένωντας επιβεβαίωση σε αυτή τη διεύθυνση. Έλεγξε το Jabber/GTalk "
-"λογαριασμό σου για μήνυμα με περαιτέρω οδηγίες. (Πρόσθεσες το χρήστη %s στη "
-"λίστα φίλων?)"
-
 #. TRANS: IM address input field instructions in IM settings form.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:140
@@ -2042,9 +1454,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "ΠÏ\81οÏ\84ιμήÏ\83ειÏ\82"
+msgstr "Î\9fι Ï\80Ï\81οÏ\84ιμήÏ\83ειÏ\82 Î±Ï\80οθηκεÏ\8dÏ\84ηκαν"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2061,41 +1472,21 @@ msgstr ""
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
 msgstr ""
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
 msgstr "Οι προτιμήσεις αποθηκεύτηκαν"
 
-#. TRANS: Message given saving IM address without having provided one.
-#: actions/imsettings.php:309
-msgid "No Jabber ID."
-msgstr ""
-
 #. TRANS: Message given saving IM address that cannot be normalised.
 #: actions/imsettings.php:317
 msgid "Cannot normalize that Jabber ID"
 msgstr "Αδυναμία κανονικοποίησης του Jabber ID"
 
-#. TRANS: Message given saving IM address that not valid.
-#: actions/imsettings.php:322
-msgid "Not a valid Jabber ID"
-msgstr ""
-
 #. TRANS: Message given saving IM address that is already set.
 #: actions/imsettings.php:326
 msgid "That is already your Jabber ID."
 msgstr ""
 
-#. TRANS: Message given saving IM address that is already set for another user.
-#: actions/imsettings.php:330
-msgid "Jabber ID already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid IM address that is to be confirmed.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:358
@@ -2112,35 +1503,12 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr ""
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Απέτυχε η διαγραφή email επιβεβαίωσης."
-
-#. TRANS: Message given after successfully canceling IM address confirmation.
-#: actions/imsettings.php:402
-#, fuzzy
-msgid "IM confirmation cancelled."
-msgstr "Η επιβεβαίωση ακυρώθηκε."
-
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
 #: actions/imsettings.php:424
 msgid "That is not your Jabber ID."
 msgstr ""
 
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-#, fuzzy
-msgid "The IM address was removed."
-msgstr "Η διεύθυνση του εισερχόμενου email αφαιρέθηκε."
-
-#: actions/inbox.php:59
-#, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr ""
-
 #: actions/inbox.php:62
 #, php-format
 msgid "Inbox for %s"
@@ -2155,32 +1523,8 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: actions/invite.php:72
-#, php-format
-msgid "Invalid email address: %s"
-msgstr ""
-
-#: actions/invite.php:110
-msgid "Invitation(s) sent"
-msgstr ""
-
-#: actions/invite.php:112
-msgid "Invite new users"
-msgstr ""
-
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
-#. TRANS: Whois output.
-#. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
 #, php-format
-msgid "%1$s (%2$s)"
+msgid "You must be logged in to invite other users to use %s."
 msgstr ""
 
 #: actions/invite.php:136
@@ -2198,11 +1542,6 @@ msgid ""
 "on the site. Thanks for growing the community!"
 msgstr ""
 
-#: actions/invite.php:162
-msgid ""
-"Use this form to invite your friends and colleagues to use this service."
-msgstr ""
-
 #: actions/invite.php:187
 msgid "Email addresses"
 msgstr "Διευθύνσεις email"
@@ -2211,10 +1550,6 @@ msgstr "Διευθύνσεις email"
 msgid "Addresses of friends to invite (one per line)"
 msgstr "Διευθύνσεις φίλων σου που θες να προσκαλέσεις (μία ανά γραμμή)"
 
-#: actions/invite.php:192
-msgid "Personal message"
-msgstr ""
-
 #: actions/invite.php:194
 msgid "Optionally add a personal message to the invitation."
 msgstr ""
@@ -2268,32 +1603,13 @@ msgid "You must be logged in to join a group."
 msgstr ""
 
 #: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
 msgid "No nickname or ID."
-msgstr "Μήνυμα"
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, php-format
-msgid "%1$s joined group %2$s"
-msgstr ""
+msgstr "Ψευδώνυμο"
 
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
 msgstr ""
 
-#: actions/leavegroup.php:100 lib/command.php:373
-msgid "You are not a member of that group."
-msgstr ""
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, php-format
-msgid "%1$s left group %2$s"
-msgstr ""
-
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
 msgstr "Ήδη συνδεδεμένος."
@@ -2314,10 +1630,6 @@ msgstr "Σύνδεση"
 msgid "Login to site"
 msgstr ""
 
-#: actions/login.php:258 actions/register.php:485
-msgid "Remember me"
-msgstr ""
-
 #: actions/login.php:259 actions/register.php:487
 msgid "Automatically login in the future; not for shared computers!"
 msgstr "Αυτόματη σύνδεση στο μέλλον. ΟΧΙ για κοινόχρηστους υπολογιστές!"
@@ -2334,19 +1646,11 @@ msgstr ""
 "Για λόγους ασφαλείας, παρακαλώ εισάγετε ξανά το όνομα χρήστη και τον κωδικό "
 "σας, πριν αλλάξετε τις ρυθμίσεις σας."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Σύνδεση με όνομα χρήστη και κωδικό"
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Συνδεθείτε με το όνομα χρήστη και τον κωδικό σας. Δεν έχετε όνομα χρήστη "
-"ακόμα; Κάντε [εγγραφή](%%action.register%%) για ένα νέο λογαριασμό ή "
-"δοκιμάστε το [OpenID](%%action.openidlogin%%). "
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
@@ -2358,28 +1662,14 @@ msgid "%1$s is already an admin for group \"%2$s\"."
 msgstr ""
 
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: actions/makeadmin.php:146
-#, fuzzy, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr ""
 
 #: actions/microsummary.php:69
 msgid "No current status."
 msgstr ""
 
-#: actions/newapplication.php:52
-#, fuzzy
-msgid "New Application"
-msgstr "Δεν υπάρχει τέτοιο σελίδα."
-
-#: actions/newapplication.php:64
-msgid "You must be logged in to register an application."
-msgstr ""
-
 #: actions/newapplication.php:143
 msgid "Use this form to register a new application."
 msgstr ""
@@ -2389,61 +1679,34 @@ msgid "Source URL is required."
 msgstr ""
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: actions/newgroup.php:53
-msgid "New group"
-msgstr ""
+msgstr "Δεν ήταν δυνατή η δημιουργία ομάδας."
 
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
 msgstr ""
 
-#: actions/newmessage.php:71 actions/newmessage.php:231
-msgid "New message"
-msgstr ""
-
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-msgid "You can't send a message to this user."
-msgstr ""
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
-msgid "No content!"
-msgstr ""
-
 #: actions/newmessage.php:158
 msgid "No recipient specified."
 msgstr ""
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 
-#: actions/newmessage.php:181
-msgid "Message sent"
-msgstr ""
-
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
-#: actions/newnotice.php:69
-msgid "New notice"
-msgstr ""
-
-#: actions/newnotice.php:217
-msgid "Notice posted"
-msgstr ""
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2456,9 +1719,9 @@ msgid "Text search"
 msgstr ""
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Αναζήτηση ροής για \"%s\""
+msgstr ""
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2480,9 +1743,9 @@ msgid "Updates with \"%s\""
 msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Όλες οι ενημερώσεις που ταιριάζουν με τον όρο αναζήτησης \"%s\""
+msgstr ""
 
 #: actions/nudge.php:85
 msgid ""
@@ -2501,32 +1764,14 @@ msgstr ""
 msgid "You must be logged in to list your applications."
 msgstr ""
 
-#: actions/oauthappssettings.php:74
-msgid "OAuth applications"
-msgstr ""
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Δεν είστε μέλος καμίας ομάδας."
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2540,21 +1785,11 @@ msgstr ""
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
-#: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
-msgid "Notice has no profile."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: actions/oembed.php:87 actions/shownotice.php:175
-#, php-format
-msgid "%1$s's status on %2$s"
-msgstr ""
-
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Σύνδεση"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2563,23 +1798,18 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr ""
 
-#: actions/opensearch.php:64
-msgid "People Search"
-msgstr ""
-
 #: actions/opensearch.php:67
 msgid "Notice Search"
 msgstr ""
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2593,51 +1823,30 @@ msgstr ""
 msgid "Shorten URLs with"
 msgstr ""
 
-#: actions/othersettings.php:117
-msgid "Automatic shortening service to use."
-msgstr ""
-
-#: actions/othersettings.php:122
-msgid "View profile designs"
-msgstr ""
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Η τοποθεσία είναι πολύ μεγάλη (μέγιστο 255 χαρακτ.)."
-
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "Μήνυμα"
+msgstr ""
 
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "Μήνυμα"
+msgstr ""
 
 #: actions/otp.php:90
 msgid "No login token requested."
 msgstr ""
 
 #: actions/otp.php:95
-#, fuzzy
 msgid "Invalid login token specified."
-msgstr "Μήνυμα"
+msgstr ""
 
 #: actions/otp.php:104
 msgid "Login token expired."
 msgstr ""
 
-#: actions/outbox.php:58
-#, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr ""
-
 #: actions/outbox.php:61
 #, php-format
 msgid "Outbox for %s"
@@ -2652,18 +1861,8 @@ msgid "Change password"
 msgstr "Αλλαγή κωδικού"
 
 #: actions/passwordsettings.php:69
-#, fuzzy
 msgid "Change your password."
-msgstr "Αλλαγή κωδικού"
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "Ο κωδικός αποθηκεύτηκε."
-
-#: actions/passwordsettings.php:104
-msgid "Old password"
-msgstr ""
+msgstr "Αλλάξτε τον κωδικό σας"
 
 #: actions/passwordsettings.php:108 actions/recoverpassword.php:235
 msgid "New password"
@@ -2686,10 +1885,6 @@ msgstr ""
 msgid "Change"
 msgstr "Αλλαγή"
 
-#: actions/passwordsettings.php:154 actions/register.php:237
-msgid "Password must be 6 or more characters."
-msgstr ""
-
 #: actions/passwordsettings.php:157 actions/register.php:240
 msgid "Passwords don't match."
 msgstr "Οι κωδικοί δεν ταυτίζονται."
@@ -2720,24 +1915,24 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2748,9 +1943,8 @@ msgid "Site"
 msgstr ""
 
 #: actions/pathsadminpanel.php:238
-#, fuzzy
 msgid "Server"
-msgstr "Αποχώρηση"
+msgstr ""
 
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
@@ -2760,10 +1954,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-msgid "Site path"
-msgstr ""
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2797,33 +1987,21 @@ msgid "Theme directory"
 msgstr ""
 
 #: actions/pathsadminpanel.php:279
-#, fuzzy
 msgid "Avatars"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #: actions/pathsadminpanel.php:288
-#, fuzzy
 msgid "Avatar path"
-msgstr "Ρυθμίσεις OpenID"
-
-#: actions/pathsadminpanel.php:292
-#, fuzzy
-msgid "Avatar directory"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
 msgstr ""
 
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:309
 msgid "Background path"
 msgstr ""
@@ -2836,11 +2014,6 @@ msgstr ""
 msgid "SSL"
 msgstr ""
 
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "Αποχώρηση"
-
 #: actions/pathsadminpanel.php:324
 msgid "Sometimes"
 msgstr ""
@@ -2857,11 +2030,6 @@ msgstr ""
 msgid "When to use SSL"
 msgstr ""
 
-#: actions/pathsadminpanel.php:335
-#, fuzzy
-msgid "SSL server"
-msgstr "Αποχώρηση"
-
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
@@ -2877,10 +2045,6 @@ msgid ""
 "Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
 
-#: actions/peoplesearch.php:58
-msgid "People search"
-msgstr ""
-
 #: actions/peopletag.php:68
 #, php-format
 msgid "Not a valid people tag: %s."
@@ -2892,19 +2056,14 @@ msgid "Users self-tagged with %1$s - page %2$d"
 msgstr ""
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Μήνυμα"
+msgstr ""
 
 #: actions/postnotice.php:101
 #, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#: actions/profilesettings.php:60
-msgid "Profile settings"
-msgstr ""
-
 #: actions/profilesettings.php:71
 msgid ""
 "You can update your personal profile info here so people know more about you."
@@ -2935,14 +2094,9 @@ msgid "URL of your homepage, blog, or profile on another site"
 msgstr ""
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Περιέγραψε τον εαυτό σου και τα ενδιαφέροντά σου σε 140 χαρακτήρες"
-
-#: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
-msgid "Describe yourself and your interests"
-msgstr "Περιέγραψε τον εαυτό σου και τα ενδιαφέροντά σου σε 140 χαρακτήρες"
+msgstr "Περιγράψτε την ομάδα ή το θέμα χρησιμοποιώντας μέχρι %d χαρακτήρες"
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -2955,10 +2109,6 @@ msgstr "Βιογραφικό"
 msgid "Location"
 msgstr "Τοποθεσία"
 
-#: actions/profilesettings.php:134 actions/register.php:480
-msgid "Where you are, like \"City, State (or Region), Country\""
-msgstr ""
-
 #: actions/profilesettings.php:138
 msgid "Share my current location when posting notices"
 msgstr ""
@@ -2990,27 +2140,15 @@ msgstr ""
 msgid "What timezone are you normally in?"
 msgstr ""
 
-#: actions/profilesettings.php:167
-#, fuzzy
-msgid ""
-"Automatically subscribe to whoever subscribes to me (best for non-humans)"
-msgstr ""
-"Αυτόματα γίνε συνδρομητής σε όσους γίνονται συνδρομητές σε μένα  (χρήση "
-"κυρίως από λογισμικό και όχι ανθρώπους)"
-
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "Το Î²Î¹Î¿Î³Ï\81αÏ\86ικÏ\8c ÎµÎ¯Î½Î±Î¹ Ï\80ολÏ\8d Î¼ÎµÎ³Î¬Î»Î¿ (μέγιÏ\83Ï\84ο 140 χαρακτ.)."
+msgstr "Î\97 Ï\80εÏ\81ιγÏ\81αÏ\86ή ÎµÎ¯Î½Î±Î¹ Ï\80ολÏ\8d Î¼ÎµÎ³Î¬Î»Î· (μέγιÏ\83Ï\84ο %d χαρακτ.)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
 msgid "Invalid tag: \"%s\""
@@ -3021,42 +2159,27 @@ msgid "Couldn't update user for autosubscribe."
 msgstr "Απέτυχε η ενημέρωση του χρήστη για την αυτόματη συνδρομή."
 
 #: actions/profilesettings.php:363
-#, fuzzy
 msgid "Couldn't save location prefs."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr "Απέτυχε η αποθήκευση του προφίλ."
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Απέτυχε η αποθήκευση του προφίλ."
 
 #: actions/profilesettings.php:383
-#, fuzzy
 msgid "Couldn't save tags."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#. TRANS: Message after successful saving of administrative settings.
-#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
-msgid "Settings saved."
-msgstr ""
+msgstr "Απέτυχε η αποθήκευση του προφίλ."
 
 #: actions/public.php:83
 #, php-format
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
 #: actions/public.php:130
 #, php-format
 msgid "Public timeline, page %d"
 msgstr ""
 
-#: actions/public.php:132 lib/publicgroupnav.php:79
-msgid "Public timeline"
-msgstr ""
-
 #: actions/public.php:160
 msgid "Public Stream Feed (RSS 1.0)"
 msgstr ""
@@ -3066,15 +2189,7 @@ msgid "Public Stream Feed (RSS 2.0)"
 msgstr ""
 
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "Δημόσια ροή %s"
-
-#: actions/public.php:188
-#, php-format
-msgid ""
-"This is the public timeline for %%site.name%% but no one has posted anything "
-"yet."
 msgstr ""
 
 #: actions/public.php:191
@@ -3129,18 +2244,6 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:134
-msgid "Tag cloud"
-msgstr ""
-
-#: actions/recoverpassword.php:36
-msgid "You are already logged in!"
-msgstr ""
-
-#: actions/recoverpassword.php:62
-msgid "No such recovery code."
-msgstr ""
-
 #: actions/recoverpassword.php:66
 msgid "Not a recovery code."
 msgstr ""
@@ -3149,10 +2252,6 @@ msgstr ""
 msgid "Recovery code for unknown user."
 msgstr ""
 
-#: actions/recoverpassword.php:86
-msgid "Error with confirmation code."
-msgstr ""
-
 #: actions/recoverpassword.php:97
 msgid "This confirmation code is too old. Please start again."
 msgstr ""
@@ -3161,24 +2260,10 @@ msgstr ""
 msgid "Could not update user with confirmed email address."
 msgstr "Απέτυχε η ενημέρωση χρήστη μέσω επιβεβαιωμένης email διεύθυνσης."
 
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr ""
@@ -3187,14 +2272,6 @@ msgstr ""
 msgid "Recover"
 msgstr ""
 
-#: actions/recoverpassword.php:208
-msgid "Reset password"
-msgstr ""
-
-#: actions/recoverpassword.php:209
-msgid "Recover password"
-msgstr ""
-
 #: actions/recoverpassword.php:210 actions/recoverpassword.php:335
 msgid "Password recovery requested"
 msgstr ""
@@ -3207,10 +2284,6 @@ msgstr ""
 msgid "6 or more characters, and don't forget it!"
 msgstr "6 ή περισσότεροι χαρακτήρες και μην το ξεχάσετε!"
 
-#: actions/recoverpassword.php:243
-msgid "Reset"
-msgstr ""
-
 #: actions/recoverpassword.php:252
 msgid "Enter a nickname or email address."
 msgstr "Εισάγετε ψευδώνυμο ή διεύθυνση email."
@@ -3223,10 +2296,6 @@ msgstr ""
 msgid "No registered email address for that user."
 msgstr ""
 
-#: actions/recoverpassword.php:313
-msgid "Error saving address confirmation."
-msgstr ""
-
 #: actions/recoverpassword.php:338
 msgid ""
 "Instructions for recovering your password have been sent to the email "
@@ -3247,10 +2316,6 @@ msgstr "Ο κωδικός πρέπει να είναι 6 χαρακτήρες ή
 msgid "Password and confirmation do not match."
 msgstr "Ο κωδικός και η επιβεβαίωση του δεν ταυτίζονται."
 
-#: actions/recoverpassword.php:388 actions/register.php:255
-msgid "Error setting user."
-msgstr ""
-
 #: actions/recoverpassword.php:395
 msgid "New password successfully saved. You are now logged in."
 msgstr ""
@@ -3263,18 +2328,6 @@ msgstr ""
 msgid "Sorry, invalid invitation code."
 msgstr ""
 
-#: actions/register.php:119
-msgid "Registration successful"
-msgstr ""
-
-#: actions/register.php:121 actions/register.php:506 lib/logingroupnav.php:85
-msgid "Register"
-msgstr ""
-
-#: actions/register.php:142
-msgid "Registration not allowed."
-msgstr ""
-
 #: actions/register.php:205
 msgid "You can't register if you don't agree to the license."
 msgstr ""
@@ -3283,10 +2336,6 @@ msgstr ""
 msgid "Email address already exists."
 msgstr "Η διεύθυνση email υπάρχει ήδη."
 
-#: actions/register.php:250 actions/register.php:272
-msgid "Invalid username or password."
-msgstr ""
-
 #: actions/register.php:350
 msgid ""
 "With this form you can create a new account. You can then post notices and "
@@ -3342,16 +2391,14 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-"εκτός από τα εξής προσωπικά δεδομένα: κωδικός πρόσβασης, διεύθυνση email, "
-"διεύθυνση IM, τηλεφωνικό νούμερο."
 
 #: actions/register.php:583
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
@@ -3368,21 +2415,6 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Συγχαρητήρια, %s! και καλωσήρθες στο %%%%site.name%%%%. Από εδώ μπορείς "
-"να...\n"
-"\n"
-"* Πας στο [your profile](%s) και να στείλεις το πρώτο σου μήνυμα.\n"
-"* Προσθέσεις ένα [Jabber/GTalk address](%%%%action.imsettings%%%%) ώστε να "
-"δέχεσε μηνύματα στο instant messager σου.\n"
-"* [Search for people](%%%%action.peoplesearch%%%%) που μπορεί να ξέρεις ή "
-"που έχουν τα ίδια ενδιαφέροντα με σένα. \n"
-"* Ενημερώσεις το προφίλ σου [profile settings](%%%%action.profilesettings%%%"
-"%) για να μάθουν οι άλλοι περισσότερα για σένα. \n"
-"* Διαβάσεις τα [online docs](%%%%doc.help%%%%) για λειτουργίες που μπορεί να "
-"μην έχεις μάθει ακόμα. \n"
-"\n"
-"Ευχαριστούμε που εγγράφηκες και ευχόμαστε να περάσεις καλά με την υπηρεσία "
-"μας."
 
 #: actions/register.php:607
 msgid ""
@@ -3400,19 +2432,6 @@ msgid ""
 "microblogging site](%%doc.openmublog%%),  enter your profile URL below."
 msgstr ""
 
-#: actions/remotesubscribe.php:112
-msgid "Remote subscribe"
-msgstr ""
-
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "Γίνε συνδρομητής αυτού του χρήστη"
-
-#: actions/remotesubscribe.php:129
-msgid "User nickname"
-msgstr ""
-
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
 msgstr "Το ψευδώνυμο του χρήστη που θέλετε να παρακολουθήσετε"
@@ -3425,11 +2444,6 @@ msgstr ""
 msgid "URL of your profile on another compatible microblogging service"
 msgstr ""
 
-#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:406
-msgid "Subscribe"
-msgstr ""
-
 #: actions/remotesubscribe.php:159
 msgid "Invalid profile URL (bad format)"
 msgstr ""
@@ -3443,72 +2457,43 @@ msgid "That’s a local profile! Login to subscribe."
 msgstr ""
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Απέτυχε η μετατροπή αιτούμενων tokens σε tokens πρόσβασης."
+msgstr ""
 
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Μήνυμα"
-
 #: actions/repeat.php:76
 msgid "You can't repeat your own notice."
 msgstr ""
 
 #: actions/repeat.php:90
-#, fuzzy
 msgid "You already repeated that notice."
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
+msgstr ""
 
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "Î\94ημιοÏ\85Ï\81γία"
+msgstr "Î\95Ï\80αναλαμβάνεÏ\84αι Î±Ï\80Ï\8c"
 
 #: actions/repeat.php:119
-#, fuzzy
 msgid "Repeated!"
-msgstr "Δημιουργία"
-
-#: actions/replies.php:126 actions/repliesrss.php:68
-#: lib/personalgroupnav.php:105
-#, php-format
-msgid "Replies to %s"
-msgstr ""
-
-#: actions/replies.php:128
-#, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr ""
+msgstr "Επαναλαμβάνεται από"
 
 #: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Ροή φίλων του/της %s"
+msgstr "Ροή φίλων του/της %s (RSS 1.0)"
 
 #: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Ροή φίλων του/της %s"
+msgstr "Ροή φίλων του/της %s (RSS 2.0)"
 
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Ροή φίλων του/της %s"
-
-#: actions/replies.php:199
-#, fuzzy, php-format
-msgid ""
-"This is the timeline showing replies to %1$s but %2$s hasn't received a "
-"notice to them yet."
-msgstr ""
-"Αυτό είναι το χρονοδιάγραμμα για %s και φίλους, αλλά κανείς δεν έχει κάνει "
-"καμία αποστολή ακόμα."
+msgstr "Ροή φίλων του/της %s (Atom)"
 
 #: actions/replies.php:204
 #, php-format
@@ -3530,18 +2515,16 @@ msgid "Replies to %1$s on %2$s!"
 msgstr ""
 
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
+msgstr ""
 
 #: actions/revokerole.php:82
 msgid "User doesn't have this role."
 msgstr ""
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Î\97 ÎºÎ±Ï\84άÏ\83Ï\84αÏ\83η Î´Î¹Î±Î³Ï\81άÏ\86εÏ\84αι."
+msgstr "Î\97 ÎºÎ±Ï\84άÏ\83Ï\84αÏ\83η Î´Î¹ÎµÎ³Ï\81άÏ\86η."
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
 msgid "You cannot sandbox users on this site."
@@ -3579,13 +2562,8 @@ msgstr ""
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "Ρυθμίσεις OpenID"
-
-#: actions/showapplication.php:82
-msgid "You must be logged in to view an application."
-msgstr ""
+msgstr "Αποθήκευση ρυθμίσεων πρόσβασης"
 
 #: actions/showapplication.php:157
 msgid "Application profile"
@@ -3596,30 +2574,12 @@ msgstr ""
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Ψευδώνυμο"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
-msgid "Organization"
-msgstr "Προσκλήσεις"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
 #: lib/applicationeditform.php:216 lib/groupeditform.php:172
 msgid "Description"
 msgstr "Περιγραφή"
 
-#: actions/showapplication.php:192 actions/showgroup.php:436
-#: lib/profileaction.php:187
-msgid "Statistics"
-msgstr ""
-
 #: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
@@ -3663,34 +2623,25 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Είσαι σίγουρος ότι θες να διαγράψεις αυτό το μήνυμα;"
-
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s και οι φίλοι του/της"
-
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
-msgstr ""
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Ροή φίλων του/της %s"
+msgstr "Ροή φίλων του/της %s (RSS 1.0)"
 
 #: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Ροή φίλων του/της %s"
+msgstr "Ροή φίλων του/της %s (RSS 2.0)"
 
 #: actions/showfavorites.php:185
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (Atom)"
-msgstr "Ροή φίλων του/της %s"
+msgstr "Ροή φίλων του/της %s (Atom)"
 
 #: actions/showfavorites.php:206
 msgid ""
@@ -3717,73 +2668,33 @@ msgstr ""
 msgid "This is a way to share what you like."
 msgstr ""
 
-#: actions/showgroup.php:82 lib/groupnav.php:86
-#, php-format
-msgid "%s group"
-msgstr ""
-
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "ΠÏ\81οÏ\86ίλ Ï\87Ï\81ήÏ\83Ï\84η"
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-msgid "Note"
-msgstr ""
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
-#: actions/showgroup.php:338
-#, php-format
-msgid "Notice feed for %s group (RSS 1.0)"
-msgstr ""
-
-#: actions/showgroup.php:344
-#, php-format
-msgid "Notice feed for %s group (RSS 2.0)"
-msgstr ""
-
-#: actions/showgroup.php:350
-#, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr ""
-
 #: actions/showgroup.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s group"
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr ""
 
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
 msgstr "Μέλη"
 
-#: actions/showgroup.php:398 lib/profileaction.php:117
-#: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
-#: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
-msgid "(None)"
-msgstr ""
-
-#: actions/showgroup.php:404
-msgid "All members"
-msgstr ""
-
 #: actions/showgroup.php:439
 msgid "Created"
 msgstr "Δημιουργημένος"
@@ -3811,10 +2722,6 @@ msgstr ""
 msgid "Admins"
 msgstr "Διαχειριστές"
 
-#: actions/showmessage.php:81
-msgid "No such message."
-msgstr ""
-
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
 msgstr ""
@@ -3830,9 +2737,8 @@ msgid "Message from %1$s on %2$s"
 msgstr ""
 
 #: actions/shownotice.php:90
-#, fuzzy
 msgid "Notice deleted."
-msgstr "ΡÏ\85θμίÏ\83ειÏ\82 OpenID"
+msgstr "Î\97 ÎºÎ±Ï\84άÏ\83Ï\84αÏ\83η Î´Î¹ÎµÎ³Ï\81άÏ\86η."
 
 #: actions/showstream.php:73
 #, php-format
@@ -3840,40 +2746,20 @@ msgid " tagged %s"
 msgstr ""
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s και οι φίλοι του/της"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
-msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Ροή φίλων του/της %s"
-
-#: actions/showstream.php:129
-#, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/showstream.php:136
 #, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr ""
-
-#: actions/showstream.php:143
-#, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr ""
+msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
+msgstr "Ροή φίλων του/της %s (RSS 1.0)"
 
 #: actions/showstream.php:148
 #, php-format
 msgid "FOAF for %s"
 msgstr ""
 
-#: actions/showstream.php:200
-#, php-format
-msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr ""
-
 #: actions/showstream.php:205
 msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
@@ -3904,15 +2790,6 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, php-format
-msgid "Repeat of %s"
-msgstr ""
-
-#: actions/silence.php:65 actions/unsilence.php:65
-msgid "You cannot silence users on this site."
-msgstr ""
-
 #: actions/silence.php:72
 msgid "User is already silenced."
 msgstr ""
@@ -3926,9 +2803,8 @@ msgid "Site name must have non-zero length."
 msgstr ""
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Î\91δÏ\85ναμία ÎºÎ±Î½Î¿Î½Î¹ÎºÎ¿Ï\80οίηÏ\83ηÏ\82 Î±Ï\85Ï\84ήÏ\82 Ï\84ηÏ\82 email Î´Î¹ÎµÏ\8dθÏ\85νÏ\83ηÏ\82"
+msgstr "Î\95ιÏ\83άγεÏ\84ε Ï\88εÏ\85δÏ\8eνÏ\85μο Î® Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η email."
 
 #: actions/siteadminpanel.php:159
 #, php-format
@@ -3971,11 +2847,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Η διεύθυνση του εισερχόμενου email αφαιρέθηκε."
-
 #: actions/siteadminpanel.php:245
 msgid "Local"
 msgstr "Τοπικός"
@@ -4016,42 +2887,26 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "Διαγραφή μηνύματος"
-
 #: actions/sitenoticeadminpanel.php:67
 msgid "Edit site-wide message"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:103
-msgid "Unable to save site notice."
-msgstr ""
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Διαγραφή μηνύματος"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:198
-#, fuzzy
 msgid "Save site notice"
-msgstr "ΡÏ\85θμίÏ\83ειÏ\82 OpenID"
+msgstr "Î\94ιαγÏ\81αÏ\86ή Î¼Î·Î½Ï\8dμαÏ\84οÏ\82"
 
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "Ρυθμίσεις ΙΜ"
+msgstr "Ρυθμίσεις του άβαταρ"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4062,15 +2917,13 @@ msgstr ""
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Η αρχική σελίδα δεν είναι έγκυρο URL."
+msgstr ""
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "Î\94ιεÏ\8dθÏ\85νÏ\83η Î\99Î\9c"
+msgstr "Î\94ιεÏ\85θÏ\8dνÏ\83ειÏ\82 email"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4082,38 +2935,20 @@ msgstr "Τρέχων επιβεβαιωμένο, μέσω SMS, νούμερο κ
 msgid "Awaiting confirmation on this phone number."
 msgstr "Αναμένωντας επιβεβαίωση σ' αυτό το νούμερο τηλεφώνου."
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-msgid "Confirmation code"
-msgstr ""
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Επιβεβαίωση"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
 msgstr ""
 
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr ""
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "ΠÏ\81οÏ\84ιμήÏ\83ειÏ\82"
+msgstr "Î\9fι Ï\80Ï\81οÏ\84ιμήÏ\83ειÏ\82 Î±Ï\80οθηκεÏ\8dÏ\84ηκαν"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4122,22 +2957,6 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Οι προτιμήσεις αποθηκεύτηκαν"
-
-#. TRANS: Message given saving SMS phone number without having provided one.
-#: actions/smssettings.php:338
-msgid "No phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
 #. TRANS: Message given saving SMS phone number that is already set.
 #: actions/smssettings.php:352
 msgid "That is already your phone number."
@@ -4150,32 +2969,14 @@ msgstr ""
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
 msgstr ""
-"Î\88Ï\87ει Î±Ï\80οÏ\83Ï\84αλεί Î­Î½Î±Ï\82 ÎºÏ\89δικÏ\8cÏ\82 ÎµÏ\80ιβεβαίÏ\89Ï\83ηÏ\82 Ï\83Ï\84ο Ï\84ηλεÏ\86Ï\89νικÏ\8c Î½Î¿Ï\8dμεÏ\81ο που "
+"Î\88Ï\87ει Î±Ï\80οÏ\83Ï\84αλεί Î­Î½Î±Ï\82 ÎºÏ\89δικÏ\8cÏ\82 ÎµÏ\80ιβεβαίÏ\89Ï\83ηÏ\82 Ï\83Ï\84ην Î´Î¹ÎµÏ\8dθÏ\85νÏ\83η email που "
 "προσθέσατε. Ελέγξτε τα εισερχόμενα (και τον φάκελο ανεπιθύμητης "
 "αλληλογραφίας) για τον κωδικό και για το πως να τον χρησιμοποιήσετε."
 
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-msgid "That is the wrong confirmation number."
-msgstr ""
-
-#. TRANS: Message given after successfully canceling SMS phone number confirmation.
-#: actions/smssettings.php:427
-#, fuzzy
-msgid "SMS confirmation cancelled."
-msgstr "Η επιβεβαίωση ακυρώθηκε."
-
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-msgid "That is not your phone number."
-msgstr ""
-
 #. TRANS: Message given after successfully removing a registered SMS phone number.
 #: actions/smssettings.php:470
 msgid "The SMS phone number was removed."
@@ -4200,22 +3001,12 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-msgid "No code entered"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
 msgid "Snapshots"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:65
-#, fuzzy
-msgid "Manage snapshot configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
 #: actions/snapshotadminpanel.php:127
 msgid "Invalid snapshot run value."
 msgstr ""
@@ -4236,10 +3027,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-msgid "Data snapshots"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4261,46 +3048,30 @@ msgid "Snapshots will be sent to this URL"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:248
-#, fuzzy
 msgid "Save snapshot settings"
-msgstr "Ρυθμίσεις OpenID"
-
-#: actions/subedit.php:70
-msgid "You are not subscribed to that profile."
-msgstr ""
+msgstr "Αποθήκευση ρυθμίσεων πρόσβασης"
 
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
+msgstr "Απέτυχε η εισαγωγή νέας συνδρομής."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
 #: actions/subscribe.php:107
-#, fuzzy
 msgid "No such profile."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\9aανέναÏ\82 Ï\84έÏ\84οιοÏ\82 Ï\87Ï\81ήÏ\83Ï\84ηÏ\82."
 
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
 
-#: actions/subscribe.php:145
-msgid "Subscribed"
-msgstr ""
-
-#: actions/subscribers.php:50
-#, php-format
-msgid "%s subscribers"
-msgstr ""
-
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "%s και οι φίλοι του/της"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4330,14 +3101,14 @@ msgid ""
 msgstr ""
 
 #: actions/subscriptions.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%s subscriptions"
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84Ï\89ν Î½Î­Ï\89ν Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ"
+msgstr "Î\8cλεÏ\82 Î¿Î¹ Ï\83Ï\85νδÏ\81ομέÏ\82"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
@@ -4371,25 +3142,10 @@ msgstr ""
 msgid "SMS"
 msgstr ""
 
-#: actions/tag.php:69
-#, php-format
-msgid "Notices tagged with %1$s, page %2$d"
-msgstr ""
-
-#: actions/tag.php:87
-#, php-format
-msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr ""
-
 #: actions/tag.php:93
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Ροή φίλων του/της %s"
-
-#: actions/tag.php:99
 #, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr ""
+msgid "Notice feed for tag %s (RSS 2.0)"
+msgstr "Ροή φίλων του/της %s (RSS 2.0)"
 
 #: actions/tagother.php:39
 msgid "No ID argument."
@@ -4425,22 +3181,16 @@ msgid ""
 msgstr ""
 
 #: actions/tagother.php:200
-#, fuzzy
 msgid "Could not save tags."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr "Απέτυχε η αποθήκευση του προφίλ."
 
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
 
-#: actions/tagrss.php:35
-msgid "No such tag."
-msgstr ""
-
 #: actions/unblock.php:59
-#, fuzzy
 msgid "You haven't blocked that user."
-msgstr "Î\91δÏ\85ναμία Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82 Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82."
+msgstr "Î\94εν Î¼Ï\80οÏ\81είÏ\84ε Î½Î± ÎºÎ¬Î½ÎµÏ\84ε Ï\86Ï\81αγή Ï\83Ï\84ον ÎµÎ±Ï\85Ï\84Ï\8c Ï\83αÏ\82!"
 
 #: actions/unsandbox.php:72
 msgid "User is not sandboxed."
@@ -4454,10 +3204,6 @@ msgstr ""
 msgid "No profile ID in request."
 msgstr ""
 
-#: actions/unsubscribe.php:98
-msgid "Unsubscribed"
-msgstr ""
-
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
 msgid ""
@@ -4487,12 +3233,6 @@ msgstr ""
 msgid "Invalid default subscripton: '%1$s' is not user."
 msgstr ""
 
-#. TRANS: Link description in user account settings menu.
-#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:111
-#: lib/personalgroupnav.php:109
-msgid "Profile"
-msgstr ""
-
 #: actions/useradminpanel.php:222
 msgid "Bio Limit"
 msgstr ""
@@ -4505,34 +3245,18 @@ msgstr ""
 msgid "New users"
 msgstr "Νέοι χρήστες"
 
-#: actions/useradminpanel.php:235
-msgid "New user welcome"
-msgstr ""
-
 #: actions/useradminpanel.php:236
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Όλες οι συνδρομές"
-
 #: actions/useradminpanel.php:242
-#, fuzzy
 msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Αυτόματα γίνε συνδρομητής σε όσους γίνονται συνδρομητές σε μένα  (χρήση "
-"κυρίως από λογισμικό και όχι ανθρώπους)"
+msgstr "Γίνε συνδρομητής αυτού του χρήστη"
 
 #: actions/useradminpanel.php:251
 msgid "Invitations"
 msgstr "Προσκλήσεις"
 
-#: actions/useradminpanel.php:256
-msgid "Invitations enabled"
-msgstr ""
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4548,10 +3272,6 @@ msgid ""
 "click “Reject”."
 msgstr ""
 
-#: actions/userauthorization.php:196 actions/version.php:167
-msgid "License"
-msgstr ""
-
 #: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Αποδοχή"
@@ -4566,18 +3286,13 @@ msgid "Reject"
 msgstr ""
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84Ï\89ν Î½Î­Ï\89ν Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ"
+msgstr "Î\95ξοÏ\85Ï\83ιοδοÏ\84ημένη Ï\83Ï\85νδÏ\81ομή"
 
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:254
-msgid "Subscription authorized"
-msgstr ""
-
 #: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4647,19 +3362,14 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, php-format
-msgid "%s is not a member of any group."
-msgstr ""
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4676,11 +3386,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr ""
 
-#: actions/version.php:75
-#, php-format
-msgid "StatusNet %s"
-msgstr ""
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4719,12 +3424,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Προσωπικά"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4765,40 +3464,20 @@ msgstr ""
 
 #. TRANS: Client exception thrown if a file upload does not have a valid name.
 #: classes/File.php:248 classes/File.php:263
-#, fuzzy
 msgid "Invalid filename."
-msgstr "Μήνυμα"
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr ""
 
 #. TRANS: Server exception thrown when updating a local group fails.
 #: classes/Local_group.php:42
-#, fuzzy
 msgid "Could not update local group."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
-#, fuzzy, php-format
+#, php-format
 msgid "Could not create login token for %s"
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
@@ -4810,16 +3489,6 @@ msgstr ""
 msgid "You are banned from sending direct messages."
 msgstr ""
 
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-msgid "Could not insert message."
-msgstr ""
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4828,58 +3497,58 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
+msgstr ""
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr ""
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr ""
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -4898,56 +3567,30 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Προφίλ χρήστη"
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
-
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Απέτυχε η συνδρομή."
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Î\91Ï\80έÏ\84Ï\85Ï\87ε Î· Î´Î¹Î±Î³Ï\81αÏ\86ή συνδρομής."
+msgstr "Î\91Ï\80έÏ\84Ï\85Ï\87ε Î· ÎµÎ¹Ï\83αγÏ\89γή Î½Î­Î±Ï\82 συνδρομής."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Î\91Ï\80έÏ\84Ï\85Ï\87ε Î· Î´Î¹Î±Î³Ï\81αÏ\86ή συνδρομής."
+msgstr "Î\91Ï\80έÏ\84Ï\85Ï\87ε Î· ÎµÎ¹Ï\83αγÏ\89γή Î½Î­Î±Ï\82 συνδρομής."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Î\91Ï\80έÏ\84Ï\85Ï\87ε Î· Î´Î¹Î±Î³Ï\81αÏ\86ή συνδρομής."
+msgstr "Î\91Ï\80έÏ\84Ï\85Ï\87ε Î· ÎµÎ¹Ï\83αγÏ\89γή Î½Î­Î±Ï\82 συνδρομής."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -4963,21 +3606,18 @@ msgstr "Δεν ήταν δυνατή η δημιουργία ομάδας."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84Ï\89ν Î½Î­Ï\89ν Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ"
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84Ï\89ν Î½Î­Ï\89ν Ï\80ληÏ\81οÏ\86οÏ\81ιÏ\8eν Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ"
+msgstr "Î\94εν Î®Ï\84αν Î´Ï\85ναÏ\84ή Î· Î´Î·Î¼Î¹Î¿Ï\85Ï\81γία Î¿Î¼Î¬Î´Î±Ï\82."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
+msgstr "Απέτυχε η αποθήκευση του προφίλ."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
@@ -5004,27 +3644,11 @@ msgstr ""
 msgid "Design your profile"
 msgstr "Σχεδιάστε το προφίλ σας"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-msgid "Other options"
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
 msgstr ""
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, php-format
-msgid "%1$s - %2$s"
-msgstr ""
-
-#. TRANS: Page title for a page without a title set.
-#: lib/action.php:161
-msgid "Untitled page"
-msgstr ""
-
 #. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
 #: lib/action.php:436
 msgid "Primary site navigation"
@@ -5036,26 +3660,11 @@ msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Προσωπικά"
-
-#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change your email, avatar, password, profile"
-msgstr "Αλλάξτε τον κωδικό σας"
-
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Αδυναμία ανακατεύθηνσης στο διακομιστή: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
@@ -5064,31 +3673,15 @@ msgstr "Σύνδεση"
 
 #. TRANS: Tooltip for menu option "Admin"
 #: lib/action.php:458
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change site configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "Διαχειριστής"
-
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "Προσκάλεσε φίλους και συναδέλφους σου να γίνουν μέλη στο %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
-#, fuzzy
 msgctxt "MENU"
 msgid "Invite"
-msgstr "Μήνυμα"
+msgstr "Μόνο με πρόσκληση"
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
@@ -5098,24 +3691,21 @@ msgstr ""
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "Î\91Ï\80οÏ\83Ï\8dνδεÏ\83η"
+msgstr "Î\9bογÏ\8cÏ\84Ï\85Ï\80ο"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Δημιουργία ενός λογαριασμού"
+msgstr ""
 
 #. TRANS: Main menu option when not logged in to register a new account
 #: lib/action.php:485
-#, fuzzy
 msgctxt "MENU"
 msgid "Register"
-msgstr "ΠεÏ\81ιγραφή"
+msgstr "Î\95γγραφή"
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
@@ -5123,23 +3713,10 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Σύνδεση"
-
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "Βοηθήστε με!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "Βοήθεια"
 
 #. TRANS: Tooltip for main menu option "Search"
@@ -5153,22 +3730,6 @@ msgctxt "MENU"
 msgid "Search"
 msgstr ""
 
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-msgid "Site notice"
-msgstr ""
-
-#. TRANS: DT element for local views block. String is hidden in default CSS.
-#: lib/action.php:592
-msgid "Local views"
-msgstr ""
-
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-msgid "Page notice"
-msgstr ""
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
 msgid "Secondary site navigation"
@@ -5194,11 +3755,6 @@ msgstr "Συχνές ερωτήσεις"
 msgid "TOS"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to privacy policy.
-#: lib/action.php:783
-msgid "Privacy"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option.
 #: lib/action.php:786
 msgid "Source"
@@ -5220,13 +3776,11 @@ msgstr ""
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"To **%%site.name%%** είναι μία υπηρεσία microblogging (μικρο-ιστολογίου) που "
-"έφερε κοντά σας το  [%%site.broughtby%%](%%site.broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5274,11 +3828,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5334,103 +3883,32 @@ msgstr ""
 msgid "Unable to delete design setting."
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-msgctxt "MENU"
-msgid "Site"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
 msgid "Design"
-msgstr "Προσωπικά"
+msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
-#, fuzzy
 msgid "User configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Διαγραφή μηνύματος"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Επιβεβαίωση διεύθυνσης email"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
-#, fuzzy, php-format
+#, php-format
 msgid "Describe your application in %d characters"
-msgstr "Περιγράψτε την ομάδα ή το θέμα μέχρι %d χαρακτήρες"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:213
-#, fuzzy
-msgid "Describe your application"
-msgstr "Περιγράψτε την ομάδα ή το θέμα"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-msgid "URL of the homepage of this application"
-msgstr ""
+msgstr "Περιγράψτε την ομάδα ή το θέμα χρησιμοποιώντας μέχρι %d χαρακτήρες"
 
 #. TRANS: Form input field label.
 #: lib/applicationeditform.php:226
@@ -5532,66 +4010,47 @@ msgstr ""
 msgid "Tags for this attachment"
 msgstr ""
 
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Ο κωδικός αποθηκεύτηκε."
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "Ο κωδικός αποθηκεύτηκε."
-
-#: lib/channel.php:157 lib/channel.php:177
-msgid "Command results"
 msgstr ""
 
 #: lib/channel.php:229 lib/mailhandler.php:142
 msgid "Command complete"
 msgstr ""
 
-#: lib/channel.php:240
-msgid "Command failed"
-msgstr ""
-
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
 msgstr ""
 
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
+#. TRANS: Command exception text shown when a last user notice is requested and it does not exist.
+#. TRANS: Error text shown when a last user notice is requested and it does not exist.
+#: lib/command.php:101 lib/command.php:630
+msgid "User has no last notice."
 msgstr ""
 
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Απέτυχε η ενημέρωση χρήστη μέσω επιβεβαιωμένης email διεύθυνσης."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Απέτυχε η ενημέρωση χρήστη μέσω επιβεβαιωμένης email διεύθυνσης."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
+#: lib/command.php:240
 #, php-format
-msgid "Nudge sent to %s"
+msgid "Nudge sent to %s."
 msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5599,56 +4058,13 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "Ομάδες με τα περισσότερα μέλη"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "Ονοματεπώνυμο"
-
-#. TRANS: Whois output. %s is the location of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, php-format
-msgid "Location: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the homepage of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
-#, php-format
-msgid "Homepage: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
-#, php-format
-msgid "About: %s"
-msgstr ""
-
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5657,146 +4073,125 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr ""
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Ρυθμίσεις OpenID"
-
-#: lib/command.php:531
-msgid "Error repeating notice."
-msgstr ""
-
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
+#. TRANS: Text shown having sent a reply to a notice successfully.
+#. TRANS: %s is the nickname of the user of the notice the reply was sent to.
+#: lib/command.php:603
 #, php-format
-msgid "Reply to %s sent"
-msgstr ""
-
-#: lib/command.php:573
-msgid "Error saving notice."
+msgid "Reply to %s sent."
 msgstr ""
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr ""
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
+#. TRANS: Text shown after having unsubscribed from another user successfully.
+#. TRANS: %s is the name of the user the unsubscription was requested for.
+#: lib/command.php:705
 #, php-format
-msgid "Unsubscribed from %s"
+msgid "Unsubscribed from %s."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr ""
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr ""
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Απέτυχε η συνδρομή."
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Δεν επιτρέπεται να κάνεις συνδρομητές του λογαριασμού σου άλλους."
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Δεν επιτρέπεται να κάνεις συνδρομητές του λογαριασμού σου άλλους."
 msgstr[1] "Δεν επιτρέπεται να κάνεις συνδρομητές του λογαριασμού σου άλλους."
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Δεν επιτρέπεται να κάνεις συνδρομητές του λογαριασμού σου άλλους."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Δεν επιτρέπεται να κάνεις συνδρομητές του λογαριασμού σου άλλους."
 msgstr[1] "Δεν επιτρέπεται να κάνεις συνδρομητές του λογαριασμού σου άλλους."
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Δεν είστε μέλος καμίας ομάδας."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Ομάδες με τα περισσότερα μέλη"
 msgstr[1] "Ομάδες με τα περισσότερα μέλη"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5838,11 +4233,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Ο κωδικός επιβεβαίωσης δεν βρέθηκε."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5867,23 +4257,13 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Σύνδεση"
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
 #: lib/designsettings.php:105
-#, fuzzy
 msgid "Upload file"
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "ΠÏ\81οÏ\86ίλ Ï\87Ï\81ήÏ\83Ï\84η"
 
 #: lib/designsettings.php:109
 msgid ""
@@ -5894,14 +4274,6 @@ msgstr ""
 msgid "Design defaults restored."
 msgstr ""
 
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-msgid "Disfavor this notice"
-msgstr ""
-
-#: lib/favorform.php:114 lib/favorform.php:140
-msgid "Favor this notice"
-msgstr ""
-
 #: lib/favorform.php:140
 msgid "Favor"
 msgstr ""
@@ -5930,10 +4302,6 @@ msgstr ""
 msgid "Filter tags"
 msgstr ""
 
-#: lib/galleryaction.php:131
-msgid "All"
-msgstr ""
-
 #: lib/galleryaction.php:139
 msgid "Select tag to filter"
 msgstr ""
@@ -5982,15 +4350,6 @@ msgstr ""
 msgid "Group"
 msgstr "Ομάδα"
 
-#: lib/groupnav.php:101
-msgid "Blocked"
-msgstr ""
-
-#: lib/groupnav.php:102
-#, php-format
-msgid "%s blocked users"
-msgstr ""
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -6005,11 +4364,6 @@ msgstr "Λογότυπο"
 msgid "Add or edit %s logo"
 msgstr "Προσθήκη ή επεξεργασία λογότυπου για την ομάδα %s"
 
-#: lib/groupnav.php:120
-#, fuzzy, php-format
-msgid "Add or edit %s design"
-msgstr "Προσθήκη ή επεξεργασία λογότυπου για την ομάδα %s"
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Ομάδες με τα περισσότερα μέλη"
@@ -6018,11 +4372,6 @@ msgstr "Ομάδες με τα περισσότερα μέλη"
 msgid "Groups with most posts"
 msgstr "Ομάδες με τις περισσότερες δημοσιεύσεις"
 
-#: lib/grouptagcloudsection.php:56
-#, php-format
-msgid "Tags in %s group's notices"
-msgstr ""
-
 #. TRANS: Client exception 406
 #: lib/htmloutputter.php:104
 msgid "This page is not available in a media type you accept"
@@ -6050,9 +4399,8 @@ msgid "Not an image or corrupt file."
 msgstr ""
 
 #: lib/imagefile.php:122
-#, fuzzy
 msgid "Lost our file."
-msgstr "Î\91δÏ\8dναÏ\84η Î· Î±Ï\80οθήκεÏ\85Ï\83η Ï\84οÏ\85 Ï\80Ï\81οÏ\86ίλ."
+msgstr "ΣÏ\87εδιάÏ\83Ï\84ε Ï\84ο Ï\80Ï\81οÏ\86ίλ Ï\83αÏ\82"
 
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
@@ -6146,11 +4494,9 @@ msgstr ""
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
-msgstr ""
-"Βιογραφικό: %s\n"
-"\n"
+msgstr "Βιογραφικό"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6178,17 +4524,6 @@ msgstr ""
 msgid "%s status"
 msgstr "Κατάσταση του/της %s"
 
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-msgid "SMS confirmation"
-msgstr ""
-
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Αναμένωντας επιβεβαίωση σ' αυτό το νούμερο τηλεφώνου."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6318,14 +4653,10 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "από"
 
-#: lib/mailhandler.php:37
-msgid "Could not parse message."
-msgstr ""
-
 #: lib/mailhandler.php:42
 msgid "Not a registered user."
 msgstr ""
@@ -6382,9 +4713,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Απέτυχε η ενημέρωση του χρήστη."
+msgstr ""
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6396,61 +4726,42 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-msgid "Send a direct notice"
-msgstr ""
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Διαθέσιμοι χαρακτήρες"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr ""
 
-#: lib/noticeform.php:160
-msgid "Send a notice"
-msgstr ""
-
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr ""
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
-
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "Αδύνατη η αποθήκευση του προφίλ."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-msgid "N"
-msgstr ""
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6475,39 +4786,26 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr ""
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Επαναλαμβάνεται από"
 
-#: lib/noticelist.php:629
-msgid "Reply to this notice"
-msgstr ""
-
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr ""
 
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Ρυθμίσεις OpenID"
-
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
-
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr ""
@@ -6524,11 +4822,6 @@ msgstr ""
 msgid "Error inserting remote profile"
 msgstr ""
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Διαγραφή μηνύματος"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Απέτυχε η εισαγωγή νέας συνδρομής."
@@ -6570,22 +4863,10 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
-msgid "Subscriptions"
-msgstr ""
-
 #: lib/profileaction.php:126
 msgid "All subscriptions"
 msgstr "Όλες οι συνδρομές"
 
-#: lib/profileaction.php:144 lib/profileaction.php:214 lib/subgroupnav.php:90
-msgid "Subscribers"
-msgstr ""
-
-#: lib/profileaction.php:161
-msgid "All subscribers"
-msgstr ""
-
 #: lib/profileaction.php:191
 msgid "User ID"
 msgstr ""
@@ -6599,10 +4880,6 @@ msgstr "Μέλος από"
 msgid "Daily average"
 msgstr ""
 
-#: lib/profileaction.php:264
-msgid "All groups"
-msgstr ""
-
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
 msgstr ""
@@ -6632,18 +4909,16 @@ msgid "No return-to arguments."
 msgstr ""
 
 #: lib/repeatform.php:107
-#, fuzzy
 msgid "Repeat this notice?"
-msgstr "Î\91δÏ\85ναμία Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82 Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82."
+msgstr "Î\94ιαγÏ\81αÏ\86ή Î¼Î·Î½Ï\8dμαÏ\84οÏ\82"
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Ναι"
 
 #: lib/repeatform.php:132
-#, fuzzy
 msgid "Repeat this notice"
-msgstr "Î\91δÏ\85ναμία Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82 Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82."
+msgstr "Î\94ιαγÏ\81αÏ\86ή Î¼Î·Î½Ï\8dμαÏ\84οÏ\82"
 
 #: lib/revokeroleform.php:91
 #, php-format
@@ -6659,9 +4934,8 @@ msgid "Sandbox"
 msgstr ""
 
 #: lib/sandboxform.php:78
-#, fuzzy
 msgid "Sandbox this user"
-msgstr "Î\91δÏ\85ναμία Î´Î¹Î±Î³Ï\81αÏ\86ήÏ\82 Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Î¼Î·Î½Ï\8dμαÏ\84οÏ\82."
+msgstr "Î\93ίνε Ï\83Ï\85νδÏ\81ομηÏ\84ήÏ\82 Î±Ï\85Ï\84οÏ\8d Ï\84οÏ\85 Ï\87Ï\81ήÏ\83Ï\84η"
 
 #: lib/searchaction.php:120
 msgid "Search site"
@@ -6679,14 +4953,6 @@ msgstr ""
 msgid "Search help"
 msgstr ""
 
-#: lib/searchgroupnav.php:80
-msgid "People"
-msgstr ""
-
-#: lib/searchgroupnav.php:81
-msgid "Find people on this site"
-msgstr ""
-
 #: lib/searchgroupnav.php:83
 msgid "Find content of notices"
 msgstr ""
@@ -6708,28 +4974,8 @@ msgid "Silence"
 msgstr ""
 
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "Γίνε συνδρομητής αυτού του χρήστη"
-
-#: lib/subgroupnav.php:83
-#, php-format
-msgid "People %s subscribes to"
-msgstr ""
-
-#: lib/subgroupnav.php:91
-#, php-format
-msgid "People subscribed to %s"
-msgstr ""
-
-#: lib/subgroupnav.php:99
-#, php-format
-msgid "Groups %s is a member of"
-msgstr ""
-
-#: lib/subgroupnav.php:105
-msgid "Invite"
-msgstr ""
+msgstr "Διαγράψτε αυτόν τον χρήστη"
 
 #: lib/subgroupnav.php:106
 #, php-format
@@ -6789,52 +5035,20 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "Απέτυχε η αποθήκευση του προφίλ."
+msgstr ""
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr "Κορυφαίοι δημοσιευτές"
 
-#: lib/unsandboxform.php:69
-msgid "Unsandbox"
-msgstr ""
-
 #: lib/unsandboxform.php:80
-#, fuzzy
 msgid "Unsandbox this user"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#: lib/unsilenceform.php:67
-msgid "Unsilence"
-msgstr ""
+msgstr "Γίνε συνδρομητής αυτού του χρήστη"
 
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-msgid "Unsubscribe from this user"
-msgstr ""
-
-#: lib/unsubscribeform.php:137
-msgid "Unsubscribe"
-msgstr ""
-
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr ""
-
-#: lib/userprofile.php:117
-msgid "Edit Avatar"
-msgstr ""
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-msgid "User actions"
-msgstr ""
+msgstr "Διαγράψτε αυτόν τον χρήστη"
 
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
@@ -6856,15 +5070,6 @@ msgstr ""
 msgid "Message"
 msgstr "Μήνυμα"
 
-#: lib/userprofile.php:326
-msgid "Moderate"
-msgstr ""
-
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Προφίλ χρήστη"
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -6876,56 +5081,56 @@ msgid "Moderator"
 msgstr "Συντονιστής"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
@@ -6933,13 +5138,3 @@ msgstr ""
 #, php-format
 msgid "%s is not a valid color!"
 msgstr "Το %s δεν είναι ένα έγκυρο χρώμα!"
-
-#: lib/webcolor.php:123
-#, php-format
-msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index a8a11e4ba6402f91ee8e21c49b76dd9ae9ca2ec2..380bb28e92016011450110e7cc12c37ac58a1d96 100644 (file)
@@ -11,12 +11,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:11:54+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:41+0000\n"
 "Language-Team: British English\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: en-gb\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +91,7 @@ msgstr "Save"
 msgid "No such page."
 msgstr "No such page."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +111,7 @@ msgstr "No such page."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "No such user."
@@ -168,22 +169,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
-"status_textarea=%s)!"
+"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
+"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favourites!"
+"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
+"post a notice to them."
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -245,11 +246,6 @@ msgstr ""
 "You must specify a parameter named 'device' with a value of one of: sms, im, "
 "none."
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Couldn't update user."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -260,11 +256,6 @@ msgstr "Couldn't update user."
 msgid "User has no profile."
 msgstr "User has no profile."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Couldn't save profile."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -352,7 +343,8 @@ msgstr "No status found with that ID."
 msgid "This status is already a favorite."
 msgstr "This status is already a favourite."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Could not create favourite."
 
@@ -365,9 +357,8 @@ msgid "Could not delete favorite."
 msgstr "Could not delete favourite."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Could not unfollow user: User not found."
+msgstr "Could not follow user: profile not found."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -384,7 +375,7 @@ msgstr "You cannot unfollow yourself."
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr ""
+msgstr "Two valid IDs or screen_names must be supplied."
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -465,15 +456,19 @@ msgstr "Alias can't be the same as nickname."
 msgid "Group not found."
 msgstr "Group not found."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "You are already a member of that group."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "You have been blocked from that group by the admin."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Could not join user %1$s to group %2$s."
@@ -482,7 +477,10 @@ msgstr "Could not join user %1$s to group %2$s."
 msgid "You are not a member of this group."
 msgstr "You are not a member of this group."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Could not remove user %1$s to group %2$s."
@@ -511,11 +509,6 @@ msgstr "%s groups"
 msgid "groups on %s"
 msgstr "groups on %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Upload file"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "No oauth_token parameter provided."
@@ -643,11 +636,13 @@ msgstr "You may not delete another user's status."
 msgid "No such notice."
 msgstr "No such notice."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Cannot repeat your own notice."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Already repeated that notice."
 
@@ -663,7 +658,7 @@ msgstr "No status with that ID found."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -673,7 +668,7 @@ msgstr "That's too long. Max notice size is %d chars."
 msgid "Not found."
 msgstr "Not found."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Max notice size is %d chars, including attachment URL."
@@ -881,6 +876,8 @@ msgstr "Block this user"
 msgid "Failed to save block information."
 msgstr "Failed to save block information."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -890,8 +887,8 @@ msgstr "Failed to save block information."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "No such group."
 
@@ -1138,11 +1135,6 @@ msgstr "Site theme"
 msgid "Theme for the site."
 msgstr "Theme for the site."
 
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "Site theme"
-
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
@@ -2126,11 +2118,6 @@ msgstr "Inbox for %s"
 msgid "This is your inbox, which lists your incoming private messages."
 msgstr "This is your inbox, which lists your incoming private messages."
 
-#: actions/invite.php:39
-#, fuzzy
-msgid "Invites have been disabled."
-msgstr "Invitations enabled"
-
 #: actions/invite.php:41
 #, php-format
 msgid "You must be logged in to invite other users to use %s."
@@ -2155,7 +2142,7 @@ msgstr "You are already subscribed to these users:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2278,9 +2265,7 @@ msgstr "You must be logged in to join a group."
 msgid "No nickname or ID."
 msgstr "No nickname or ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s joined group %2$s"
@@ -2289,13 +2274,12 @@ msgstr "%1$s joined group %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "You must be logged in to leave a group."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "You are not a member of that group."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s left group %2$s"
@@ -2406,12 +2390,15 @@ msgstr "Use this form to create a new group."
 msgid "New message"
 msgstr "New message"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "You can't send a message to this user."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "No content!"
 
@@ -2419,7 +2406,8 @@ msgstr "No content!"
 msgid "No recipient specified."
 msgstr "No recipient specified."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2429,12 +2417,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Message sent"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Could not create application."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax Error"
 
@@ -2442,7 +2432,7 @@ msgstr "Ajax Error"
 msgid "New notice"
 msgstr "New notice"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Notice posted"
 
@@ -2496,6 +2486,8 @@ msgstr "Updates matching search term \"%1$s\" on %2$s!"
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
+"This user does not allow nudges or has not confirmed or set their email "
+"address yet."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2526,11 +2518,6 @@ msgstr "You have not registered any applications yet."
 msgid "Connected applications"
 msgstr "Connected applications"
 
-#: actions/oauthconnectionssettings.php:83
-#, fuzzy
-msgid "You have allowed the following applications to access you account."
-msgstr "You have not authorised any applications to use your account."
-
 #: actions/oauthconnectionssettings.php:175
 msgid "You are not a user of that application."
 msgstr "You are not a user of that application."
@@ -2570,8 +2557,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Not a supported data format."
 
@@ -2607,11 +2594,6 @@ msgstr "Automatic shortening service to use."
 msgid "View profile designs"
 msgstr "View profile designs"
 
-#: actions/othersettings.php:123
-#, fuzzy
-msgid "Show or hide profile designs."
-msgstr "View profile designs"
-
 #: actions/othersettings.php:153
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "URL shortening service is too long (max 50 chars)."
@@ -2716,11 +2698,6 @@ msgstr "Password saved."
 msgid "Paths"
 msgstr ""
 
-#: actions/pathsadminpanel.php:70
-#, fuzzy
-msgid "Path and server settings for this StatusNet site."
-msgstr "Basic settings for this StatusNet site"
-
 #: actions/pathsadminpanel.php:157
 #, php-format
 msgid "Theme directory not readable: %s."
@@ -2785,21 +2762,6 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
-#: actions/pathsadminpanel.php:264
-#, fuzzy
-msgid "Theme server"
-msgstr "SSL server"
-
-#: actions/pathsadminpanel.php:268
-#, fuzzy
-msgid "Theme path"
-msgstr "Site path"
-
-#: actions/pathsadminpanel.php:272
-#, fuzzy
-msgid "Theme directory"
-msgstr "Avatar directory"
-
 #: actions/pathsadminpanel.php:279
 msgid "Avatars"
 msgstr "Avatars"
@@ -2816,26 +2778,6 @@ msgstr "Avatar path"
 msgid "Avatar directory"
 msgstr "Avatar directory"
 
-#: actions/pathsadminpanel.php:301
-#, fuzzy
-msgid "Backgrounds"
-msgstr "Background"
-
-#: actions/pathsadminpanel.php:305
-#, fuzzy
-msgid "Background server"
-msgstr "Background"
-
-#: actions/pathsadminpanel.php:309
-#, fuzzy
-msgid "Background path"
-msgstr "Background"
-
-#: actions/pathsadminpanel.php:313
-#, fuzzy
-msgid "Background directory"
-msgstr "Background directory not writable: %s."
-
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
 msgstr "SSL"
@@ -2852,11 +2794,6 @@ msgstr "Sometimes"
 msgid "Always"
 msgstr ""
 
-#: actions/pathsadminpanel.php:329
-#, fuzzy
-msgid "Use SSL"
-msgstr "SSL"
-
 #: actions/pathsadminpanel.php:330
 msgid "When to use SSL"
 msgstr ""
@@ -3070,26 +3007,10 @@ msgstr "Public Stream Feed (RSS 2.0)"
 msgid "Public Stream Feed (Atom)"
 msgstr "Public Stream Feed (Atom)"
 
-#: actions/public.php:188
-#, fuzzy, php-format
-msgid ""
-"This is the public timeline for %%site.name%% but no one has posted anything "
-"yet."
-msgstr ""
-"This is the timeline for %s and friends but no one has posted anything yet."
-
 #: actions/public.php:191
 msgid "Be the first to post!"
 msgstr ""
 
-#: actions/public.php:195
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and be the first to post!"
-msgstr ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favourites!"
-
 #: actions/public.php:242
 #, php-format
 msgid ""
@@ -3132,15 +3053,6 @@ msgstr ""
 msgid "Be the first to post one!"
 msgstr ""
 
-#: actions/publictagcloud.php:75
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and be the first to post "
-"one!"
-msgstr ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favourites!"
-
 #: actions/publictagcloud.php:134
 msgid "Tag cloud"
 msgstr "Tag cloud"
@@ -3185,11 +3097,6 @@ msgstr ""
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-#, fuzzy
-msgid "Password recovery"
-msgstr "Password recovery requested"
-
 #: actions/recoverpassword.php:191
 msgid "Nickname or email address"
 msgstr "Nickname or e-mail address"
@@ -3513,11 +3420,13 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Notice feed for %s"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr "This is the timeline for %1$s but %2$s hasn't posted anything yet."
+msgstr ""
+"This is the timeline showing replies to %1$s but %2$s has not received a "
+"notice to them yet."
 
 #: actions/replies.php:204
 #, php-format
@@ -3527,13 +3436,13 @@ msgid ""
 msgstr ""
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
-"status_textarea=%s)!"
+"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
+"newnotice%%%%?status_textarea=%3$s)."
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3560,13 +3469,6 @@ msgstr "You cannot sandbox users on this site."
 msgid "User is already sandboxed."
 msgstr "User is already sandboxed."
 
-#. TRANS: Menu item for site administration
-#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:392
-#, fuzzy
-msgid "Sessions"
-msgstr "Version"
-
 #: actions/sessionsadminpanel.php:65
 msgid "Session settings for this StatusNet site."
 msgstr "Session settings for this StatusNet site."
@@ -3632,20 +3534,10 @@ msgstr "Statistics"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-#, fuzzy
-msgid "Application actions"
-msgstr "Application not found."
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-#, fuzzy
-msgid "Application info"
-msgstr "Application not found."
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3714,16 +3606,19 @@ msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
 msgstr ""
+"%s has not added any favourite notices yet. Post something interesting they "
+"would add to their favourites."
 
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favourites!"
+"%s has not added any favourite notices yet. Why not [register an account](%%%"
+"%action.register%%%%) and then post something interesting they would add to "
+"their favourites."
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3900,26 +3795,13 @@ msgid ""
 msgstr ""
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
-"status_textarea=%s)!"
-
-#: actions/showstream.php:243
-#, fuzzy, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
-"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
-"blogging) service based on the Free Software [StatusNet](http://status.net/) "
-"tool. [Join now](%%action.register%%) to share notices about yourself with "
-"friends, family, and colleagues! ([Read more](%%doc.help%%))"
+"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
+"%?status_textarea=%2$s)."
 
 #: actions/showstream.php:248
 #, php-format
@@ -4006,11 +3888,6 @@ msgstr "Contact e-mail address for your site"
 msgid "Local"
 msgstr "Local"
 
-#: actions/siteadminpanel.php:256
-#, fuzzy
-msgid "Default timezone"
-msgstr "Default subscription"
-
 #: actions/siteadminpanel.php:257
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
@@ -4234,20 +4111,10 @@ msgstr ""
 msgid "Manage snapshot configuration"
 msgstr "Manage snapshot configuration"
 
-#: actions/snapshotadminpanel.php:127
-#, fuzzy
-msgid "Invalid snapshot run value."
-msgstr "Invalid role."
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-#, fuzzy
-msgid "Invalid snapshot report URL."
-msgstr "nvalid logo URL."
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4256,11 +4123,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-#, fuzzy
-msgid "Data snapshots"
-msgstr "Save snapshot settings"
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4273,11 +4135,6 @@ msgstr ""
 msgid "Snapshots will be sent once every N web hits"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:226
-#, fuzzy
-msgid "Report URL"
-msgstr "Source URL"
-
 #: actions/snapshotadminpanel.php:227
 msgid "Snapshots will be sent to this URL"
 msgstr ""
@@ -4338,19 +4195,14 @@ msgstr ""
 "You have no subscribers. Try subscribing to people you know and they might "
 "return the favour"
 
-#: actions/subscribers.php:110
-#, php-format
-msgid "%s has no subscribers. Want to be the first?"
-msgstr ""
-
 #: actions/subscribers.php:114
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s has no subscribers. Why not [register an account](%%%%action.register%%%"
 "%) and be the first?"
 msgstr ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favourites!"
+"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
+"%) and be the first?"
 
 #: actions/subscriptions.php:52
 #, php-format
@@ -4495,11 +4347,6 @@ msgctxt "TITLE"
 msgid "User"
 msgstr "User"
 
-#: actions/useradminpanel.php:70
-#, fuzzy
-msgid "User settings for this StatusNet site."
-msgstr "Design settings for this StausNet site."
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4531,16 +4378,6 @@ msgstr ""
 msgid "New users"
 msgstr "New users"
 
-#: actions/useradminpanel.php:235
-#, fuzzy
-msgid "New user welcome"
-msgstr "New users"
-
-#: actions/useradminpanel.php:236
-#, fuzzy
-msgid "Welcome text for new users (Max 255 chars)."
-msgstr "Name is too long (max 255 chars)."
-
 #: actions/useradminpanel.php:241
 msgid "Default subscription"
 msgstr "Default subscription"
@@ -4648,11 +4485,6 @@ msgstr ""
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:345
-#, fuzzy, php-format
-msgid "Avatar URL ‘%s’ is not valid."
-msgstr "Callback URL is not valid."
-
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
@@ -4722,11 +4554,6 @@ msgid ""
 "Inc. and contributors."
 msgstr ""
 
-#: actions/version.php:163
-#, fuzzy
-msgid "Contributors"
-msgstr "Connections"
-
 #: actions/version.php:170
 msgid ""
 "StatusNet is free software: you can redistribute it and/or modify it under "
@@ -4807,12 +4634,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Invalid size."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4868,30 +4689,30 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Database error inserting hashtag: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problem saving notice. Too long."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problem saving notice. Unknown user."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4900,29 +4721,29 @@ msgstr ""
 "few minutes."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "You are banned from posting notices on this site."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problem saving notice."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problem saving group inbox."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4941,57 +4762,30 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "User has no profile."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Unable to save site notice."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr "You have been banned from subscribing."
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-#, fuzzy
-msgid "Already subscribed!"
-msgstr "Not subscribed!"
-
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "User has blocked you."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Not subscribed!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Could not save subscription."
+msgstr "Could not delete self-subscription."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Could not save subscription."
+msgstr "Could not delete subscription OMB token."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Could not save subscription."
+msgstr "Could not delete subscription."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5427,18 +5221,6 @@ msgstr "Snapshots configuration"
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-#, fuzzy
-msgid "Edit application"
-msgstr "Edit Application"
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-#, fuzzy
-msgid "Icon for this application"
-msgstr "Do not delete this application"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
 #, php-format
@@ -5532,18 +5314,6 @@ msgctxt "BUTTON"
 msgid "Revoke"
 msgstr "Revoke"
 
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-#, fuzzy
-msgid "Attachments"
-msgstr "No attachments."
-
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:265
-#, fuzzy
-msgid "Author"
-msgstr "Authorise URL"
-
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
 msgid "Provider"
@@ -5553,11 +5323,6 @@ msgstr "Provider"
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-#, fuzzy
-msgid "Tags for this attachment"
-msgstr "No such attachment."
-
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
 msgid "Password changing failed"
 msgstr "Password changing failed"
@@ -5578,44 +5343,21 @@ msgstr "Command complete"
 msgid "Command failed"
 msgstr "Command failed"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Notice with that id does not exist"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "User has no last notice"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Could not find a user with nickname %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Could not find a local user with nickname %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Sorry, this command is not yet implemented."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Nudge sent to %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5623,55 +5365,39 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Notice marked as fave."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "You are already a member of that group."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Could not join user %1$s to group %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Could not remove user %1$s to group %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Fullname: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Location: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Homepage: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "About: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5680,142 +5406,114 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Message too long - maximum is %1$d characters, you sent %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Direct message to %s sent"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Message too long - maximum is %1$d characters, you sent %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Error sending direct message."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Cannot repeat your own notice."
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Already repeated that notice."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Notice from %s repeated"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Error repeating notice."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Notice too long - maximum is %d characters, you sent %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Reply to %s sent"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Error saving notice."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Specify the name of the user to subscribe to"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Can't subscribe to OMB profiles by command."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Subscribed to %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Specify the name of the user to unsubscribe from"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Unsubscribed from %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Command not yet implemented."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notification off."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Can't turn off notification."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notification on."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Can't turn on notification."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Unsubscribed  %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "You are not subscribed to anyone."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "You are already subscribed to these users:"
 msgstr[1] "You are already subscribed to these users:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "No one is subscribed to you."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Could not subscribe other to you."
 msgstr[1] "Could not subscribe other to you."
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "You are not a member of any groups."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "You are not a member of that group."
 msgstr[1] "You are not a member of that group."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5945,11 +5643,6 @@ msgid ""
 msgstr ""
 "You can upload your personal background image. The maximum file size is 2MB."
 
-#: lib/designsettings.php:418
-#, fuzzy
-msgid "Design defaults restored."
-msgstr "Design preferences saved."
-
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
 msgid "Disfavor this notice"
 msgstr "Disfavour this notice"
@@ -6347,11 +6040,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, fuzzy, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr "%s (@%s) added your notice as a favorite"
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6475,11 +6163,11 @@ msgstr "Send a direct notice"
 msgid "To"
 msgstr "To"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Available characters"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Send"
@@ -6488,28 +6176,28 @@ msgstr "Send"
 msgid "Send a notice"
 msgstr "Send a notice"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "What's up, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Share my location"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Do not share my location"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6544,6 +6232,10 @@ msgstr ""
 msgid "at"
 msgstr ""
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "in context"
@@ -6821,13 +6513,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Failed updating avatar."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6852,29 +6537,14 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Error updating remote profile."
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr "Top posters"
 
-#: lib/unsandboxform.php:69
-#, fuzzy
-msgid "Unsandbox"
-msgstr "Sandbox"
-
 #: lib/unsandboxform.php:80
 msgid "Unsandbox this user"
 msgstr "Unsandbox this user"
 
-#: lib/unsilenceform.php:67
-#, fuzzy
-msgid "Unsilence"
-msgstr "Silence"
-
 #: lib/unsilenceform.php:78
 msgid "Unsilence this user"
 msgstr "Unsilence this user"
@@ -6887,11 +6557,6 @@ msgstr "Unsubscribe from this user"
 msgid "Unsubscribe"
 msgstr "Unsubscribe"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "User %s (%d) has no profile record."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Edit Avatar"
@@ -6939,56 +6604,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "a few seconds ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "about a minute ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "about %d minutes ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "about an hour ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "about %d hours ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "about a day ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "about %d days ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "about a month ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "about %d months ago"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "about a year ago"
 
@@ -7001,8 +6666,3 @@ msgstr "%s is not a valid colour!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s is not a valid colour! Use 3 or 6 hex chars."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Message too long - maximum is %1$d characters, you sent %2$d."
index 5835365c99984c5c4dc402a850e45744592ad1f5..1207bc8edbf00055f59e25910b7f8273cbc17389 100644 (file)
@@ -12,12 +12,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:48+0000\n"
-"PO-Revision-Date: 2010-08-11 10:49:34+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:34+0000\n"
 "Language-Team: Esperanto\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: eo\n"
 "X-Message-Group: out-statusnet\n"
@@ -92,6 +92,7 @@ msgstr "Konservu"
 msgid "No such page."
 msgstr "Ne estas tiu paĝo."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -111,7 +112,7 @@ msgstr "Ne estas tiu paĝo."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Ne ekzistas tiu uzanto."
@@ -351,7 +352,8 @@ msgstr "Stato kun tiu ID ne trovitas."
 msgid "This status is already a favorite."
 msgstr "Ĉi tiu stato jam estas  ŝatata."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Malsukcesis krei ŝataton."
 
@@ -464,15 +466,19 @@ msgstr "La alinomo devas ne esti sama al la kromnomo."
 msgid "Group not found."
 msgstr "Grupo ne troviĝas."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Vi estas jam grupano."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "La administranto blokis vin de tiu grupo."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "La uzanto %1$*s ne povas aliĝi al la grupo %2$*s."
@@ -481,7 +487,10 @@ msgstr "La uzanto %1$*s ne povas aliĝi al la grupo %2$*s."
 msgid "You are not a member of this group."
 msgstr "Vi ne estas grupano."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Malsukcesis forigi uzanton %1$s de grupo %2$s."
@@ -641,11 +650,13 @@ msgstr "Vi ne povas forigi la staton de alia uzanto."
 msgid "No such notice."
 msgstr "Ne estas tiu avizo."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Vi ne povas ripeti vian propran avizon."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "La avizo jam ripetiĝis."
 
@@ -661,20 +672,20 @@ msgstr "Neniu stato kun tiu ID troviĝas."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Kliento devas providi al \"stato\"-parametro valoron."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
-msgstr "Tro longas. Aviza longlimo estas %*d signoj."
+msgstr "Tro longas. Longlimo por avizo estas %d signoj."
 
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Ne troviĝas."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
-msgstr "Aviza longlimo estas %d signoj, enkalkulante ankaŭ la retadresojn."
+msgstr "Longlimo por avizo estas %d signoj, enkalkulante ankaŭ la retadresojn."
 
 #: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
 msgid "Unsupported format."
@@ -878,6 +889,8 @@ msgstr "Bloki la uzanton"
 msgid "Failed to save block information."
 msgstr "Eraris konservi blokado-informon."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -887,8 +900,8 @@ msgstr "Eraris konservi blokado-informon."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Ne estas tiu grupo."
 
@@ -1631,7 +1644,7 @@ msgstr "Ŝatataj avizoj de %s"
 #: actions/favoritesrss.php:115
 #, php-format
 msgid "Updates favored by %1$s on %2$s!"
-msgstr "Å\9catataj Ä\9cisdatiĝoj de %1$s ĉe %2$s!"
+msgstr "Å\9catataj Ä\9disdatiĝoj de %1$s ĉe %2$s!"
 
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
@@ -1793,7 +1806,7 @@ msgstr "Grupa desegno"
 msgid ""
 "Customize the way your group looks with a background image and a colour "
 "palette of your choice."
-msgstr "Agordi kiel aspektu via grupo, kun elekto de fonbildo kaj koloraro."
+msgstr "Agordi kiel aspektu via grupo, per elekto de fonbildo kaj koloraro."
 
 #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
 #: lib/designsettings.php:391 lib/designsettings.php:413
@@ -2143,7 +2156,7 @@ msgstr "Vi jam abonas jenajn uzantojn:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2263,9 +2276,7 @@ msgstr "Ensalutu por aniĝi al grupo."
 msgid "No nickname or ID."
 msgstr "Ne estas alinomo aŭ ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s aniĝis al grupo %2$s"
@@ -2274,13 +2285,12 @@ msgstr "%1$s aniĝis al grupo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Ensalutu por eksaniĝi."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Vi ne estas grupano."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s eksaniĝis de grupo %2$s"
@@ -2390,12 +2400,15 @@ msgstr "Uzas ĉi tiun formularon por krei novan grupon."
 msgid "New message"
 msgstr "Nova mesaĝo"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Vi ne povas sendi mesaĝon al la uzanto."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Neniu enhavo!"
 
@@ -2403,7 +2416,8 @@ msgstr "Neniu enhavo!"
 msgid "No recipient specified."
 msgstr "Neniu ricevonto speifiĝas."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Ne sendu mesaĝon al vi mem! Simple suspiru anstataŭ."
@@ -2412,12 +2426,14 @@ msgstr "Ne sendu mesaĝon al vi mem! Simple suspiru anstataŭ."
 msgid "Message sent"
 msgstr "Mesaĝo sendita"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Rekta mesaĝo al %s sendiĝis."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Eraro de Ajax"
 
@@ -2425,7 +2441,7 @@ msgstr "Eraro de Ajax"
 msgid "New notice"
 msgstr "Nova avizo"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Avizo afiŝiĝas"
 
@@ -2551,11 +2567,11 @@ msgstr "Enhavtipo %s ne subteniĝas."
 #: actions/oembed.php:163
 #, php-format
 msgid "Only %s URLs over plain HTTP please."
-msgstr ""
+msgstr "Bonvolu, nur %s-URL per plata HTTP."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Datumformato ne subteniĝas."
 
@@ -2630,10 +2646,9 @@ msgid "Outbox for %s"
 msgstr "Elirkesto de %s"
 
 #: actions/outbox.php:116
-#, fuzzy
 msgid "This is your outbox, which lists private messages you have sent."
 msgstr ""
-"Tio ĉi estas via alvenkesto, kie listiĝas viaj alvenaj privataj mesaĝoj."
+"Tio ĉi estas via elirkesto, kie listiĝas privataj mesaĝoj, kiujn vi sendis."
 
 #: actions/passwordsettings.php:58
 msgid "Change password"
@@ -2706,28 +2721,28 @@ msgid "Path and server settings for this StatusNet site."
 msgstr "Vojo kaj servila agordo por ĉi tiu StatusNet-retejo."
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Desegno ne havebla: %s."
+msgstr "Desegno adresaro ne havebla: %s."
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Avatara adresaro"
+msgstr "Avatara adresaro ne skribebla: %s."
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Fona adresaro"
+msgstr "Fona adresaro ne skribebla: %s."
 
 #: actions/pathsadminpanel.php:177
 #, php-format
 msgid "Locales directory not readable: %s."
-msgstr ""
+msgstr "Lokaĵara adresaro ne havebla: %s."
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "Nevalida SSL-servilo. La longlimo estas 225 literoj."
 
 #: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
 msgid "Site"
@@ -2759,11 +2774,11 @@ msgstr "Adresara lokigilo al lokaĵaro"
 
 #: actions/pathsadminpanel.php:250
 msgid "Fancy URLs"
-msgstr ""
+msgstr "Tajlora URL"
 
 #: actions/pathsadminpanel.php:252
 msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
+msgstr "Ĉu uzi tajloran (pli facile legebla kaj memorebla) URL?"
 
 #: actions/pathsadminpanel.php:259
 msgid "Theme"
@@ -2981,7 +2996,7 @@ msgstr "Aŭtomate aboni iun ajn, kiu abonas min (prefereble por ne-homoj)"
 #: actions/profilesettings.php:228 actions/register.php:230
 #, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "Biografio tro longas (maksimume 255 literoj)"
+msgstr "Biografio tro longas (maksimume %d literoj)"
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
@@ -2989,7 +3004,7 @@ msgstr "Horzono ne elektita"
 
 #: actions/profilesettings.php:241
 msgid "Language is too long (max 50 chars)."
-msgstr "Lingvo tro longas (maksimume 255 literoj)"
+msgstr "Lingvo tro longas (maksimume 50 literoj)"
 
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
@@ -3067,16 +3082,17 @@ msgid ""
 msgstr "Kial ne [krei konton](%%action.register%%) kaj esti la unua afiŝanto!"
 
 #: actions/public.php:242
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
 "blogging) service based on the Free Software [StatusNet](http://status.net/) "
 "tool. [Join now](%%action.register%%) to share notices about yourself with "
 "friends, family, and colleagues! ([Read more](%%doc.help%%))"
 msgstr ""
-"Tio ĉi estas %%site.name%%, [mikrobloga](http://en.wikipedia.org/wiki/Micro-"
-"blogging) servo surbaze de libera servila programo [StatusNet](http://status."
-"net/)."
+"Tie ĉi estas %%site.name%%, [mikrobloga](http://en.wikipedia.org/wiki/Micro-"
+"blogging) servo surbaze de ilaro de Libera Molvaro [StatusNet](http://status."
+"net/). [Aniĝu](%%action.register%%) por konigi novaĵon pri vi mem al viaj "
+"amikoj, familianoj, kaj kolegoj! ([Pli](%%doc.help%%))"
 
 #: actions/public.php:247
 #, php-format
@@ -3096,90 +3112,83 @@ msgstr "Publika markil-nubo"
 #: actions/publictagcloud.php:63
 #, php-format
 msgid "These are most popular recent tags on %s "
-msgstr ""
+msgstr "Jen la plej popularaj entikedoj lastatempaj ĉe %s "
 
 #: actions/publictagcloud.php:69
 #, php-format
 msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
-msgstr ""
+msgstr "Neniu jam afiŝis avizon kun [haketentikedon](%%doc.tags%%)."
 
 #: actions/publictagcloud.php:72
 msgid "Be the first to post one!"
 msgstr "Estu la unua afiŝanto!"
 
 #: actions/publictagcloud.php:75
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%action.register%%) and be the first to post "
 "one!"
 msgstr "Kial ne [krei konton](%%action.register%%) kaj esti la unua afiŝanto!"
 
 #: actions/publictagcloud.php:134
-#, fuzzy
 msgid "Tag cloud"
-msgstr "Publika markil-nubo"
+msgstr "Entikedo-nubo"
 
 #: actions/recoverpassword.php:36
-#, fuzzy
 msgid "You are already logged in!"
 msgstr "Vi jam ensalutis."
 
 #: actions/recoverpassword.php:62
-#, fuzzy
 msgid "No such recovery code."
-msgstr "Ne estas tiu avizo."
+msgstr "Ne estas tia rehava kodo."
 
 #: actions/recoverpassword.php:66
 msgid "Not a recovery code."
-msgstr ""
+msgstr "Ne rehava kodo."
 
 #: actions/recoverpassword.php:73
 msgid "Recovery code for unknown user."
-msgstr ""
+msgstr "Rehava kodo por nekonata uzanto."
 
 #: actions/recoverpassword.php:86
-#, fuzzy
 msgid "Error with confirmation code."
-msgstr "Neniu konfirma kodo."
+msgstr "Eraras pro komfirma kodo."
 
 #: actions/recoverpassword.php:97
-#, fuzzy
 msgid "This confirmation code is too old. Please start again."
-msgstr "Tiu komfirmnumero ne estas por vi!"
+msgstr "Tiu komfirmnumero tro malnovas. Bonvolu rekomenci."
 
 #: actions/recoverpassword.php:111
-#, fuzzy
 msgid "Could not update user with confirmed email address."
-msgstr "Nuna konfirmita retpoŝtadreso."
+msgstr "Malsukcesas ĝisdatigi uzanton per komfirmita retpoŝtadreso."
 
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
 "the email address you have stored in your account."
 msgstr ""
+"Se vi forgesas aŭ perdas vian pasvorton, ni povas sendi novan pasvorton al "
+"la retpoŝtadreso konservita je via konto."
 
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr "Vi estis identigita. Enigu sube novan pasvorton."
 
 #: actions/recoverpassword.php:188
-#, fuzzy
 msgid "Password recovery"
-msgstr "Pasvorta ŝanĝo"
+msgstr "Pasvorton rehavi."
 
 #: actions/recoverpassword.php:191
-#, fuzzy
 msgid "Nickname or email address"
-msgstr "Neniu retpoŝta adreso."
+msgstr "Alinomo aŭ retpoŝtadreso."
 
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
-msgstr ""
+msgstr "Via alinomo ĉe tiu ĉi servilo, aŭ via registrita retpoŝadreso."
 
 #: actions/recoverpassword.php:199 actions/recoverpassword.php:200
-#, fuzzy
 msgid "Recover"
-msgstr "Forigi"
+msgstr "Rehavi"
 
 #: actions/recoverpassword.php:208
 msgid "Reset password"
@@ -3191,11 +3200,11 @@ msgstr "Refari pasvorton"
 
 #: actions/recoverpassword.php:210 actions/recoverpassword.php:335
 msgid "Password recovery requested"
-msgstr ""
+msgstr "Petiĝas pasvorton rehavado"
 
 #: actions/recoverpassword.php:213
 msgid "Unknown action"
-msgstr ""
+msgstr "Nekonata ago"
 
 #: actions/recoverpassword.php:236
 msgid "6 or more characters, and don't forget it!"
@@ -3206,59 +3215,52 @@ msgid "Reset"
 msgstr "Restarigi"
 
 #: actions/recoverpassword.php:252
-#, fuzzy
 msgid "Enter a nickname or email address."
-msgstr "Tiu ne estas via retpoŝtadreso."
+msgstr "Alinomo aŭ retpoŝtadreso."
 
 #: actions/recoverpassword.php:282
 msgid "No user with that email address or username."
-msgstr ""
+msgstr "Ne estas uzanto kun tiu retpoŝtadreso aŭ uzantnomo."
 
 #: actions/recoverpassword.php:299
 msgid "No registered email address for that user."
-msgstr ""
+msgstr "Neniu registrita retpoŝtadreso apartenas al la uzanto."
 
 #: actions/recoverpassword.php:313
-#, fuzzy
 msgid "Error saving address confirmation."
-msgstr "Eraris konservi uzanton: nevalida."
+msgstr "Eraras pro komfirma kodo."
 
 #: actions/recoverpassword.php:338
 msgid ""
 "Instructions for recovering your password have been sent to the email "
 "address registered to your account."
 msgstr ""
+"Gvidoj rehavi vian pasvorton jam sendiĝas al la retpoŝtadreso registrita je "
+"via konto."
 
 #: actions/recoverpassword.php:357
-#, fuzzy
 msgid "Unexpected password reset."
-msgstr "Neatendita formo-sendo."
+msgstr "Neatendita pasvorto-rekomencigo."
 
 #: actions/recoverpassword.php:365
 msgid "Password must be 6 chars or more."
 msgstr "Pasvorto devas enhavi 6 signojn aŭ pli."
 
 #: actions/recoverpassword.php:369
-#, fuzzy
 msgid "Password and confirmation do not match."
-msgstr "La pasvortoj diferencas."
-
-#: actions/recoverpassword.php:388 actions/register.php:255
-#, fuzzy
-msgid "Error setting user."
-msgstr "Eraris konservi uzanton: nevalida."
+msgstr "Pasvorto kaj komfirmo ne kongruas."
 
 #: actions/recoverpassword.php:395
 msgid "New password successfully saved. You are now logged in."
-msgstr ""
+msgstr "Nova pasvorto sukcese konserviĝas. Vi nun estas ensalutinta."
 
 #: actions/register.php:92 actions/register.php:196 actions/register.php:412
 msgid "Sorry, only invited people can register."
-msgstr ""
+msgstr "Pardonon, nur invito rajtas registri."
 
 #: actions/register.php:99
 msgid "Sorry, invalid invitation code."
-msgstr ""
+msgstr "Pardonon, nevalida invitkodo."
 
 #: actions/register.php:119
 msgid "Registration successful"
@@ -3289,21 +3291,21 @@ msgid ""
 "With this form you can create a new account. You can then post notices and "
 "link up to friends and colleagues. "
 msgstr ""
+"Per tiu ĉi formularo vi povas krei novan konton. Poste povos vi afiŝi avizon "
+"kaj komuniki kun amikoj kaj kolegoj. "
 
 #: actions/register.php:432
-#, fuzzy
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr "1-64 minusklaj literoj aŭ ciferoj, neniu interpunkcio aŭ spaco"
+msgstr ""
+"1-64 minusklaj literoj aŭ ciferoj, neniu interpunkcio aŭ spaco. Bezonate."
 
 #: actions/register.php:437
-#, fuzzy
 msgid "6 or more characters. Required."
-msgstr "6 aŭ pli da literoj"
+msgstr "6 aŭ pli da literoj. Bezonate."
 
 #: actions/register.php:441
-#, fuzzy
 msgid "Same as password above. Required."
-msgstr "Same kiel pasvorto supra"
+msgstr "Same kiel supra pasvorto. Bezonate."
 
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
@@ -3313,32 +3315,33 @@ msgstr "Retpoŝto"
 
 #: actions/register.php:446 actions/register.php:450
 msgid "Used only for updates, announcements, and password recovery"
-msgstr ""
+msgstr "Uzu nur por ĝisdatigo, anonco, kaj rehavi pasvorton."
 
 #: actions/register.php:457
 msgid "Longer name, preferably your \"real\" name"
-msgstr ""
+msgstr "Pli longa nomo, prefere via \"vera\" nomo."
 
 #: actions/register.php:518
 #, php-format
 msgid ""
 "I understand that content and data of %1$s are private and confidential."
 msgstr ""
+"Mi komprenas ke enhavo kaj datumo de %1$s estas privataj kaj sekretigita."
 
 #: actions/register.php:528
 #, php-format
 msgid "My text and files are copyright by %1$s."
-msgstr ""
+msgstr "Mia teksto kaj dosiero estas aŭtorrajtigita de %1$s."
 
 #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved with ownership left to contributors.
 #: actions/register.php:532
 msgid "My text and files remain under my own copyright."
-msgstr ""
+msgstr "Mia teksto kaj dosiero restu en mia propra aŭtorrajto."
 
 #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved.
 #: actions/register.php:535
 msgid "All rights reserved."
-msgstr ""
+msgstr "Ĉiuj rajtoj rezervitaj."
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
@@ -3347,6 +3350,8 @@ msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
+"Mia teksto kaj dosiero estas atingebla per %s  krom jene: pasvorto, "
+"retpoŝtadreso, tujmesaĝilo-adreso, kaj telefonnumero."
 
 #: actions/register.php:583
 #, php-format
@@ -3366,12 +3371,26 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
+"Gratulon, %1$s! Kaj bovenon al %%%%site.name%%%%. Nun eble vi volus...\n"
+"\n"
+"* Al [via profilo](%2$s) kaj afiŝi vian unuan mesaĝon.\n"
+"* Aldoni [Jabber/GTalk-adreson](%%%%action.imsettings%%%%) por afiŝi avizon "
+"per tujmesaĝilo.\n"
+"* [Serŝi personon](%%%%action.peoplesearch%%%%), kiun vi konas aŭ havas "
+"similan ŝatokupon kiel vi. \n"
+"* Ĝisdatigi vian [profila agordon](%%%%action.profilesettings%%%%) por "
+"sciigi pli pri vi. \n"
+"* Relegi la [enretaĵojn](%%%%doc.help%%%%) pri iu funkcio, kiun vi ne "
+"rimarkus. \n"
+"\n"
+"Dankon pro registri kaj ni esperas al vi ĝuo de uzi ĉi servon."
 
 #: actions/register.php:607
 msgid ""
 "(You should receive a message by email momentarily, with instructions on how "
 "to confirm your email address.)"
 msgstr ""
+"(Vi ricevos tuj mesaĝon retpoŝtan, kun gvidon konfirmi vian retpoŝtadreson.)"
 
 #: actions/remotesubscribe.php:98
 #, php-format
@@ -3380,33 +3399,33 @@ msgid ""
 "register%%) a new  account. If you already have an account  on a [compatible "
 "microblogging site](%%doc.openmublog%%),  enter your profile URL below."
 msgstr ""
+"Por aboni, [ensalutu](%%action.login%%), aŭ [krei konton](%%action.register%"
+"%). Se vi jam havas konton ĉe iu [kongrua mikroblogilo-retejo](%%doc."
+"openmublog%%),  entajpu vian profilan URL jene."
 
 #: actions/remotesubscribe.php:112
-#, fuzzy
 msgid "Remote subscribe"
-msgstr "Malaboni"
+msgstr "Defore aboni"
 
 #: actions/remotesubscribe.php:124
 msgid "Subscribe to a remote user"
-msgstr ""
+msgstr "Aboni foran uzanton"
 
 #: actions/remotesubscribe.php:129
-#, fuzzy
 msgid "User nickname"
-msgstr "Neniu kromnomo."
+msgstr "Uzanta alinomo"
 
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
-msgstr ""
+msgstr "Alnomo de la uzanto, kiun vi volas aboni."
 
 #: actions/remotesubscribe.php:133
-#, fuzzy
 msgid "Profile URL"
-msgstr "Profilo"
+msgstr "Profila URL"
 
 #: actions/remotesubscribe.php:134
 msgid "URL of your profile on another compatible microblogging service"
-msgstr ""
+msgstr "URL de via profilo ĉe alia kongrua mikroblogilo-servo"
 
 #: actions/remotesubscribe.php:137 lib/subscribeform.php:139
 #: lib/userprofile.php:406
@@ -3415,29 +3434,28 @@ msgstr "Aboni"
 
 #: actions/remotesubscribe.php:159
 msgid "Invalid profile URL (bad format)"
-msgstr ""
+msgstr "Nevalida profila URL (fuŝa formato)"
 
 #: actions/remotesubscribe.php:168
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
 msgstr ""
+"Ne valida profila URL (ne estas YADIS-dokumento aŭ difiniĝas nevalida XRDS)."
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
-msgstr ""
+msgstr "Tio estas loka profilo! Ensalutu por aboni."
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Malsukcesis interŝanĝi petĵetonon al atingoĵetono."
+msgstr "Malsukcesis akiri pet-ĵetonon."
 
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
-msgstr ""
+msgstr "Nur ensalutinto rajtas ripeti avizon."
 
 #: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
 msgid "No notice specified."
-msgstr "Neniu profilo elektita."
+msgstr "Neniu profilo specifiĝas."
 
 #: actions/repeat.php:76
 msgid "You can't repeat your own notice."
@@ -3457,37 +3475,38 @@ msgstr "Ripetita!"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %s"
-msgstr "Ripetoj de %s"
+msgstr "Respondoj al %s"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "Alvenkesto de %1$s - paĝo %2$d"
+msgstr "Respondoj al %1$s, paĝo %2$d"
 
 #: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Fluo por amikoj de %s (RSS 1.0)"
+msgstr "Responda fluo al %s (RSS 1.0)"
 
 #: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Fluo por amikoj de %s (RSS 2.0)"
+msgstr "Responda fluo al %s (RSS 2.0)"
 
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Fluo por amikoj de %s (Atom)"
+msgstr "Responda fluo al %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
 msgstr ""
-"Tie ĉi estas la tempstrio de %s kaj amikoj sed ankoraŭ neniu afiŝis ion ajn."
+"Tie ĉi estus tempstrio montranta respondojn al %1$s, sed %2$s ankoraŭ "
+"ricevas neniun avizon."
 
 #: actions/replies.php:204
 #, php-format
@@ -3495,94 +3514,78 @@ msgid ""
 "You can engage other users in a conversation, subscribe to more people or "
 "[join groups](%%action.groups%%)."
 msgstr ""
+"Vi povas komenci interparoladon kun aliaj uzantoj, aboni pli da personoj aŭ "
+"[aniĝi al grupoj](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Vi povas provi  [puŝeti %1$s](../%2$s) de lia profilo aŭ [afiŝi ion al li](%%"
-"%%action.newnotice%%%%?status_textarea=%3$s)."
+"Vi povas provi  [puŝeti %1$s](../%2$s) aŭ[afiŝi ion al li](%%%%action."
+"newnotice%%%%?status_textarea=%3$s)."
 
 #: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s on %2$s!"
-msgstr "Bonvenon al %1$s, @%2$s!"
+msgstr "Respondoj al %1$s ĉe %2$s!"
 
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Vi ne rajtas doni al uzanto rolon ĉe ĉi tiu retejo."
+msgstr "Vi ne rajtas revoki de uzanto rolon ĉe ĉi tiu retejo."
 
 #: actions/revokerole.php:82
-#, fuzzy
 msgid "User doesn't have this role."
-msgstr "Uzanto jam havas la rolon."
+msgstr "La uzanto ne havas la rolon."
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Stato forigita."
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Vi ne rajtas doni al uzanto rolon ĉe ĉi tiu retejo."
-
-#: actions/sandbox.php:72
-#, fuzzy
-msgid "User is already sandboxed."
-msgstr "La uzanto jam de grupo blokiĝas."
+msgstr "StatusNet"
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
-#, fuzzy
 msgid "Sessions"
-msgstr "Versio"
+msgstr "Seancoj"
 
 #: actions/sessionsadminpanel.php:65
-#, fuzzy
 msgid "Session settings for this StatusNet site."
-msgstr "Aspektaj agordoj por ĉi tiu StatusNet-retejo."
+msgstr "Seancaj agordoj por tiu ĉi StatusNet-retejo"
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
-msgstr ""
+msgstr "Trakti seancojn"
 
 #: actions/sessionsadminpanel.php:177
 msgid "Whether to handle sessions ourselves."
-msgstr ""
+msgstr "Ĉu traktu seancojn ni mem."
 
 #: actions/sessionsadminpanel.php:181
 msgid "Session debugging"
-msgstr ""
+msgstr "Seanca sencimigado"
 
 #: actions/sessionsadminpanel.php:183
 msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "Ŝalti sencimigadan eligon por seanco."
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "Konservu atingan agordon"
+msgstr "Konservi retejan agordon"
 
 #: actions/showapplication.php:82
-#, fuzzy
 msgid "You must be logged in to view an application."
-msgstr "Ensalutu por redakti la aplikaĵon."
+msgstr "Ensalutu por vidi la aplikaĵon."
 
 #: actions/showapplication.php:157
-#, fuzzy
 msgid "Application profile"
-msgstr "Aplikaĵo ne trovita."
+msgstr "Aplikaĵa profilo"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
-msgstr ""
+msgstr "Ikono"
 
 #. TRANS: Form input field label for application name.
 #: actions/showapplication.php:169 actions/version.php:197
@@ -3604,26 +3607,24 @@ msgstr "Priskribo"
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
 msgid "Statistics"
-msgstr ""
+msgstr "Statistiko"
 
 #: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgstr "Kreita de %1$s - %2$s defaŭlta aliroj  - %3$d uzantoj"
 
 #: actions/showapplication.php:213
-#, fuzzy
 msgid "Application actions"
-msgstr "Aplikaĵo ne trovita."
+msgstr "Aplikaĵa ago"
 
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
 #: actions/showapplication.php:261
-#, fuzzy
 msgid "Application info"
-msgstr "Aplikaĵo ne trovita."
+msgstr "Aplikaĵa informo"
 
 #: actions/showapplication.php:263
 msgid "Consumer key"
@@ -3643,49 +3644,47 @@ msgstr ""
 
 #: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr ""
+msgstr "Rajtigi URL"
 
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
-
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Ĉu vi certe volas forigi la avizon?"
+"Rimarku: Ni subtenas HMAC-SHA1-subskribo. Ni ne subtenas platteksta "
+"subskribado-metodon."
 
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "Ŝatataj avizoj de %s"
+msgstr "Ŝatataj avizoj de %s, paĝo %2$d"
 
 #: actions/showfavorites.php:132
-#, fuzzy
 msgid "Could not retrieve favorite notices."
-msgstr "Malsukcesis krei ŝataton."
+msgstr "Malsukcesis ricevi ŝataton."
 
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Fluo por amikoj de %s (RSS 1.0)"
+msgstr "Fluo pri ŝatato de %s (RSS 1.0)"
 
 #: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Fluo por amikoj de %s (RSS 2.0)"
+msgstr "Fluo pri ŝatato de %s (RSS 2.0)"
 
 #: actions/showfavorites.php:185
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (Atom)"
-msgstr "Fluo por amikoj de %s (Atom)"
+msgstr "Fluo pri ŝatato de %s (Atom)"
 
 #: actions/showfavorites.php:206
 msgid ""
 "You haven't chosen any favorite notices yet. Click the fave button on "
 "notices you like to bookmark them for later or shed a spotlight on them."
 msgstr ""
+"Vi ne jam ŝatis iun ajn avizon. Alklaku la ŝati-klavon apud avizo ŝatita por "
+"poste trovi ĝin kaj atentigi al ĝi."
 
 #: actions/showfavorites.php:208
 #, php-format
@@ -3693,35 +3692,35 @@ msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
 msgstr ""
+"%s ankoraŭ ne aldonis iun ajn ŝatatan avizon. Sendu ion, kion ili ŝatos. :)"
 
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"[Kreu konton](%%action.register%%) kaj estu la unua, kiu aldonos avizon al "
-"sia ŝatolisto!"
+"%s ankoraŭ ne aldonis iun ajn ŝatatan avizon. Kial ne [krei konton](%%%%"
+"action.register%%%%) kaj sendi ion, kion ili ŝatos. :)"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
-msgstr ""
+msgstr "Tiel vi povas diskonigi vian ŝataton."
 
 #: actions/showgroup.php:82 lib/groupnav.php:86
-#, fuzzy, php-format
+#, php-format
 msgid "%s group"
-msgstr "Grupoj de %s"
+msgstr "Grupo %s"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "%1$s grupanoj, paĝo %2$d"
+msgstr "Grupo %1$s, paĝo %2$d"
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "Grupa emblemo"
+msgstr "Grupa profilo"
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
@@ -3734,34 +3733,32 @@ msgid "Note"
 msgstr "Noto"
 
 #: actions/showgroup.php:293 lib/groupeditform.php:184
-#, fuzzy
 msgid "Aliases"
-msgstr "Ĉiam"
+msgstr "Alnomo"
 
 #: actions/showgroup.php:302
-#, fuzzy
 msgid "Group actions"
-msgstr "grupoj ĉe %s"
+msgstr "Grupaj agoj"
 
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Fluo por amikoj de %s (RSS 1.0)"
+msgstr "Avizofluo de grupo %s (RSS 1.0)"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Fluo por amikoj de %s (RSS 2.0)"
+msgstr "Avizofluo de grupo %s (RSS 2.0)"
 
 #: actions/showgroup.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (Atom)"
-msgstr "Fluo por amikoj de %s (Atom)"
+msgstr "Avizofluo de grupo %s (Atom)"
 
 #: actions/showgroup.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s group"
-msgstr "Grupoj de %s"
+msgstr "Foramiko de grupo %s"
 
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
@@ -3770,21 +3767,19 @@ msgstr "Grupanoj"
 #: actions/showgroup.php:398 lib/profileaction.php:117
 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
-#, fuzzy
 msgid "(None)"
-msgstr "Noto"
+msgstr "(nenio)"
 
 #: actions/showgroup.php:404
 msgid "All members"
 msgstr "Ĉiuj grupanoj"
 
 #: actions/showgroup.php:439
-#, fuzzy
 msgid "Created"
-msgstr "Ripetita"
+msgstr "Kreita"
 
 #: actions/showgroup.php:455
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
@@ -3792,166 +3787,163 @@ msgid ""
 "their life and interests. [Join now](%%%%action.register%%%%) to become part "
 "of this group and many more! ([Read more](%%%%doc.help%%%%))"
 msgstr ""
-"Tio ĉi estas %%site.name%%, [mikrobloga](http://en.wikipedia.org/wiki/Micro-"
-"blogging) servo surbaze de libera servila programo [StatusNet](http://status."
-"net/)."
+"**%s** estas uzanto-grupo ĉe %%site.name%%, [mikrobloga](http://en.wikipedia."
+"org/wiki/Micro-blogging) servo surbaze de ilaro de Libera Molvaro [StatusNet]"
+"(http://status.net/). [Aniĝu](%%action.register%%) por fariĝi parto de tiu "
+"ĉi grupo kaj multe pli! ([Pli](%%doc.help%%))"
 
 #: actions/showgroup.php:461
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. Its members share short messages about "
 "their life and interests. "
 msgstr ""
-"Tio ĉi estas %%site.name%%, [mikrobloga](http://en.wikipedia.org/wiki/Micro-"
-"blogging) servo surbaze de libera servila programo [StatusNet](http://status."
-"net/)."
+"**%s** estas grupo de uzantoj ĉe %%%%*site.*name%%%%, [mikrobloga servo]"
+"(*http://estas.*wikipedia.*org/*wiki/*Microblogging) baze de ilaro de Libera "
+"Molvaro [StatusNet](*http://*status.*net/), kie anoj konigas mesaĝetojn pri "
+"siaj vivoj kaj ŝatokupoj. "
 
 #: actions/showgroup.php:489
-#, fuzzy
 msgid "Admins"
-msgstr "Administranto"
+msgstr "Administrantoj"
 
 #: actions/showmessage.php:81
-#, fuzzy
 msgid "No such message."
-msgstr "Ne estas tiu paĝo."
+msgstr "Ne estas tiu mesaĝo."
 
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
-msgstr ""
+msgstr "Nur la sendinto kaj ricevinto rajtas legi la mesaĝon."
 
 #: actions/showmessage.php:108
-#, fuzzy, php-format
+#, php-format
 msgid "Message to %1$s on %2$s"
-msgstr "Ĝisdatigoj etikeditaj %1$s ĉe %2$s!"
+msgstr "Mesaĝo al %1$s ĉe %2$s"
 
 #: actions/showmessage.php:113
-#, fuzzy, php-format
+#, php-format
 msgid "Message from %1$s on %2$s"
-msgstr "Ĝisdatigoj etikeditaj %1$s ĉe %2$s!"
+msgstr "Mesaĝo de %1$s ĉe %2$s"
 
 #: actions/shownotice.php:90
 msgid "Notice deleted."
 msgstr "Avizo viŝiĝas"
 
 #: actions/showstream.php:73
-#, fuzzy, php-format
+#, php-format
 msgid " tagged %s"
-msgstr "Avizoj etikeditaj %s"
+msgstr " Etikedigita %s"
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%1$s kaj amikoj, paĝo %2$d"
+msgstr "%1$s, paĝo %2$d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Fluo por amikoj de %s (RSS 1.0)"
+msgstr "Avizofluo pri %1$s etikedigita %2$s (RSS 1.0)"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Fluo por amikoj de %s (RSS 1.0)"
+msgstr "Avizofluo pri %1$s (RSS 1.0)"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Fluo por amikoj de %s (RSS 2.0)"
+msgstr "Avizofluo pri %1$s (RSS 2.0)"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (Atom)"
-msgstr "Fluo por amikoj de %s (Atom)"
+msgstr "Avizofluo pri %1$s  (Atom)"
 
 #: actions/showstream.php:148
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s"
-msgstr "Elirkesto de %s"
+msgstr "Foramiko de  %s"
 
 #: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr ""
-"Tie ĉi estas la tempstrio de %s kaj amikoj sed ankoraŭ neniu afiŝis ion ajn."
+msgstr "Tie ĉi estus tempstrio de %1$s sed %2$s ankoraŭ afiŝis nenion."
 
 #: actions/showstream.php:205
 msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
 "would be a good time to start :)"
 msgstr ""
+"Ĉu okazas io interesa lastatempe? Vi ne afiŝis ion ajn, nun taŭgas komenci :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Vi povas provi  [puŝeti %1$s](../%2$s) de lia profilo aŭ [afiŝi ion al li](%%"
-"%%action.newnotice%%%%?status_textarea=%3$s)."
+"Vi povas provi  [puŝeti %1$s] aŭ [afiŝi ion al li](%%%%action.newnotice%%%%?"
+"status_textarea=%2$s)."
 
 #: actions/showstream.php:243
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
 "follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
 msgstr ""
-"Tio ĉi estas %%site.name%%, [mikrobloga](http://en.wikipedia.org/wiki/Micro-"
-"blogging) servo surbaze de libera servila programo [StatusNet](http://status."
-"net/)."
+"**%s** havas konton ĉe %%site.name%%, [mikrobloga](http://en.wikipedia.org/"
+"wiki/Micro-blogging) servo surbaze de ilaro de Libera Molvaro [StatusNet]"
+"(http://status.net/). [Aniĝu](%%action.register%%) por sekvi avizojn de **%"
+"s** kaj multe pli! ([Pli](%%doc.help%%))"
 
 #: actions/showstream.php:248
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
-"Tio ĉi estas %%site.name%%, [mikrobloga](http://en.wikipedia.org/wiki/Micro-"
-"blogging) servo surbaze de libera servila programo [StatusNet](http://status."
-"net/)."
+"**%s** havas konton ĉe %%site.name%%, [mikrobloga](http://en.wikipedia.org/"
+"wiki/Micro-blogging) servo surbaze de ilaro de Libera Molvaro [StatusNet]"
+"(http://status.net/). "
 
 #: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
 msgid "Repeat of %s"
-msgstr "Ripetoj de %s"
+msgstr "Ripeto de %s"
 
 #: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
 msgid "You cannot silence users on this site."
-msgstr "Vi ne rajtas doni al uzanto rolon ĉe ĉi tiu retejo."
+msgstr "Vi ne rajtas silentigi uzanton ĉe ĉi tiu retejo."
 
 #: actions/silence.php:72
-#, fuzzy
 msgid "User is already silenced."
-msgstr "La uzanto jam de grupo blokiĝas."
+msgstr "La uzanto jam silentiĝas."
 
 #: actions/siteadminpanel.php:69
-#, fuzzy
 msgid "Basic settings for this StatusNet site"
-msgstr "Aspektaj agordoj por ĉi tiu StatusNet-retejo."
+msgstr "Baza agordo por ĉi tiu StatusNet-retejo."
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "La sita nomo devas pli ol nula longeco"
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Retpoŝta adreso ne valida"
+msgstr "Vi devas havi validan kontakteblan retpoŝtadreson"
 
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
-msgstr ""
+msgstr "Nekonata lingvo \"%s\"."
 
 #: actions/siteadminpanel.php:165
 msgid "Minimum text limit is 0 (unlimited)."
-msgstr ""
+msgstr "Teksto estu almenaŭ 0 literojn (senlime)."
 
 #: actions/siteadminpanel.php:171
 msgid "Dupe limit must be one or more seconds."
@@ -3962,52 +3954,40 @@ msgid "General"
 msgstr "Ĝenerala"
 
 #: actions/siteadminpanel.php:224
-#, fuzzy
 msgid "Site name"
-msgstr "Reteja desegno"
+msgstr "Nomo de retejo"
 
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr ""
+msgstr "Nomo de via retejo, ekzemple \"Viafirmo Mikroblogo\""
 
 #: actions/siteadminpanel.php:229
 msgid "Brought by"
-msgstr ""
-
-#: actions/siteadminpanel.php:230
-msgid "Text used for credits link in footer of each page"
-msgstr ""
-
-#: actions/siteadminpanel.php:234
-msgid "Brought by URL"
-msgstr ""
+msgstr "Eblige de"
 
 #: actions/siteadminpanel.php:235
 msgid "URL used for credits link in footer of each page"
-msgstr ""
+msgstr "URL por danko-ligilo je subaĵo sur ĉiu paĝo"
 
 #: actions/siteadminpanel.php:239
-#, fuzzy
 msgid "Contact email address for your site"
-msgstr "Alvena retpoŝtadreso forigita."
+msgstr "Kontakta retpoŝtadreso por via retejo"
 
 #: actions/siteadminpanel.php:245
-#, fuzzy
 msgid "Local"
-msgstr "Loko"
+msgstr "Loka"
 
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
-msgstr ""
+msgstr "Defaŭlta horzono"
 
 #: actions/siteadminpanel.php:257
 msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Defaŭlta horzono de la retejo; kutime UTC."
 
 #: actions/siteadminpanel.php:262
-#, fuzzy
 msgid "Default language"
-msgstr "Preferata lingvo"
+msgstr "Defaŭlta lingvo"
 
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
@@ -4015,7 +3995,7 @@ msgstr ""
 
 #: actions/siteadminpanel.php:271
 msgid "Limits"
-msgstr ""
+msgstr "Limoj"
 
 #: actions/siteadminpanel.php:274
 msgid "Text limit"
@@ -4033,81 +4013,23 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "Avizoj"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Nova mesaĝo"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Malsukcesis konservi vian desegnan agordon"
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Forigi avizon"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:198
-#, fuzzy
 msgid "Save site notice"
-msgstr "Forigi avizon"
-
-#. TRANS: Title for SMS settings.
-#: actions/smssettings.php:59
-#, fuzzy
-msgid "SMS settings"
-msgstr "Tujmesaĝila agordo."
-
-#. TRANS: SMS settings page instructions.
-#. TRANS: %%site.name%% is the name of the site.
-#: actions/smssettings.php:74
-#, fuzzy, php-format
-msgid "You can receive SMS messages through email from %%site.name%%."
-msgstr "Administri kiel ricevi mesaĝon de  %%site.name%%."
-
-#. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
-#: actions/smssettings.php:97
-#, fuzzy
-msgid "SMS is not available."
-msgstr "Tujmesaĝilo ne estas disponebla."
-
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "Tujmesaĝila adreso"
-
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-#, fuzzy
-msgid "Current confirmed SMS-enabled phone number."
-msgstr "Nuna konfirmita retpoŝtadreso."
+msgstr "Konservi retejan agordon"
 
 #. TRANS: Form guide in IM settings form.
 #: actions/smssettings.php:133
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-#, fuzzy
-msgid "Confirmation code"
-msgstr "Neniu konfirma kodo."
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
@@ -4124,18 +4046,6 @@ msgstr "Konfirmi"
 msgid "SMS phone number"
 msgstr ""
 
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-#, fuzzy
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr "1-64 minusklaj literoj aŭ ciferoj, neniu interpunkcio aŭ spaco"
-
-#. TRANS: Form legend for SMS preferences form.
-#: actions/smssettings.php:195
-#, fuzzy
-msgid "SMS preferences"
-msgstr "Tujmesaĝilaj preferoj"
-
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
 msgid ""
@@ -4143,79 +4053,14 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Prefero konservita."
-
-#. TRANS: Message given saving SMS phone number without having provided one.
-#: actions/smssettings.php:338
-#, fuzzy
-msgid "No phone number."
-msgstr "Ne ekzistas tiu uzanto."
-
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-#, fuzzy
-msgid "No carrier selected."
-msgstr "Avizo viŝiĝas"
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-#, fuzzy
-msgid "That is already your phone number."
-msgstr "Tio estas jam via Jabber-ID."
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-#, fuzzy
-msgid "That phone number already belongs to another user."
-msgstr "Tiu retpoŝtadreso jam apartenas al alia uzanto."
+#. TRANS: Label for mobile carrier dropdown menu in SMS settings.
+#: actions/smssettings.php:511
+msgid "Mobile carrier"
+msgstr ""
 
-#. TRANS: Message given saving valid SMS phone number that is to be confirmed.
-#: actions/smssettings.php:384
-#, fuzzy
-msgid ""
-"A confirmation code was sent to the phone number you added. Check your phone "
-"for the code and instructions on how to use it."
-msgstr ""
-"Konfirmkodo jam senditas al la aldonita retpoŝtadreso. Kontrolu vian "
-"alvenkeston (kaj spamkeston!) pri la kodo kaj instrukcio pri kiel uzi ĝin."
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-#, fuzzy
-msgid "That is the wrong confirmation number."
-msgstr "Tiu retpoŝtadreso estas malĝusta."
-
-#. TRANS: Message given after successfully canceling SMS phone number confirmation.
-#: actions/smssettings.php:427
-#, fuzzy
-msgid "SMS confirmation cancelled."
-msgstr "Tujmesaĝila konfirmo nuligita."
-
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-#, fuzzy
-msgid "That is not your phone number."
-msgstr "Tio ne estas via Jabber-ID."
-
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "La tujmesaĝila adreso estas forigita."
-
-#. TRANS: Label for mobile carrier dropdown menu in SMS settings.
-#: actions/smssettings.php:511
-msgid "Mobile carrier"
-msgstr ""
-
-#. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
-#: actions/smssettings.php:516
-msgid "Select a carrier"
+#. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
+#: actions/smssettings.php:516
+msgid "Select a carrier"
 msgstr ""
 
 #. TRANS: Form instructions for mobile carrier dropdown menu in SMS settings.
@@ -4227,37 +4072,10 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-#, fuzzy
-msgid "No code entered"
-msgstr "Neniu enhavo!"
-
-#. TRANS: Menu item for site administration
-#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
-#: lib/adminpanelaction.php:408
-msgid "Snapshots"
-msgstr ""
-
-#: actions/snapshotadminpanel.php:65
-#, fuzzy
-msgid "Manage snapshot configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
-#: actions/snapshotadminpanel.php:127
-#, fuzzy
-msgid "Invalid snapshot run value."
-msgstr "Rolo nevalida."
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-#, fuzzy
-msgid "Invalid snapshot report URL."
-msgstr "URL por la emblemo nevalida."
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4266,10 +4084,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-msgid "Data snapshots"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4291,30 +4105,13 @@ msgid "Snapshots will be sent to this URL"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:248
-#, fuzzy
 msgid "Save snapshot settings"
-msgstr "Konservu atingan agordon"
-
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "Vi ne estas grupano."
-
-#. TRANS: Exception thrown when a subscription could not be stored on the server.
-#: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
-msgid "Could not save subscription."
-msgstr "Malsukcesis konservi la profilon."
+msgstr "Konservi retejan agordon"
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Ne ekzistas tia dosiero."
-
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
@@ -4323,16 +4120,6 @@ msgstr ""
 msgid "Subscribed"
 msgstr "Abonita"
 
-#: actions/subscribers.php:50
-#, fuzzy, php-format
-msgid "%s subscribers"
-msgstr "Malaboni"
-
-#: actions/subscribers.php:52
-#, fuzzy, php-format
-msgid "%1$s subscribers, page %2$d"
-msgstr "%1$s grupanoj, paĝo %2$d"
-
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
 msgstr ""
@@ -4353,23 +4140,6 @@ msgstr ""
 msgid "%s has no subscribers. Want to be the first?"
 msgstr ""
 
-#: actions/subscribers.php:114
-#, fuzzy, php-format
-msgid ""
-"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
-"%) and be the first?"
-msgstr "Kial ne [krei konton](%%action.register%%) kaj esti la unua afiŝanto!"
-
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Priskribo"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "%1$s kaj amikoj, paĝo %2$d"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr ""
@@ -4389,11 +4159,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, php-format
-msgid "%s is not listening to anyone."
-msgstr ""
-
 #: actions/subscriptions.php:208
 msgid "Jabber"
 msgstr "Jabber"
@@ -4402,134 +4167,34 @@ msgstr "Jabber"
 msgid "SMS"
 msgstr "SMS"
 
-#: actions/tag.php:69
-#, fuzzy, php-format
-msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Uzantoj sinmarkitaj per %1$s - paĝo %2$d"
-
-#: actions/tag.php:87
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Fluo por amikoj de %s (RSS 1.0)"
-
-#: actions/tag.php:93
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Fluo por amikoj de %s (RSS 2.0)"
-
-#: actions/tag.php:99
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr "Fluo por amikoj de %s (Atom)"
-
-#: actions/tagother.php:39
-#, fuzzy
-msgid "No ID argument."
-msgstr "Ne estas aldonaĵo."
-
-#: actions/tagother.php:65
-#, fuzzy, php-format
-msgid "Tag %s"
-msgstr "Markiloj"
-
-#: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
-msgid "User profile"
-msgstr "La uzanto ne havas profilon."
-
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
 msgstr "Foto"
 
-#: actions/tagother.php:141
-#, fuzzy
-msgid "Tag user"
-msgstr "Markiloj"
-
-#: actions/tagother.php:151
-#, fuzzy
-msgid ""
-"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
-"separated"
-msgstr ""
-"Markiloj por vi mem (literoj, ciferoj, \"-\", \".\", kaj \"_\"), dividite "
-"per komoj aŭ spacoj"
-
 #: actions/tagother.php:193
 msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
 msgstr ""
 
-#: actions/tagother.php:200
-#, fuzzy
-msgid "Could not save tags."
-msgstr "Malsukcesis konservi markilojn."
-
-#: actions/tagother.php:236
-#, fuzzy
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr "Uzu ĉi tiun formularon por redakti vian aplikaĵon."
-
-#: actions/tagrss.php:35
-#, fuzzy
-msgid "No such tag."
-msgstr "Ne estas tiu paĝo."
-
-#: actions/unblock.php:59
-#, fuzzy
-msgid "You haven't blocked that user."
-msgstr "Vi jam blokis la uzanton."
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "La uzanto ne estas blokita de grupo."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "La uzanto ne havas profilon."
-
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "Neniu ensalutad-ĵetono bezoniĝas."
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "Malaboni"
-
-#: actions/updateprofile.php:64 actions/userauthorization.php:337
-#, fuzzy, php-format
-msgid ""
-"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr "Aviza permesilo ‘%1$s’ ne konformas al reteja permesilo ‘%2$s’."
-
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
 msgctxt "TITLE"
 msgid "User"
 msgstr "Uzanto"
 
-#: actions/useradminpanel.php:70
-#, fuzzy
-msgid "User settings for this StatusNet site."
-msgstr "Aspektaj agordoj por ĉi tiu StatusNet-retejo."
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
 
 #: actions/useradminpanel.php:155
 msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Nevalida bonvena teksto. La longlimo estas 225 literoj."
 
 #: actions/useradminpanel.php:165
 #, php-format
 msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Nevalida defaŭlta abono: '%1$s' ne estas uzanto."
 
 #. TRANS: Link description in user account settings menu.
 #: actions/useradminpanel.php:218 lib/accountsettingsaction.php:111
@@ -4539,54 +4204,47 @@ msgstr "Profilo"
 
 #: actions/useradminpanel.php:222
 msgid "Bio Limit"
-msgstr ""
+msgstr "Longlimo de biografio"
 
 #: actions/useradminpanel.php:223
 msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Longlimo de profila biografio, je literoj"
 
 #: actions/useradminpanel.php:231
-#, fuzzy
 msgid "New users"
-msgstr "Inviti novajn uzantojn"
+msgstr "Novuloj"
 
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
-msgstr ""
+msgstr "Bonveno al novuloj"
 
 #: actions/useradminpanel.php:236
-#, fuzzy
 msgid "Welcome text for new users (Max 255 chars)."
-msgstr "La nomo estas tro longa (maksimume 255 literoj)"
+msgstr "Bonvena teksto al novaj uzantoj (apenaŭ 255 literoj)."
 
 #: actions/useradminpanel.php:241
-#, fuzzy
 msgid "Default subscription"
-msgstr "Priskribo"
+msgstr "Defaŭlta abono"
 
 #: actions/useradminpanel.php:242
-#, fuzzy
 msgid "Automatically subscribe new users to this user."
-msgstr "Aŭtomate aboni iun ajn, kiu abonas min (prefereble por ne-homoj)"
+msgstr "Aŭtomate aboni novajn uzantojn al ĉi tiu uzanto."
 
 #: actions/useradminpanel.php:251
-#, fuzzy
 msgid "Invitations"
-msgstr "Invito(j) senditas"
+msgstr "Invitoj"
 
 #: actions/useradminpanel.php:256
-#, fuzzy
 msgid "Invitations enabled"
-msgstr "Invito(j) senditas"
+msgstr "Invito ebliĝis"
 
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
-msgstr ""
+msgstr "Ĉu permesi al uzantoj inviti novan uzantojn."
 
 #: actions/userauthorization.php:105
-#, fuzzy
 msgid "Authorize subscription"
-msgstr "Priskribo"
+msgstr "Rajtigi abonon"
 
 #: actions/userauthorization.php:110
 msgid ""
@@ -4594,6 +4252,8 @@ msgid ""
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
+"Bonvolu kontroli la detalojn por certigi ĉu vi deziras aboni la avizoj de ĉi "
+"tiu uzanto. Se ne simple alklaku “Rifuzi\"."
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4605,28 +4265,24 @@ msgstr "Akcepti"
 
 #: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
-#, fuzzy
 msgid "Subscribe to this user"
-msgstr "Forigi la uzanton"
+msgstr "Aboni la uzanton"
 
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Malakcepti"
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "Forigi la uzanton"
+msgstr "Rifuzi la abonon"
 
 #: actions/userauthorization.php:232
-#, fuzzy
 msgid "No authorization request!"
-msgstr "Neniu ensalutad-ĵetono bezoniĝas."
+msgstr "Ne bezonas permesado!"
 
 #: actions/userauthorization.php:254
-#, fuzzy
 msgid "Subscription authorized"
-msgstr "Vi ne estas rajtigita."
+msgstr "Abono permesiĝis"
 
 #: actions/userauthorization.php:256
 msgid ""
@@ -4634,11 +4290,12 @@ msgid ""
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
+"La abono permesiĝis, sed ne pasiĝis revoka URL. Legu gvidon de la retejo pro "
+"detaloj pri kiel rajtigi abonon. Via abono-ĵetono jenas:"
 
 #: actions/userauthorization.php:266
-#, fuzzy
 msgid "Subscription rejected"
-msgstr "Priskribo necesas."
+msgstr "Abono rifuziĝis"
 
 #: actions/userauthorization.php:268
 msgid ""
@@ -4646,77 +4303,77 @@ msgid ""
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
+"La abono rifuziĝis sed ne pasiĝis revoka URL. Legu gvidon de la retejo pro "
+"detaloj pri kiel rajtigi abonon. Via abono-ĵetono jenas:"
 
 #: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
-msgstr ""
+msgstr "URL de aboninto ‘%s’ ne troviĝas tie ĉi."
 
 #: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
+msgstr "URL de abonito ‘%s’ tro longas."
 
 #: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
-msgstr ""
+msgstr "URL de abonito ‘%s’ estas de loka uzanto."
 
 #: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
+msgstr "Profila URL ‘%s’ estas de loka uzanto."
 
 #: actions/userauthorization.php:345
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar URL ‘%s’ is not valid."
-msgstr "Revokfunkcia URL estas nevalida."
+msgstr "Vizaĝbilda URL ‘%s' ne estas valida."
 
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr ""
+msgstr "Malsukcesis legi vizaĝbildan URL ‘%s’."
 
 #: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr ""
+msgstr "Malĝusta bildotipo por vizaĝbilda URL ‘%s'."
 
 #: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
 msgid "Profile design"
-msgstr "Vidi profilo-desegnon"
+msgstr "Profila desegno"
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
-#, fuzzy
 msgid ""
 "Customize the way your profile looks with a background image and a colour "
 "palette of your choice."
-msgstr "Agordi kiel aspektu via grupo, kun elekto de fonbildo kaj koloraro."
+msgstr "Agodi kiel aspektu via profilo, per elekto de fonbildo kaj koloraro."
 
 #: actions/userdesignsettings.php:282
 msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Ĝuu vian kolbasobulkon!"
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "%1$s grupanoj, paĝo %2$d"
+msgstr "Grupoj %1$s, paĝo %2$d"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
-msgstr ""
+msgstr "Serĉi pli da grupoj"
 
 #: actions/usergroups.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not a member of any group."
-msgstr "La uzanto ne estas grupano."
+msgstr "%S ne estas ano de iu ajn grupo."
 
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
-msgstr ""
+msgstr "Provu [serĉi grupojn](%%*action.*groupsearch%%) kaj aniĝi."
 
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle in atom group notice feed.
@@ -4725,14 +4382,14 @@ msgstr ""
 #. TRANS: %1$s is a user name, %2$s is a site name.
 #: actions/userrss.php:97 lib/atomgroupnoticefeed.php:70
 #: lib/atomusernoticefeed.php:76
-#, fuzzy, php-format
+#, php-format
 msgid "Updates from %1$s on %2$s!"
-msgstr "Ŝatataj Ĝisdatiĝoj de %1$s ĉe %2$s!"
+msgstr "Ĝisdatiĝoj de %1$s ĉe %2$s!"
 
 #: actions/version.php:75
 #, php-format
 msgid "StatusNet %s"
-msgstr ""
+msgstr "StatusNet %s"
 
 #: actions/version.php:155
 #, php-format
@@ -4740,6 +4397,8 @@ msgid ""
 "This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
 "Inc. and contributors."
 msgstr ""
+"La retejon ebligis %1$s de versio %2$s, aŭtorrajto 2008-2010 StatusNet, Inc. "
+"kaj kontribuintoj."
 
 #: actions/version.php:163
 msgid "Contributors"
@@ -4752,6 +4411,10 @@ msgid ""
 "Software Foundation, either version 3 of the License, or (at your option) "
 "any later version. "
 msgstr ""
+"StatusNet estas libera molvaro: vi rajtas redistribui ĝin kaj/aŭ modifi ĝin "
+"sub la condiĉoj de la GNU-a Affero Ĝenerala Publika Licenco kiel eldonite de "
+"la Fundamento por Libera-Molvaro. Kaj versio 3 de la Licenco kaj (viaelekte) "
+"ĉiu posta versio taŭgas. "
 
 #: actions/version.php:176
 msgid ""
@@ -4760,6 +4423,9 @@ msgid ""
 "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License "
 "for more details. "
 msgstr ""
+"Ĉi tiu programo distribuiĝis kun espero ke ĝi estus utila, sed SEN AJNA "
+"GARANTIO; ne eĉ suba garantio de FUNKCIPOVO aŭ TAŬGECO POR IU CERTA CELO. "
+"Legu la GNU Affero Ĝenerala Publika Licenco pro pli da detaloj. "
 
 #: actions/version.php:182
 #, php-format
@@ -4767,10 +4433,12 @@ msgid ""
 "You should have received a copy of the GNU Affero General Public License "
 "along with this program.  If not, see %s."
 msgstr ""
+"Vi laŭe jam ricevis eldonon de GNU-a Affero Ĝenerala Publika Licenco. "
+"Nekaze, legu %s."
 
 #: actions/version.php:191
 msgid "Plugins"
-msgstr ""
+msgstr "Kromprogramo"
 
 #. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
 #: actions/version.php:198 lib/action.php:789
@@ -4785,12 +4453,12 @@ msgstr "Aŭtoro(j)"
 #: classes/File.php:143
 #, php-format
 msgid "Cannot process URL '%s'"
-msgstr ""
+msgstr "Malsukcesis trakti URL '%s'"
 
 #. TRANS: Server exception thrown when... Robin thinks something is impossible!
 #: classes/File.php:175
 msgid "Robin thinks something is impossible."
-msgstr ""
+msgstr "Robin pensas ke io neeblas."
 
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
@@ -4800,80 +4468,28 @@ msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
+"Grandlimo por sendota dosiero estas %1$d bajtoj, tamen tio, kion vi volis "
+"sendi grandas %2$d bajtojn. Provu per versio pli malgranda."
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
 #: classes/File.php:202
 #, php-format
 msgid "A file this large would exceed your user quota of %d bytes."
-msgstr ""
+msgstr "Dosiero tiel granda superos vian uzantan kvoton kun %d bajtoj."
 
 #. TRANS: Message given id an upload would exceed a user's monthly quota.
 #. TRANS: $d (number) is the monthly user quota in bytes.
 #: classes/File.php:211
 #, php-format
 msgid "A file this large would exceed your monthly quota of %d bytes."
-msgstr ""
-
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Grando nevalida."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Grupo ne troviĝas."
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Malsukcesis ĝisdatigi grupon."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Malsukcesis alŝuti"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Malsukcesis ĝisdatigi grupon."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Malsukcesis krei alinomon."
+msgstr "Dosiero tiel granda superos vian monatan kvoton kun %d bajtoj."
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-msgid "You are banned from sending direct messages."
-msgstr ""
-
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-#, fuzzy
-msgid "Could not insert message."
-msgstr "Malsukcesis trovi celan uzanton."
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-#, fuzzy
-msgid "Could not update message with new URI."
-msgstr "Malsukcesis ĝisdatigi uzanton"
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4881,60 +4497,42 @@ msgstr "Malsukcesis ĝisdatigi uzanton"
 msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
-#. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
-msgid "Database error inserting hashtag: %s"
-msgstr "Datumbaza eraro enigi la uzanton de *OAuth-aplikaĵo."
-
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr ""
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-#, fuzzy
-msgid "You are banned from posting notices on this site."
-msgstr "Vi ne rajtas doni al uzanto rolon ĉe ĉi tiu retejo."
-
-#. TRANS: Server exception thrown when a notice cannot be saved.
-#. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
-msgid "Problem saving notice."
-msgstr ""
-
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4953,60 +4551,6 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "La uzanto ne havas profilon."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Malsukcesis konservi vian desegnan agordon"
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Tiu uzanto abonblokis vin."
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-#, fuzzy
-msgid "Already subscribed!"
-msgstr "Abonita"
-
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-#, fuzzy
-msgid "User has blocked you."
-msgstr "La uzanto ne estas blokita de grupo."
-
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Abonita"
-
-#. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
-#: classes/Subscription.php:178
-#, fuzzy
-msgid "Could not delete self-subscription."
-msgstr "Malsukcesis forigi ŝataton."
-
-#. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
-#: classes/Subscription.php:206
-#, fuzzy
-msgid "Could not delete subscription OMB token."
-msgstr "Malsukcesis forigi ŝataton."
-
-#. TRANS: Exception thrown when a subscription could not be deleted on the server.
-#: classes/Subscription.php:218
-#, fuzzy
-msgid "Could not delete subscription."
-msgstr "Malsukcesis forigi ŝataton."
-
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
 #: classes/User.php:365
@@ -5014,65 +4558,11 @@ msgstr "Malsukcesis forigi ŝataton."
 msgid "Welcome to %1$s, @%2$s!"
 msgstr "Bonvenon al %1$s, @%2$s!"
 
-#. TRANS: Server exception thrown when creating a group failed.
-#: classes/User_group.php:496
-#, fuzzy
-msgid "Could not create group."
-msgstr "Malsukcesis ĝisdatigi grupon."
-
-#. TRANS: Server exception thrown when updating a group URI failed.
-#: classes/User_group.php:506
-#, fuzzy
-msgid "Could not set group URI."
-msgstr "Malsukcesis ĝisdatigi grupon."
-
-#. TRANS: Server exception thrown when setting group membership failed.
-#: classes/User_group.php:529
-#, fuzzy
-msgid "Could not set group membership."
-msgstr "Malsukcesis ĝisdatigi grupon."
-
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "Malsukcesis konservi la profilon."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:109
-#, fuzzy
-msgid "Change your profile settings"
-msgstr "Profila agordo"
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "Eraris ĝisdatigi vizaĝbildon."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:123
-#, fuzzy
-msgid "Change your password"
-msgstr "Ŝanĝi vian pasvorton."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "La uzanto ne havas profilon."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-#, fuzzy
-msgid "Other options"
-msgstr "Aliaj agordoj"
-
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
@@ -5089,12 +4579,6 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr ""
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-#, fuzzy
-msgid "Primary site navigation"
-msgstr "Ŝanĝi agordojn de la retejo"
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -5107,13 +4591,6 @@ msgctxt "MENU"
 msgid "Personal"
 msgstr "Persona"
 
-#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change your email, avatar, password, profile"
-msgstr "Ŝanĝi vian pasvorton."
-
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
 msgctxt "TOOLTIP"
@@ -5135,7 +4612,7 @@ msgstr "Ŝanĝi agordojn de la retejo"
 #: lib/action.php:461
 msgctxt "MENU"
 msgid "Admin"
-msgstr "Administranto"
+msgstr "Administri"
 
 #. TRANS: Tooltip for main menu option "Invite"
 #: lib/action.php:465
@@ -5150,13 +4627,6 @@ msgctxt "MENU"
 msgid "Invite"
 msgstr "Inviti"
 
-#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:474
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Logout from the site"
-msgstr "Desegno por la retejo"
-
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
 msgctxt "MENU"
@@ -5175,19 +4645,6 @@ msgctxt "MENU"
 msgid "Register"
 msgstr "Registriĝi"
 
-#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:488
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Login to the site"
-msgstr "Ensaluti al la retejo"
-
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Ensaluti"
-
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
 msgctxt "TOOLTIP"
@@ -5199,36 +4656,6 @@ msgctxt "MENU"
 msgid "Help"
 msgstr "Helpo"
 
-#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:500
-msgctxt "TOOLTIP"
-msgid "Search for people or text"
-msgstr ""
-
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Homserĉo"
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Nova avizo"
-
-#. TRANS: DT element for local views block. String is hidden in default CSS.
-#: lib/action.php:592
-msgid "Local views"
-msgstr ""
-
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Nova avizo"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
 msgid "Secondary site navigation"
@@ -5301,19 +4728,6 @@ msgid ""
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "Licenco de la programaro StatusNet"
-
-#. TRANS: Content license displayed when license is set to 'private'.
-#. TRANS: %1$s is the site name.
-#: lib/action.php:857
-#, php-format
-msgid "Content and data of %1$s are private and confidential."
-msgstr ""
-
 #. TRANS: Content license displayed when license is set to 'allrightsreserved'.
 #. TRANS: %1$s is the copyright owner.
 #: lib/action.php:864
@@ -5332,12 +4746,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-#, fuzzy
-msgid "Pagination"
-msgstr "Registrado"
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5367,149 +4775,27 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Vi ne rajtas doni al uzanto rolon ĉe ĉi tiu retejo."
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Registriĝo ne permesita."
-
 #. TRANS: Client error message.
 #: lib/adminpanelaction.php:229
 msgid "showForm() not implemented."
 msgstr ""
 
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-msgid "saveSettings() not implemented."
-msgstr ""
-
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Malsukcesis konservi vian desegnan agordon"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
-#, fuzzy
 msgctxt "MENU"
 msgid "Site"
 msgstr "Retejo"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-#, fuzzy
-msgctxt "MENU"
-msgid "Design"
-msgstr "Aspekto"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "Uzanto"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Forigi avizon"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Ŝanĝi agordojn de la retejo"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-#, fuzzy
-msgid "Edit application"
-msgstr "Redakti Aplikon"
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-#, fuzzy
-msgid "Icon for this application"
-msgstr "Ne forigu ĉi tiun aplikaĵon."
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, fuzzy, php-format
-msgid "Describe your application in %d characters"
-msgstr "Priskribu vin mem kaj viajn ŝatokupojn per ne pli ol %d signoj"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:213
-#, fuzzy
-msgid "Describe your application"
-msgstr "Forigi aplikaĵon"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "Vi ne estas la posedanto de ĉi tiu aplikaĵo."
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Fontkodo"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-#, fuzzy
-msgid "Organization responsible for this application"
-msgstr "Vi ne estas la posedanto de ĉi tiu aplikaĵo."
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
 msgid "URL for the homepage of the organization"
@@ -5550,12 +4836,6 @@ msgstr ""
 msgid "Default access for this application: read-only, or read-write"
 msgstr ""
 
-#. TRANS: Submit button title
-#: lib/applicationeditform.php:359
-#, fuzzy
-msgid "Cancel"
-msgstr "Nuligi"
-
 #. TRANS: Application access type
 #: lib/applicationlist.php:136
 msgid "read-write"
@@ -5572,103 +4852,29 @@ msgstr ""
 msgid "Approved %1$s - \"%2$s\" access."
 msgstr ""
 
-#. TRANS: Button label
-#: lib/applicationlist.php:159
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Revoke"
-msgstr "Forigi"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-#, fuzzy
-msgid "Attachments"
-msgstr "Ne estas aldonaĵo."
-
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:265
-#, fuzzy
-msgid "Author"
-msgstr "Aŭtoro(j)"
-
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:279
-#, fuzzy
-msgid "Provider"
-msgstr "Antaŭrigardo"
-
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-#, fuzzy
-msgid "Tags for this attachment"
-msgstr "Ne estas tiu aldonaĵo."
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Pasvorta ŝanĝo"
-
-#: lib/authenticationplugin.php:236
-#, fuzzy
-msgid "Password changing is not allowed"
-msgstr "Pasvorta ŝanĝo"
-
-#: lib/channel.php:157 lib/channel.php:177
-#, fuzzy
-msgid "Command results"
-msgstr "Neniu rezulto."
-
 #: lib/channel.php:229 lib/mailhandler.php:142
 msgid "Command complete"
 msgstr ""
 
-#: lib/channel.php:240
-#, fuzzy
-msgid "Command failed"
-msgstr "Malsukcesis alŝuti"
-
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "La uzanto ne havas profilon."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Malsukcesis trovi celan uzanton."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr ""
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Puŝeto sendiĝis"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5676,57 +4882,8 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
-#, fuzzy
-msgid "Notice marked as fave."
-msgstr "Ĉi tiu avizo jam estas ŝatata."
-
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "Vi estas jam grupano."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "La uzanto %1$*s ne povas aliĝi al la grupo %2$*s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Malsukcesis forigi uzanton %1$s de grupo %2$s."
-
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "Plena nomo"
-
-#. TRANS: Whois output. %s is the location of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, fuzzy, php-format
-msgid "Location: %s"
-msgstr "Loko"
-
-#. TRANS: Whois output. %s is the homepage of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
-#, fuzzy, php-format
-msgid "Homepage: %s"
-msgstr "Hejmpaĝo"
-
-#. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
-#, fuzzy, php-format
-msgid "About: %s"
-msgstr "Enkonduko"
-
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5735,153 +4892,63 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, fuzzy, php-format
-msgid "Direct message to %s sent"
-msgstr "Rekta mesaĝo al %s sendiĝis."
-
-#: lib/command.php:494
-msgid "Error sending direct message."
-msgstr ""
-
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Vi ne povas ripeti vian propran avizon."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "La avizo jam ripetiĝis."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Avizo afiŝiĝas"
-
-#: lib/command.php:531
-#, fuzzy
-msgid "Error repeating notice."
-msgstr "Eraro je ĝisdatigo de fora profilo."
-
-#: lib/command.php:562
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Ripetita al %s"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Eraris konservi uzanton: nevalida."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr ""
-
-#: lib/command.php:628
-msgid "Can't subscribe to OMB profiles by command."
-msgstr ""
-
-#: lib/command.php:634
-#, fuzzy, php-format
-msgid "Subscribed to %s"
-msgstr "Abonita"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr ""
-
-#: lib/command.php:664
-#, fuzzy, php-format
-msgid "Unsubscribed from %s"
-msgstr "Malaboni"
-
-#: lib/command.php:682 lib/command.php:705
-msgid "Command not yet implemented."
-msgstr ""
-
-#: lib/command.php:685
-#, fuzzy
-msgid "Notification off."
-msgstr "Neniu konfirma kodo."
-
-#: lib/command.php:687
-msgid "Can't turn off notification."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:708
-#, fuzzy
-msgid "Notification on."
-msgstr "Neniu konfirma kodo."
-
-#: lib/command.php:710
-#, fuzzy
-msgid "Can't turn on notification."
-msgstr "Vi ne povas ripeti vian propran avizon."
-
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
+msgid "Error sending direct message."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Malaboni"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
+msgstr ""
 
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Vi ne estas rajtigita."
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
 
-#: lib/command.php:780
-#, fuzzy
-msgid "You are subscribed to this person:"
-msgid_plural "You are subscribed to these people:"
-msgstr[0] "Vi jam abonas jenajn uzantojn:"
-msgstr[1] "Vi jam abonas jenajn uzantojn:"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
+msgstr ""
 
-#: lib/command.php:800
-msgid "No one is subscribed to you."
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
+msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:802
-msgid "This person is subscribed to you:"
-msgid_plural "These people are subscribed to you:"
-msgstr[0] ""
-msgstr[1] ""
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
+msgid "Can't turn off notification."
+msgstr ""
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Vi ne estas grupano."
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
+msgstr ""
 
-#: lib/command.php:824
-#, fuzzy
-msgid "You are a member of this group:"
-msgid_plural "You are a member of these groups:"
-msgstr[0] "Vi ne estas grupano."
-msgstr[1] "Vi ne estas grupano."
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
+#, php-format
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
+msgstr ""
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5923,11 +4990,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Neniu konfirma kodo."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5952,46 +5014,10 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Konekti"
-
-#: lib/connectsettingsaction.php:121
-#, fuzzy
-msgid "Authorized connected applications"
-msgstr "Konektita aplikaĵo"
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Malsukcesis alŝuti"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Vi povas alŝuti vian personan vizaĝbildon. Dosiero-grandlimo estas %s."
-
-#: lib/designsettings.php:418
-#, fuzzy
-msgid "Design defaults restored."
-msgstr "Desegna agordo konservita."
-
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
-msgid "Disfavor this notice"
-msgstr "Forigi la avizon"
-
-#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
-msgid "Favor this notice"
-msgstr "Forigi la avizon"
-
 #: lib/favorform.php:140
 msgid "Favor"
 msgstr ""
@@ -6020,20 +5046,10 @@ msgstr ""
 msgid "Filter tags"
 msgstr ""
 
-#: lib/galleryaction.php:131
-#, fuzzy
-msgid "All"
-msgstr "Permesi"
-
 #: lib/galleryaction.php:139
 msgid "Select tag to filter"
 msgstr ""
 
-#: lib/galleryaction.php:140
-#, fuzzy
-msgid "Tag"
-msgstr "Markiloj"
-
 #: lib/galleryaction.php:141
 msgid "Choose a tag to narrow list"
 msgstr ""
@@ -6047,56 +5063,15 @@ msgstr "Iri"
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr "URL de via hejmpaĝo, blogo aŭ profilo ĉe alia retejo"
-
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
 msgstr ""
 
-#: lib/groupeditform.php:170
-#, fuzzy, php-format
-msgid "Describe the group or topic in %d characters"
-msgstr "Priskribu vin mem kaj viajn ŝatokupojn per ne pli ol %d signoj"
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "Kie vi estas, ekzemple \"Urbo, Ŝtato (aŭ Regiono), Lando\""
-
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
-#: lib/groupnav.php:85
-#, fuzzy
-msgid "Group"
-msgstr "Grupoj"
-
-#: lib/groupnav.php:101
-#, fuzzy
-msgid "Blocked"
-msgstr "Bloki"
-
-#: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "%s profiloj blokitaj"
-
-#: lib/groupnav.php:108
-#, fuzzy, php-format
-msgid "Edit %s group properties"
-msgstr "Redakti %s grupon"
-
-#: lib/groupnav.php:113
-#, fuzzy
-msgid "Logo"
-msgstr " Elsaluti"
-
 #: lib/groupnav.php:114
 #, php-format
 msgid "Add or edit %s logo"
@@ -6107,11 +5082,6 @@ msgstr ""
 msgid "Add or edit %s design"
 msgstr ""
 
-#: lib/groupsbymemberssection.php:71
-#, fuzzy
-msgid "Groups with most members"
-msgstr "%s grupanoj"
-
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
 msgstr ""
@@ -6126,22 +5096,6 @@ msgstr ""
 msgid "This page is not available in a media type you accept"
 msgstr ""
 
-#: lib/imagefile.php:72
-#, fuzzy
-msgid "Unsupported image file format."
-msgstr "Formato ne subtenata."
-
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr ""
-"Vi povas alŝuti emblemo-bildon por via grupo. Dosiero-grandlimo estas $s."
-
-#: lib/imagefile.php:93
-#, fuzzy
-msgid "Partial upload."
-msgstr "Neniu dosiero alŝutiĝas."
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -6150,11 +5104,6 @@ msgstr ""
 msgid "Not an image or corrupt file."
 msgstr ""
 
-#: lib/imagefile.php:122
-#, fuzzy
-msgid "Lost our file."
-msgstr "Perdiĝis nia dosiera datumo."
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr ""
@@ -6172,35 +5121,14 @@ msgstr ""
 msgid "[%s]"
 msgstr ""
 
-#: lib/jabber.php:567
-#, php-format
-msgid "Unknown inbox source %d."
-msgstr ""
-
-#: lib/joinform.php:114
-#, fuzzy
-msgid "Join"
-msgstr "Ensaluti"
-
 #: lib/leaveform.php:114
 msgid "Leave"
 msgstr "Forlasi"
 
-#: lib/logingroupnav.php:80
-#, fuzzy
-msgid "Login with a username and password"
-msgstr "Ensaluti per via uzantnomo kaj pasvorto."
-
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
 msgstr ""
 
-#. TRANS: Subject for address confirmation email
-#: lib/mail.php:174
-#, fuzzy
-msgid "Email address confirmation"
-msgstr "Retpoŝtadreso"
-
 #. TRANS: Body for address confirmation email.
 #: lib/mail.php:177
 #, php-format
@@ -6219,12 +5147,6 @@ msgid ""
 "%s\n"
 msgstr ""
 
-#. TRANS: Subject of new-subscriber notification e-mail
-#: lib/mail.php:243
-#, fuzzy, php-format
-msgid "%1$s is now listening to your notices on %2$s."
-msgstr "%1$s invitis vin kunaliĝi ĉe %2$s"
-
 #: lib/mail.php:248
 #, php-format
 msgid ""
@@ -6248,18 +5170,6 @@ msgid ""
 "Change your email address or notification options at %8$s\n"
 msgstr ""
 
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "Biografio"
-
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, fuzzy, php-format
-msgid "New email address for posting to %s"
-msgstr "Krei novan retpoŝtadreson por afiŝado kaj nuligi la antaŭan."
-
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
 #, php-format
@@ -6274,18 +5184,6 @@ msgid ""
 "%4$s"
 msgstr ""
 
-#. TRANS: Subject line for SMS-by-email notification messages
-#: lib/mail.php:433
-#, fuzzy, php-format
-msgid "%s status"
-msgstr "Stato de %1$s ĉe %2$s"
-
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-#, fuzzy
-msgid "SMS confirmation"
-msgstr "Neniu konfirma kodo."
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6315,12 +5213,6 @@ msgid ""
 "%4$s\n"
 msgstr ""
 
-#. TRANS: Subject for direct-message notification email
-#: lib/mail.php:536
-#, fuzzy, php-format
-msgid "New private message from %s"
-msgstr "Rektaj mesaĝoj de %s"
-
 #. TRANS: Body for direct-message notification email
 #: lib/mail.php:541
 #, php-format
@@ -6341,12 +5233,6 @@ msgid ""
 "%5$s\n"
 msgstr ""
 
-#. TRANS: Subject for favorite notification email
-#: lib/mail.php:589
-#, fuzzy, php-format
-msgid "%s (@%s) added your notice as a favorite"
-msgstr "Sendu al mi mesaĝon tiam, kiam iu ŝatas mian avizon ."
-
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
 #, php-format
@@ -6411,10 +5297,6 @@ msgid ""
 "P.S. You can turn off these email notifications here: %8$s\n"
 msgstr ""
 
-#: lib/mailbox.php:89
-msgid "Only the user can read their own mailboxes."
-msgstr ""
-
 #: lib/mailbox.php:139
 msgid ""
 "You have no private messages. You can send private message to engage other "
@@ -6425,30 +5307,6 @@ msgstr ""
 msgid "from"
 msgstr ""
 
-#: lib/mailhandler.php:37
-#, fuzzy
-msgid "Could not parse message."
-msgstr "Malsukcesis ĝisdatigi uzanton"
-
-#: lib/mailhandler.php:42
-msgid "Not a registered user."
-msgstr ""
-
-#: lib/mailhandler.php:46
-#, fuzzy
-msgid "Sorry, that is not your incoming email address."
-msgstr "Tiu ne estas via retpoŝtadreso."
-
-#: lib/mailhandler.php:50
-#, fuzzy
-msgid "Sorry, no incoming email allowed."
-msgstr "Ne estas alvena retpoŝtadreso"
-
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Formato ne subtenata."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6487,11 +5345,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
-msgid "Could not determine file's MIME type."
-msgstr " Malsukcesis certigi fontan uzanton."
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6502,63 +5355,42 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-#, fuzzy
-msgid "Send a direct notice"
-msgstr "Forigi avizon"
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr "Al"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Haveblaj karakteroj"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Sendi"
 
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "Nova avizo"
-
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr ""
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr ""
 
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "Ne forigu ĉi tiun aplikaĵon."
-
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-#, fuzzy
-msgid "N"
-msgstr "Ne"
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6583,157 +5415,24 @@ msgstr ""
 msgid "at"
 msgstr "al"
 
-#: lib/noticelist.php:568
-#, fuzzy
-msgid "in context"
-msgstr "Neniu enhavo!"
-
-#: lib/noticelist.php:603
-#, fuzzy
-msgid "Repeated by"
-msgstr "Ripetita"
-
-#: lib/noticelist.php:630
-#, fuzzy
-msgid "Reply to this notice"
-msgstr "Forigi la avizon"
-
-#: lib/noticelist.php:631
-msgid "Reply"
-msgstr ""
-
-#: lib/noticelist.php:675
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Avizo viŝiĝas"
-
-#: lib/nudgeform.php:116
-#, fuzzy
-msgid "Nudge this user"
-msgstr "Forigi la uzanton"
-
-#: lib/nudgeform.php:128
-#, fuzzy
-msgid "Nudge"
-msgstr "Puŝeto sendiĝis"
-
-#: lib/nudgeform.php:128
-#, fuzzy
-msgid "Send a nudge to this user"
-msgstr "Vi ne povas sendi mesaĝon al la uzanto."
-
-#: lib/oauthstore.php:283
-#, fuzzy
-msgid "Error inserting new profile"
-msgstr "Eraro je ĝisdatigo de fora profilo."
-
-#: lib/oauthstore.php:291
-#, fuzzy
-msgid "Error inserting avatar"
-msgstr "Eraris konservi uzanton: nevalida."
-
-#: lib/oauthstore.php:306
-#, fuzzy
-msgid "Error updating remote profile"
-msgstr "Eraro je ĝisdatigo de fora profilo."
-
-#: lib/oauthstore.php:311
-#, fuzzy
-msgid "Error inserting remote profile"
-msgstr "Eraro je ĝisdatigo de fora profilo."
-
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Forigi avizon"
-
-#: lib/oauthstore.php:490
-#, fuzzy
-msgid "Couldn't insert new subscription."
-msgstr "Malsukcesis enmeti konfirmkodon."
-
-#: lib/personalgroupnav.php:99
-#, fuzzy
-msgid "Personal"
-msgstr "Persona"
-
-#: lib/personalgroupnav.php:104
-msgid "Replies"
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/personalgroupnav.php:114
-#, fuzzy
-msgid "Favorites"
-msgstr "Aldoni al ŝatolisto"
-
 #: lib/personalgroupnav.php:125
 msgid "Inbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:126
-#, fuzzy
-msgid "Your incoming messages"
-msgstr "Ne estas alvena retpoŝtadreso"
-
-#: lib/personalgroupnav.php:130
-#, fuzzy
-msgid "Outbox"
-msgstr "Elirkesto de %s"
-
-#: lib/personalgroupnav.php:131
-#, fuzzy
-msgid "Your sent messages"
-msgstr "Persona mesaĝo"
-
 #: lib/personaltagcloudsection.php:56
 #, php-format
 msgid "Tags in %s's notices"
 msgstr ""
 
-#: lib/plugin.php:115
-msgid "Unknown"
-msgstr ""
-
-#: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
-#, fuzzy
-msgid "Subscriptions"
-msgstr "Priskribo"
-
-#: lib/profileaction.php:126
-#, fuzzy
-msgid "All subscriptions"
-msgstr "Priskribo"
-
-#: lib/profileaction.php:144 lib/profileaction.php:214 lib/subgroupnav.php:90
-#, fuzzy
-msgid "Subscribers"
-msgstr "Aboni"
-
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "Malaboni"
-
-#: lib/profileaction.php:191
-#, fuzzy
-msgid "User ID"
-msgstr "Uzanto"
-
-#: lib/profileaction.php:196
-#, fuzzy
-msgid "Member since"
-msgstr "Grupanoj"
-
 #. TRANS: Average count of posts made per day since account registration
 #: lib/profileaction.php:235
 msgid "Daily average"
 msgstr ""
 
-#: lib/profileaction.php:264
-#, fuzzy
-msgid "All groups"
-msgstr "Grupoj de %s"
-
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
 msgstr ""
@@ -6750,40 +5449,10 @@ msgstr "Uzantaj grupoj"
 msgid "Recent tags"
 msgstr "Freŝaj etikedoj"
 
-#: lib/publicgroupnav.php:88
-#, fuzzy
-msgid "Featured"
-msgstr "Elstaraj uzantoj"
-
-#: lib/publicgroupnav.php:92
-#, fuzzy
-msgid "Popular"
-msgstr "Populara avizo"
-
-#: lib/redirectingaction.php:95
-#, fuzzy
-msgid "No return-to arguments."
-msgstr "Ne estas aldonaĵo."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Forigi la avizon"
-
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Jes"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Forigi la avizon"
-
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "Bloki la uzanton de la grupo"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
@@ -6792,11 +5461,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr ""
 
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Malbloki ĉi tiun uzanton"
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr ""
@@ -6805,20 +5469,10 @@ msgstr ""
 msgid "Keyword(s)"
 msgstr ""
 
-#: lib/searchaction.php:127
-#, fuzzy
-msgid "Search"
-msgstr "Homserĉo"
-
 #: lib/searchaction.php:162
 msgid "Search help"
 msgstr ""
 
-#: lib/searchgroupnav.php:80
-#, fuzzy
-msgid "People"
-msgstr "Homserĉo"
-
 #: lib/searchgroupnav.php:81
 msgid "Find people on this site"
 msgstr ""
@@ -6827,11 +5481,6 @@ msgstr ""
 msgid "Find content of notices"
 msgstr ""
 
-#: lib/searchgroupnav.php:85
-#, fuzzy
-msgid "Find groups on this site"
-msgstr "grupoj ĉe %s"
-
 #: lib/section.php:89
 msgid "Untitled section"
 msgstr ""
@@ -6844,36 +5493,6 @@ msgstr "Pli..."
 msgid "Silence"
 msgstr "Silento"
 
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "Forigi la uzanton"
-
-#: lib/subgroupnav.php:83
-#, php-format
-msgid "People %s subscribes to"
-msgstr ""
-
-#: lib/subgroupnav.php:91
-#, php-format
-msgid "People subscribed to %s"
-msgstr ""
-
-#: lib/subgroupnav.php:99
-#, fuzzy, php-format
-msgid "Groups %s is a member of"
-msgstr "Grupoj de %2$s ĉe %1$s."
-
-#: lib/subgroupnav.php:105
-#, fuzzy
-msgid "Invite"
-msgstr "Inviti"
-
-#: lib/subgroupnav.php:106
-#, fuzzy, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "Inviti amikojn kaj kolegojn aliĝi vin sur %s"
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -6884,11 +5503,6 @@ msgstr ""
 msgid "People Tagcloud as tagged"
 msgstr ""
 
-#: lib/tagcloudsection.php:56
-#, fuzzy
-msgid "None"
-msgstr "Noto"
-
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
 msgstr ""
@@ -6897,13 +5511,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Eraris ĝisdatigi vizaĝbildon."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6928,11 +5535,6 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Eraro je ĝisdatigo de fora profilo."
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
@@ -6941,63 +5543,22 @@ msgstr ""
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Malbloki ĉi tiun uzanton"
-
-#: lib/unsilenceform.php:67
-#, fuzzy
-msgid "Unsilence"
-msgstr "Silento"
-
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Malbloki ĉi tiun uzanton"
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-#, fuzzy
-msgid "Unsubscribe from this user"
-msgstr "Malbloki ĉi tiun uzanton"
-
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr "Malaboni"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "La uzanto ne havas profilon."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Vizaĝbildo"
-
 #: lib/userprofile.php:234 lib/userprofile.php:248
-#, fuzzy
 msgid "User actions"
-msgstr "Uzantaj grupoj"
+msgstr "Nekonata ago"
 
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Profila agordo"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr "Redakti"
 
-#: lib/userprofile.php:287
-#, fuzzy
-msgid "Send a direct message to this user"
-msgstr "Vi ne povas sendi mesaĝon al la uzanto."
-
 #: lib/userprofile.php:288
 msgid "Message"
 msgstr "Mesaĝo"
@@ -7006,11 +5567,6 @@ msgstr "Mesaĝo"
 msgid "Moderate"
 msgstr "Moderigi"
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Uzantaj grupoj"
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -7022,72 +5578,38 @@ msgid "Moderator"
 msgstr "Moderanto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "antaŭ kelkaj sekundoj"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "antaŭ ĉirkaŭ unu minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "antaŭ ĉirkaŭ %d minutoj"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "antaŭ ĉirkaŭ unu horo"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "antaŭ ĉirkaŭ %d horoj"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "antaŭ ĉirkaŭ unu tago"
 
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
-#, fuzzy, php-format
-msgid "about %d days ago"
-msgstr "antaŭ ĉirkaŭ unu tago"
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
-#, fuzzy
-msgid "about a month ago"
-msgstr "antaŭ ĉirkaŭ unu minuto"
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
-#, fuzzy, php-format
-msgid "about %d months ago"
-msgstr "antaŭ ĉirkaŭ %d minutoj"
-
-#. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
-#, fuzzy
-msgid "about a year ago"
-msgstr "antaŭ ĉirkaŭ unu tago"
-
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "Ĉefpaĝo ne estas valida URL."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index f7e57911c21c1caf15c6c88b0cf1b9ed86505b92..feba0c19ca43429024cd29b07ac7ced4540ffd39 100644 (file)
@@ -15,12 +15,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:22+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:49+0000\n"
 "Language-Team: Spanish\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: es\n"
 "X-Message-Group: out-statusnet\n"
@@ -95,6 +95,7 @@ msgstr "Guardar"
 msgid "No such page."
 msgstr "No existe tal página."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -114,7 +115,7 @@ msgstr "No existe tal página."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "No existe ese usuario."
@@ -355,7 +356,8 @@ msgstr "No se encontró estado para ese ID"
 msgid "This status is already a favorite."
 msgstr "Este status ya está en favoritos."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "No se pudo crear favorito."
 
@@ -469,15 +471,19 @@ msgstr "El alias no puede ser el mismo que el usuario."
 msgid "Group not found."
 msgstr "Grupo no encontrado."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Ya eres miembro de ese grupo"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Has sido bloqueado de ese grupo por el administrador."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "No se pudo unir el usuario %s al grupo %s"
@@ -486,7 +492,10 @@ msgstr "No se pudo unir el usuario %s al grupo %s"
 msgid "You are not a member of this group."
 msgstr "No eres miembro de este grupo."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "No se pudo eliminar al usuario %1$s del grupo %2$s."
@@ -649,11 +658,13 @@ msgstr "No puedes borrar el estado de otro usuario."
 msgid "No such notice."
 msgstr "No existe ese aviso."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "No puedes repetir tus propias notificaciones."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Esta notificación ya se ha repetido."
 
@@ -669,7 +680,7 @@ msgstr "No hay estado para ese ID"
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "El cliente debe proveer un parámetro de 'status' con un valor."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -679,7 +690,7 @@ msgstr "La entrada es muy larga. El tamaño máximo es de %d caracteres."
 msgid "Not found."
 msgstr "No encontrado."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -796,7 +807,7 @@ msgid "Preview"
 msgstr "Vista previa"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Borrar"
 
@@ -889,6 +900,8 @@ msgstr "Bloquear este usuario."
 msgid "Failed to save block information."
 msgstr "No se guardó información de bloqueo."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -898,8 +911,8 @@ msgstr "No se guardó información de bloqueo."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "No existe ese grupo."
 
@@ -1078,7 +1091,7 @@ msgid "Do not delete this notice"
 msgstr "No eliminar este mensaje"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Borrar este aviso"
 
@@ -2174,7 +2187,7 @@ msgstr "Ya estás suscrito a estos usuarios:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2297,9 +2310,7 @@ msgstr "Debes estar conectado para unirte a un grupo."
 msgid "No nickname or ID."
 msgstr "Ningún nombre de usuario o ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s se ha unido al grupo %2$s"
@@ -2308,13 +2319,12 @@ msgstr "%1$s se ha unido al grupo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Debes estar conectado para dejar un grupo."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "No eres miembro de este grupo."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s ha dejado el grupo %2$s"
@@ -2429,12 +2439,15 @@ msgstr "Usa este formulario para crear un grupo nuevo."
 msgid "New message"
 msgstr "Nuevo Mensaje "
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "No puedes enviar mensaje a este usuario."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "¡Ningún contenido!"
 
@@ -2442,7 +2455,8 @@ msgstr "¡Ningún contenido!"
 msgid "No recipient specified."
 msgstr "No se especificó receptor."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "No te auto envíes un mensaje; dícetelo a ti mismo."
@@ -2451,12 +2465,14 @@ msgstr "No te auto envíes un mensaje; dícetelo a ti mismo."
 msgid "Message sent"
 msgstr "Mensaje enviado"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Se ha enviado un mensaje directo a %s."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Error de Ajax"
 
@@ -2464,7 +2480,7 @@ msgstr "Error de Ajax"
 msgid "New notice"
 msgstr "Nuevo aviso"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Mensaje publicado"
 
@@ -2597,8 +2613,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Solamente %s URLs sobre HTTP simples por favor."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "No es un formato de dato soportado"
 
@@ -3521,7 +3537,7 @@ msgstr "No puedes repetir tus propios mensajes."
 msgid "You already repeated that notice."
 msgstr "Ya has repetido este mensaje."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Repetido"
 
@@ -4935,23 +4951,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "No existe tal perfil (%1$d) para notificar (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Error de la BD al insertar la etiqueta clave: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4959,7 +4975,7 @@ msgstr ""
 "minutos."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4968,29 +4984,29 @@ msgstr ""
 "pasados unos minutos."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Tienes prohibido publicar avisos en este sitio."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Hubo un problema al guardar el aviso."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Mal tipo proveído a saveKnownGroups"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Hubo un problema al guarda la bandeja de entrada del grupo."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5035,12 +5051,6 @@ msgstr "¡Ya te has suscrito!"
 msgid "User has blocked you."
 msgstr "El usuario te ha bloqueado."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "¡No estás suscrito!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
 msgid "Could not delete self-subscription."
@@ -5646,45 +5656,21 @@ msgstr "Comando completo"
 msgid "Command failed"
 msgstr "Comando falló"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "No existe ningún mensaje con ese id"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Usuario no tiene último aviso"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "No se pudo encontrar a nadie con el nombre de usuario %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr ""
-"No se pudo encontrar a ningún usuario local con el nombre de usuario %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Disculpa, todavía no se implementa este comando."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "¡No tiene sentido darte un toque a ti mismo!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Toque enviado a %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5695,55 +5681,39 @@ msgstr ""
 "Suscriptores: %2$s\n"
 "Avisos: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Aviso marcado como favorito."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Ya eres parte de ese grupo"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "No se pudo unir el usuario %s al grupo %s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "No se pudo eliminar al usuario %1$s del grupo %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nombre completo: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Lugar: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Página de inicio: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Sobre: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5754,145 +5724,102 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-"Mensaje muy largo - la cantidad máxima es de %1$d caracteres y has enviado %2"
-"$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Se envió mensaje directo a %s"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Mensaje muy largo - máximo %1$d caracteres, enviaste %2$d"
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Error al enviar mensaje directo."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "No puedes repetir tu propio aviso"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Ya has repetido este aviso"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Aviso de %s repetido"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Ha habido un error al repetir el aviso."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Mensaje muy largo - el máximo es de %d caracteres. Has enviado %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Responder a %s enviados"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Error al guardar el aviso."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Especificar el nombre del usuario a suscribir"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "No te puedes suscribir a perfiles de OMB por orden."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Suscrito a %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Especificar el nombre del usuario para desuscribirse de"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Desuscrito de %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Todavía no se implementa comando."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notificación no activa."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "No se puede desactivar notificación."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notificación activada."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "No se puede activar notificación."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "El comando de inicio de sesión está desactivado"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Este enlace es utilizable solamente una vez y sólo válido por 2 minutos: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Desuscrito de %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "No estás suscrito a nadie."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Ya estás suscrito a estos usuarios:"
 msgstr[1] "Ya estás suscrito a estos usuarios:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Nadie está suscrito a ti."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "No se pudo suscribir otro a ti."
 msgstr[1] "No se pudo suscribir otro a ti."
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "No eres miembro de ningún grupo"
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Eres miembro de este grupo:"
 msgstr[1] "Eres miembro de estos grupos:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6557,7 +6484,7 @@ msgstr ""
 "otros usuarios partícipes de la conversación. La gente puede enviarte "
 "mensajes que sólo puedas leer tú."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "desde"
 
@@ -6647,11 +6574,11 @@ msgstr "Enviar un aviso directo"
 msgid "To"
 msgstr "Para"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caracteres disponibles"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Enviar"
@@ -6660,28 +6587,28 @@ msgstr "Enviar"
 msgid "Send a notice"
 msgstr "Enviar un aviso"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "¿Qué tal, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Adjuntar"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Adjuntar un archivo"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Compartir mi ubicación"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "No compartir mi ubicación"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6718,23 +6645,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "en"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "en contexto"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Repetido por"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Responder este aviso."
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Responder"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Aviso repetido"
 
@@ -6874,7 +6805,7 @@ msgstr "No hay respuesta a los argumentos."
 
 #: lib/repeatform.php:107
 msgid "Repeat this notice?"
-msgstr "Responder este aviso?"
+msgstr "Repetir este aviso?"
 
 #: lib/repeatform.php:132
 msgid "Yes"
@@ -6882,7 +6813,7 @@ msgstr "Sí"
 
 #: lib/repeatform.php:132
 msgid "Repeat this notice"
-msgstr "Responder este aviso."
+msgstr "Repetir este aviso."
 
 #: lib/revokeroleform.php:91
 #, php-format
@@ -7060,11 +6991,6 @@ msgstr "Desuscribirse de este usuario"
 msgid "Unsubscribe"
 msgstr "Cancelar suscripción"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "El usuario %s (%d) no tiene un registro de su perfil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Editar imagen"
@@ -7112,56 +7038,56 @@ msgid "Moderator"
 msgstr "Moderador"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "hace unos segundos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "hace un minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "hace %d minutos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "hace una hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "hace %d horas"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "hace un día"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "hace %d días"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "hace un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "hace %d meses"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "hace un año"
 
@@ -7174,8 +7100,3 @@ msgstr "¡%s no es un color válido!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s no es un color válido! Usar 3 o 6 caracteres hexagesimales"
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Mensaje muy largo - máximo %1$d caracteres, enviaste %2$d"
index c5303e341573657204ff2937d70a978f136dfcfb..1eb68f7ef06a7d14fa7c4bc098c0c23b2b097e3a 100644 (file)
@@ -12,8 +12,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:25+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:59+0000\n"
 "Last-Translator: Ahmad Sufi Mahmudi\n"
 "Language-Team: Persian\n"
 "MIME-Version: 1.0\n"
@@ -22,7 +22,7 @@ msgstr ""
 "X-Language-Code: fa\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 
 #. TRANS: Page title
@@ -94,6 +94,7 @@ msgstr "ذخیره"
 msgid "No such page."
 msgstr "چنین صفحه‌ای وجود ندارد."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -113,7 +114,7 @@ msgstr "چنین صفحه‌ای وجود ندارد."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "چنین کاربری وجود ندارد."
@@ -170,22 +171,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Ø´Ù\85ا Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد [Û\8cادآÙ\88رÛ\8câ\80\8cکردÙ\86 %1$s](../%2$s) Ø±Ø§ Ø§Ø² Ù\86Ù\85اÛ\8cÙ\87â\80\8cاش Ø§Ù\85تحاÙ\86 Ú©Ù\86Û\8cد Û\8cا [بÙ\87 "
-"توجه او چیزی بفرستید](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+"اÙ\88Ù\84Û\8cÙ\86 Ú©Ø³Û\8c Ø¨Ø§Ø´Û\8cد Ú©Ù\87 Ø¯Ø± [اÛ\8cÙ\86 Ù\85Ù\88ضÙ\88ع](%%%%action.newnotice%%%%?status_textarea=%"
+"s) پیام می‌فرستد."
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"چرا [ثبت‌نام](%%%%action.register%%%%) نمی‌کنید و سپس به %s یادآوری کنید یا یک "
-"پیام به توجه‌اش بفرستید."
+"چرا به [باز کردن یک حساب](%%action.register%%) اقدام نمی‌کنید و اولین نفری "
+"باشید که چیزی می‌فرستد!"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -350,7 +351,8 @@ msgstr "هیچ وضعیتی با آن شناسه پیدا نشد."
 msgid "This status is already a favorite."
 msgstr "این پیغام را پیش‌تر به برگزیده‌های خود اضافه کرده‌اید"
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "نمی‌توان پیام را برگزید."
 
@@ -363,9 +365,8 @@ msgid "Could not delete favorite."
 msgstr "نمی‌توان پیام برگزیده را حذف کرد."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "نمی‌توان کاربر را دنبال کرد: کاربر یافت نشد."
+msgstr "نمی‌توان کاربر را دنبال نکرد: کاربر یافت نشد."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -381,9 +382,8 @@ msgid "You cannot unfollow yourself."
 msgstr "نمی‌توانید خودتان را دنبال کنید."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "باید ۲ شناسه‌ی کاربر یا نام ظاهری وارد کنید."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -442,11 +442,6 @@ msgstr "نام مکان خیلی طولانی است (حداکثر ۲۵۵ نوی
 msgid "Too many aliases! Maximum %d."
 msgstr "نام‌های مستعار بسیار زیاد هستند! حداکثر %d."
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "نام‌مستعار غیر مجاز: «%s»"
-
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
 #, php-format
@@ -464,15 +459,19 @@ msgstr "نام و نام مستعار شما نمی تواند یکی باشد .
 msgid "Group not found."
 msgstr "گروه یافت نشد."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "شما از پیش یک عضو این گروه هستید."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "دسترسی شما به گروه توسط مدیر آن محدود شده است."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "نمی‌توان کاربر %1$s را عضو گروه %2$s کرد."
@@ -481,7 +480,10 @@ msgstr "نمی‌توان کاربر %1$s را عضو گروه %2$s کرد."
 msgid "You are not a member of this group."
 msgstr "شما یک عضو این گروه نیستید."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "خارج شدن %s از گروه %s نا موفق بود"
@@ -492,12 +494,6 @@ msgstr "خارج شدن %s از گروه %s نا موفق بود"
 msgid "%s's groups"
 msgstr "گروه‌های %s"
 
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "هست عضو %s گروه"
-
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
@@ -510,11 +506,6 @@ msgstr "%s گروه"
 msgid "groups on %s"
 msgstr "گروه‌ها در %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "بارگذاری پرونده"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "هیچ پارامتر oauth_token آماده نشده است."
@@ -642,11 +633,13 @@ msgstr "شما توانایی حذف وضعیت کاربر دیگری را ند
 msgid "No such notice."
 msgstr "چنین پیامی وجود ندارد."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "نمی توانید پیام خود را تکرار کنید."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "قبلا آن پیام تکرار شده است."
 
@@ -662,7 +655,7 @@ msgstr "هیچ وضعیتی با آن شناسه یافت نشد."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -672,7 +665,7 @@ msgstr "این خیلی طولانی است. بیشینهٔ طول پیام %d 
 msgid "Not found."
 msgstr "یافت نشد."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "بیشینهٔ طول پیام %d نویسه که شامل نشانی اینترنتی پیوست هم هست."
@@ -788,7 +781,7 @@ msgid "Preview"
 msgstr "پیش‌نمایش"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "حذف"
 
@@ -882,6 +875,8 @@ msgstr "کاربر را مسدود کن"
 msgid "Failed to save block information."
 msgstr "ذخیرهٔ ردیف اطلاعات شکست خورد."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -891,8 +886,8 @@ msgstr "ذخیرهٔ ردیف اطلاعات شکست خورد."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "چنین گروهی وجود ندارد."
 
@@ -1070,7 +1065,7 @@ msgid "Do not delete this notice"
 msgstr "این پیام را پاک نکن"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "این پیام را پاک کن"
 
@@ -1139,11 +1134,6 @@ msgstr "پوستهٔ وب‌گاه"
 msgid "Theme for the site."
 msgstr "پوسته برای وب‌گاه"
 
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "پوستهٔ وب‌گاه"
-
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
@@ -1248,9 +1238,9 @@ msgid "Add to favorites"
 msgstr "افزودن به برگزیده‌ها"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "چنین سندی وجود ندارد."
+msgstr "چنین پیوستی وجود ندارد."
 
 #: actions/editapplication.php:54
 msgid "Edit Application"
@@ -1305,14 +1295,6 @@ msgstr "نام سازمان خیلی طولانی است (حداکثر ۲۵۵ ن
 msgid "Organization homepage is required."
 msgstr "صفحهٔ‌خانگی سازمان مورد نیاز است."
 
-#: actions/editapplication.php:218 actions/newapplication.php:206
-msgid "Callback is too long."
-msgstr ""
-
-#: actions/editapplication.php:225 actions/newapplication.php:215
-msgid "Callback URL is not valid."
-msgstr ""
-
 #: actions/editapplication.php:258
 msgid "Could not update application."
 msgstr "نمی‌توان برنامه را به‌هنگام‌سازی کرد."
@@ -2155,7 +2137,7 @@ msgstr "شما هم‌اکنون مشترک این کاربران هستید:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2278,9 +2260,7 @@ msgstr "برای پیوستن به یک گروه، باید وارد شده با
 msgid "No nickname or ID."
 msgstr "نام‌مستعار یا شناسه‌ای وجود ندارد."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s به گروه %2$s پیوست"
@@ -2289,13 +2269,12 @@ msgstr "%1$s به گروه %2$s پیوست"
 msgid "You must be logged in to leave a group."
 msgstr "برای ترک یک گروه، شما باید وارد شده باشید."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "شما یک کاربر این گروه نیستید."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s گروه %2$s را ترک کرد"
@@ -2406,12 +2385,15 @@ msgstr "از این فرم برای ساختن یک گروه جدید استفا
 msgid "New message"
 msgstr "پیام جدید"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "شما نمی توانید به این کاربر پیام بفرستید."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "محتوایی وحود ندارد!"
 
@@ -2419,7 +2401,8 @@ msgstr "محتوایی وحود ندارد!"
 msgid "No recipient specified."
 msgstr "هیچ گیرنده ای مشخص نشده"
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "یک پیام را به خودتان نفرستید؛ در عوض آن را آهسته برای خود بگویید."
@@ -2428,12 +2411,14 @@ msgstr "یک پیام را به خودتان نفرستید؛ در عوض آن 
 msgid "Message sent"
 msgstr "پیام فرستاده‌شد"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "پیام مستقیم به %s فرستاده شد."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "خطای آژاکس"
 
@@ -2441,7 +2426,7 @@ msgstr "خطای آژاکس"
 msgid "New notice"
 msgstr "پیام جدید"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "پیام فرستاده‌شد."
 
@@ -2459,9 +2444,9 @@ msgid "Text search"
 msgstr "جست‌وجوی متن"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Ù\86تاÛ\8cج Ø¬Ø³Øªâ\80\8cÙ\88â\80\8cجÙ\88 Ø¨Ø±Ø§Û\8c %s Ø¯Ø± %s"
+msgstr "Ù¾Û\8cاÙ\85 Ø§Ø² %1$s Ø¯Ø± %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2492,12 +2477,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
 msgstr "پیام‌هایی که با جست‌و‌جوی عبارت »%1$s« در %s یافت شدند."
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"این کاربر اجازه‌ی یادآوری‌کردن را نداده است یا پست‌الکترونیک خود را تایید یا "
-"تعیین نکرده است."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2572,8 +2554,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "لطفا تنها از نشانی‌های اینترنتی %s از راه HTTP ساده استفاده کنید."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
 
@@ -2831,10 +2813,6 @@ msgstr "مسیر تصاویر پیش‌زمینه"
 msgid "Background directory"
 msgstr "شاخهٔ تصاویر پیش‌زمینه"
 
-#: actions/pathsadminpanel.php:320
-msgid "SSL"
-msgstr ""
-
 #: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
 msgid "Never"
 msgstr "هیچ وقت"
@@ -2954,10 +2932,6 @@ msgstr "شرح‌حال"
 msgid "Location"
 msgstr "موقعیت"
 
-#: actions/profilesettings.php:134 actions/register.php:480
-msgid "Where you are, like \"City, State (or Region), Country\""
-msgstr ""
-
 #: actions/profilesettings.php:138
 msgid "Share my current location when posting notices"
 msgstr "مکان کنونی من هنگام فرستادن پیام‌ها به اشتراک گذاشته شود"
@@ -3477,7 +3451,7 @@ msgstr "شما نمی‌توانید پیام خودتان را تکرار کن
 msgid "You already repeated that notice."
 msgstr "شما قبلا آن پیام را تکرار کرده‌اید."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "تکرار شده"
 
@@ -3512,13 +3486,11 @@ msgid "Replies feed for %s (Atom)"
 msgstr "خوراک پاسخ‌ها برای %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr ""
-"این خط‌زمانی است که پاسخ‌ها به %1$s را نشان می‌دهد، اما %2$s هنوز یک پیام به "
-"توجه‌اش دریافت نکرده است."
+msgstr "این خط‌زمانی %1$s است، اما %2$s تاکنون چیزی نفرستاده است."
 
 #: actions/replies.php:204
 #, php-format
@@ -3530,13 +3502,13 @@ msgstr ""
 "شوید یا [به گروه‌ها بپیوندید](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Ø´Ù\85ا Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد [Û\8cادآÙ\88رÛ\8c %1$s](../%2$s) Ø±Ø§ Ø§Ù\85تحاÙ\86 Ú©Ù\86Û\8cد Û\8cا [بÙ\87 ØªÙ\88جÙ\87 Ø§Ù\88 Ú\86Û\8cزÛ\8c "
-"بفرستید](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+"اÙ\88Ù\84Û\8cÙ\86 Ú©Ø³Û\8c Ø¨Ø§Ø´Û\8cد Ú©Ù\87 Ø¯Ø± [اÛ\8cÙ\86 Ù\85Ù\88ضÙ\88ع](%%%%action.newnotice%%%%?status_textarea=%"
+"s) پیام می‌فرستد."
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3551,19 +3523,6 @@ msgstr "شما نمی‌توانید نقش‌های کاربری را در ای
 msgid "User doesn't have this role."
 msgstr "کاربر این نقش را ندارد."
 
-#: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
-msgid "StatusNet"
-msgstr "وضعیت حذف شد."
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-msgid "You cannot sandbox users on this site."
-msgstr ""
-
-#: actions/sandbox.php:72
-msgid "User is already sandboxed."
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
@@ -3578,10 +3537,6 @@ msgstr "تنظیمات نشست برای این وب‌گاه StatusNet."
 msgid "Handle sessions"
 msgstr "مدیریت نشست‌ها"
 
-#: actions/sessionsadminpanel.php:177
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
 #: actions/sessionsadminpanel.php:181
 msgid "Session debugging"
 msgstr "اشکال‌زدایی نشست"
@@ -3712,25 +3667,15 @@ msgstr ""
 "که دوست دارید کلیک کنید تا آن‌ها را برای بعد چوب‌الفها کنید یا یک نشانه روی "
 "آن‌ها بگذارید."
 
-#: actions/showfavorites.php:208
-#, fuzzy, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Post something interesting they "
-"would add to their favorites :)"
-msgstr ""
-"%s تاکنون هیچ پیامی را به برگزیده‌هایش اضافه نکرده است. چیز جالبی بفرستید که "
-"ممکن است به برگزیده‌هایشان اضافه کنند :)"
-
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s تاکنون هیچ پیامی را به برگزیده‌هایش اضافه نکرده است. چرا به [ثبت کردن یک "
-"حساب](%%%%action.register%%%%) اقدام نمی‌کنید و سپس چیز جالبی را که ممکن است "
-"به برگزیده‌هایشان اضافه کنند، بفرستید :)"
+"چرا به [باز کردن یک حساب](%%action.register%%) اقدام نمی‌کنید و اولین نفری "
+"باشید که یک پیام را به برگزیده‌هایش اضافه می‌کند!"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3911,13 +3856,13 @@ msgstr ""
 "زمان خوبی برای شروع باشد :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Ø´Ù\85ا Ù\85Û\8câ\80\8cتÙ\88اÙ\86Û\8cد Û\8cادآÙ\88رÛ\8c %1$s Ø±Ø§ Ø§Ù\85تحاÙ\86 Ú©Ù\86Û\8cد Û\8cا [بÙ\87 ØªÙ\88جÙ\87 Ø§Ù\88 Ú\86Û\8cزÛ\8c Ø¨Ù\81رستÛ\8cد](%%%%"
-"action.newnotice%%%%?status_textarea=%2$s)."
+"اÙ\88Ù\84Û\8cÙ\86 Ú©Ø³Û\8c Ø¨Ø§Ø´Û\8cد Ú©Ù\87 Ø¯Ø± [اÛ\8cÙ\86 Ù\85Ù\88ضÙ\88ع](%%%%action.newnotice%%%%?status_textarea=%"
+"s) پیام می‌فرستد."
 
 #: actions/showstream.php:243
 #, php-format
@@ -3969,11 +3914,6 @@ msgstr "نام وب‌گاه باید طولی غیر صفر داشته باشد
 msgid "You must have a valid contact email address."
 msgstr "شما باید یک نشانی پست الکترونیکی معتبر برای ارتباط داشته باشید."
 
-#: actions/siteadminpanel.php:159
-#, php-format
-msgid "Unknown language \"%s\"."
-msgstr ""
-
 #: actions/siteadminpanel.php:165
 msgid "Minimum text limit is 0 (unlimited)."
 msgstr "کمینهٔ محدودیت متن ۰ است (نامحدود)."
@@ -4046,10 +3986,6 @@ msgstr "محدودیت متن"
 msgid "Maximum number of characters for notices."
 msgstr "بیشینهٔ تعداد نویسه‌ها برای پیام‌ها."
 
-#: actions/siteadminpanel.php:278
-msgid "Dupe limit"
-msgstr ""
-
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
@@ -4280,10 +4216,6 @@ msgstr "زمان فرستادن داده‌های آماری به کارگزار
 msgid "Frequency"
 msgstr "فرکانس"
 
-#: actions/snapshotadminpanel.php:218
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:226
 msgid "Report URL"
 msgstr "نشانی اینترنتی گزارش"
@@ -4402,10 +4334,6 @@ msgstr ""
 msgid "%s is not listening to anyone."
 msgstr "%s هیچ‌کس را دنبال نمی‌کند."
 
-#: actions/subscriptions.php:208
-msgid "Jabber"
-msgstr ""
-
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
 msgstr "پیامک"
@@ -4430,10 +4358,6 @@ msgstr "خوراک پیام برای برچسب %s (RSS 2.0)"
 msgid "Notice feed for tag %s (Atom)"
 msgstr "خوراک پیام برای برچسب %s (Atom)"
 
-#: actions/tagother.php:39
-msgid "No ID argument."
-msgstr ""
-
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
@@ -4482,10 +4406,6 @@ msgstr "چنین برچسبی وجود ندارد."
 msgid "You haven't blocked that user."
 msgstr "شما آن کاربر را مسدود نکرده اید."
 
-#: actions/unsandbox.php:72
-msgid "User is not sandboxed."
-msgstr ""
-
 #: actions/unsilence.php:72
 msgid "User is not silenced."
 msgstr "کاربر ساکت نشده است."
@@ -4498,12 +4418,6 @@ msgstr "هیچ شناسهٔ نمایه‌ای درخواست نشده است."
 msgid "Unsubscribed"
 msgstr "لغو اشتراک شده"
 
-#: actions/updateprofile.php:64 actions/userauthorization.php:337
-#, php-format
-msgid ""
-"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr ""
-
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
 msgctxt "TITLE"
@@ -4634,21 +4548,6 @@ msgid ""
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:303
-#, php-format
-msgid "Listener URI ‘%s’ not found here."
-msgstr ""
-
-#: actions/userauthorization.php:308
-#, php-format
-msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
-
-#: actions/userauthorization.php:314
-#, php-format
-msgid "Listenee URI ‘%s’ is a local user."
-msgstr ""
-
 #: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
@@ -4717,11 +4616,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr "به روز رسانی‌های %1$s در %2$s"
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "آمار"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4793,13 +4687,11 @@ msgstr ""
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
 #: classes/File.php:190
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
-"هیچ پرونده‌ای نباید بزرگ‌تر از %d بایت باشد و پرونده‌ای که شما فرستادید %d بایت "
-"بود. بارگذاری یک نسخهٔ کوچک‌تر را امتحان کنید."
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
@@ -4818,12 +4710,6 @@ msgstr ""
 "یک پرونده با این حجم زیاد می‌تواند از سهمیهٔ کاربری ماهانهٔ شما از %d بایت "
 "بگذرد."
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "اندازه‌ی نادرست"
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4866,11 +4752,6 @@ msgstr "شما از فرستادن پیام مستقیم مردود شده ای
 msgid "Could not insert message."
 msgstr "پیغام نمی تواند درج گردد"
 
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4879,23 +4760,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "هنگام افزودن برچسب خطا در پایگاه داده رخ داد: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4903,7 +4784,7 @@ msgstr ""
 "دوباره بفرستید."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4912,32 +4793,32 @@ msgstr ""
 "ارسال کنید."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "شما از فرستادن پیام در این وب‌گاه منع شده‌اید."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "هنگام ذخیرهٔ پیام مشکلی ایجاد شد."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "هنگام ذخیرهٔ صندوق ورودی گروه مشکلی رخ داد."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
-msgstr ""
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -4953,18 +4834,6 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "کاربر هیچ نمایه‌ای ندارد."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "نمی‌توان پیام وب‌گاه را ذخیره کرد."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
@@ -4987,21 +4856,18 @@ msgstr "تایید نشده!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Ù\86Ù\85Û\8câ\80\8cتÙ\88اÙ\86 Ø®Ù\88د-اشتراکÛ\8c Ø±Ø§ Ø­Ø°Ù\81 کرد."
+msgstr "Ù\86Ù\85Û\8câ\80\8cتÙ\88اÙ\86 Ø§Ø´ØªØ±Ø§Ú© Ø±Ø§ Ø°Ø®Û\8cرÙ\87 کرد."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Ù\86Ù\85Û\8câ\80\8cتÙ\88اÙ\86 Ø±Ù\85ز Ø§Ø´ØªØ±Ø§Ú© OMB Ø±Ø§ Ø­Ø°Ù\81 کرد."
+msgstr "Ù\86Ù\85Û\8câ\80\8cتÙ\88اÙ\86 Ø§Ø´ØªØ±Ø§Ú© Ø±Ø§ Ø°Ø®Û\8cرÙ\87 کرد."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "نمی‌توان اشتراک را لغو کرد."
+msgstr "نمی‌توان اشتراک را ذخیره کرد."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5015,12 +4881,6 @@ msgstr "@%2$s، به %1$s خوش آمدید!"
 msgid "Could not create group."
 msgstr "نمیتوان گروه را تشکیل داد"
 
-#. TRANS: Server exception thrown when updating a group URI failed.
-#: classes/User_group.php:506
-#, fuzzy
-msgid "Could not set group URI."
-msgstr "نمیتوان گروه را تشکیل داد"
-
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
 msgid "Could not set group membership."
@@ -5068,9 +4928,9 @@ msgstr "دیگر"
 
 #. TRANS: Page title. %1$s is the title, %2$s is the site name.
 #: lib/action.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s - %2$s"
-msgstr "%s گروه %s را ترک کرد."
+msgstr "%1$s (%2$s)"
 
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
@@ -5587,44 +5447,21 @@ msgstr "دستور انجام شد"
 msgid "Command failed"
 msgstr "فرمان شکست خورد"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "پیامی با این شناسه وجود ندارد"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "کاربر پیام آخر ندارد"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "پیدا نشد %s کاریری یا نام مستعار"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "نمی‌توان یک کاربر محلی با نام کاربری %s پیدا کرد"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "متاسفانه این دستور هنوز پیاده نشده است."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "خیلی جالب نیست که به خودتان یادآوری کنید!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "یادآوری به %s فرستاده‌شد"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5635,55 +5472,39 @@ msgstr ""
 "مشترک‌ها: %2$s\n"
 "پیام‌ها: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "پیام به‌عنوان برگزیده مشخص شد."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "شما از پیش یک عضو این گروه هستید."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "نمی‌توان کاربر %1$s را عضو گروه %2$s کرد"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "نمی‌توان کاربر %1$s را از گروه %2$s حذف کرد"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "نام کامل : %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "موقعیت : %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "صفحه خانگی : %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "دربارهٔ: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5694,144 +5515,101 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "پیام خیلی طولانی است - حداکثر تعداد مجاز %1$d نویسه است که شما %2$d نویسه را "
-"فرستادید"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "پیام مستقیم به %s فرستاده شد."
+"فرستادید."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "خطا در فرستادن پیام مستقیم."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "امکان تکرار پیام خودتان وجود ندارد"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "آن پیام قبلا تکرار شده است."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "پیام از %s تکرار شد"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "هنگام تکرار پیام خطایی رخ داد."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"پیام خیلی طولانی است - حداکثر تعداد مجاز %1$d نویسه است که شما %2$d نویسه را "
-"فرستادید"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "پاسخ به %s فرستاده شد"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "هنگام ذخیرهٔ پیام خطا رخ داد."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "نام کاربر را برای مشترک‌شدن مشخص کنید"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "نمی‌توان با دستور مشترک نمایه‌های OMB شد."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "مشترک‌شدن %s انجام‌شد"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "نام کاربر را برای لغو اشتراک از او مشخص کنید."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "از %s لغو اشتراک شد"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "دستور هنوز پیاده نشده است."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "آگاه‌سازی خاموش شد."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "ناتوان در خاموش کردن آگاه سازی."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "آگاه سازی فعال است."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "ناتوان در روشن کردن آگاه سازی."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "فرمان ورود از کار افتاده است"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"این پیوند تنها یک‌بار قابل استفاده است و تنها برای دو دقیقه مفید است: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "لغو اشتراک شده %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "شما مشترک هیچ‌کسی نشده‌اید."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "شما مشترک این فرد شده‌اید:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "هیچ‌کس مشترک شما نشده است."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "این فرد مشترک شما شده است:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "شما در هیچ گروهی عضو نیستید ."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "شما یک عضو این گروه هستید:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5911,10 +5689,6 @@ msgstr ""
 "tracks - هنوز پیاده نشده است.\n"
 "tracking - هنوز پیاده نشده است.\n"
 
-#: lib/common.php:135
-msgid "No configuration file found. "
-msgstr ""
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr "من به دنبال پرونده‌های پیکربندی در مکان‌های زیر بودم: "
@@ -5986,10 +5760,6 @@ msgstr ""
 msgid "RSS 2.0"
 msgstr ""
 
-#: lib/feed.php:89
-msgid "Atom"
-msgstr ""
-
 #: lib/feed.php:91
 msgid "FOAF"
 msgstr ""
@@ -6109,10 +5879,6 @@ msgstr "فرمت(فایل) عکس پشتیبانی نشده."
 msgid "That file is too big. The maximum file size is %s."
 msgstr "این پرونده خیلی بزرگ است. بیشینهٔ اندازهٔ پرونده %s است."
 
-#: lib/imagefile.php:93
-msgid "Partial upload."
-msgstr ""
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr "هنگام بارگذاری پرونده خطای سیستمی رخ داد."
@@ -6488,7 +6254,7 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "از"
 
@@ -6574,11 +6340,11 @@ msgstr "فرستادن یک پیام مستقیم"
 msgid "To"
 msgstr "به"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "کاراکترهای موجود"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "فرستادن"
@@ -6587,28 +6353,28 @@ msgstr "فرستادن"
 msgid "Send a notice"
 msgstr "فرستادن یک پیام"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "چه خبر، %s؟"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "پیوست کردن"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "یک فایل پیوست کنید"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "مکان من به اشتراک گذاشته شود"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "موقعیت من به اشتراک گذاشته نشود"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6616,11 +6382,6 @@ msgstr ""
 "متاسفیم، دریافت محل جغرافیایی شما بیش از انتظار طول کشیده است، لطفا بعدا "
 "دوباره تلاش کنید."
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-msgid "N"
-msgstr ""
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6645,23 +6406,27 @@ msgstr ""
 msgid "at"
 msgstr "در"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "در زمینه"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "تکرار از"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "به این پیام پاسخ دهید"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "پاسخ"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "پیام تکرار شد"
 
@@ -6795,10 +6560,6 @@ msgstr "خصوصیت"
 msgid "Popular"
 msgstr "محبوب"
 
-#: lib/redirectingaction.php:95
-msgid "No return-to arguments."
-msgstr ""
-
 #: lib/repeatform.php:107
 msgid "Repeat this notice?"
 msgstr "این پیام تکرار شود؟"
@@ -6812,22 +6573,14 @@ msgid "Repeat this notice"
 msgstr "تکرار این پیام"
 
 #: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr "دسترسÛ\8c Ú©Ø§Ø±Ø¨Ø± Ø±Ø§ Ø¨Ù\87 Ú¯Ø±Ù\88Ù\87 Ù\85سدÙ\88د Ú©Ù\86"
+msgstr "دسترسÛ\8c Ú©Ø§Ø±Ø¨Ø± Ø¨Ù\87 Ú¯Ø±Ù\88Ù\87 Ù\85سدÙ\88د Ø´Ù\88د"
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr "هیچ کاربر تنهایی برای حالت تک کاربره مشخص نشده است."
 
-#: lib/sandboxform.php:67
-msgid "Sandbox"
-msgstr ""
-
-#: lib/sandboxform.php:78
-msgid "Sandbox this user"
-msgstr ""
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr "جست‌وجوی وب‌گاه"
@@ -6876,11 +6629,6 @@ msgstr "ساکت کردن"
 msgid "Silence this user"
 msgstr "ساکت کردن این کاربر"
 
-#: lib/subgroupnav.php:83
-#, php-format
-msgid "People %s subscribes to"
-msgstr ""
-
 #: lib/subgroupnav.php:91
 #, php-format
 msgid "People subscribed to %s"
@@ -6922,13 +6670,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "به روز رسانی چهره موفقیت آمیر نبود."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6953,11 +6694,6 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "خطا هنگام به‌هنگام‌سازی نمایهٔ از راه دور."
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr "اعلان های بالا"
@@ -6966,10 +6702,6 @@ msgstr "اعلان های بالا"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-msgid "Unsandbox this user"
-msgstr ""
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr "از حالت سکوت درآوردن"
@@ -6986,11 +6718,6 @@ msgstr "لغو مشترک‌شدن از این کاربر"
 msgid "Unsubscribe"
 msgstr "لغو اشتراک"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "کاربر %s (%d) هیچ تاریخچهٔ نمایه‌ای ندارد."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "ویرایش اواتور"
@@ -7038,56 +6765,56 @@ msgid "Moderator"
 msgstr "مدیر"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "چند ثانیه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "حدود یک دقیقه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "حدود %d دقیقه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "حدود یک ساعت پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "حدود %d ساعت پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "حدود یک روز پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "حدود %d روز پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "حدود یک ماه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "حدود %d ماه پیش"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "حدود یک سال پیش"
 
@@ -7100,10 +6827,3 @@ msgstr "%s یک رنگ صحیح نیست!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s یک رنگ صحیح نیست! از ۳ یا ۶ نویسه مبنای شانزده استفاده کنید"
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"پیام خیلی طولانی است - حداکثر تعداد مجاز %1$d نویسه است که شما %2$d نویسه را "
-"فرستادید."
index 5b1465bc5f6e51daf35876b7dd923966c37b147c..91958c8c613d45b997a1bf1bb2e5caa6872a3710 100644 (file)
@@ -10,59 +10,27 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:23+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:29:51+0000\n"
 "Language-Team: Finnish\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: fi\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "Hyväksy"
-
-#. TRANS: Page notice
-#: actions/accessadminpanel.php:67
-#, fuzzy
-msgid "Site access settings"
-msgstr "Profiilikuva-asetukset"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "Rekisteröidy"
-
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "Yksityisyys"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
 msgstr ""
 
-#. TRANS: Checkbox label for configuring site as invite only.
-#: actions/accessadminpanel.php:176
-#, fuzzy
-msgid "Invite only"
-msgstr "Kutsu"
-
 #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
 #: actions/accessadminpanel.php:183
 msgid "Disable new registrations."
@@ -73,31 +41,13 @@ msgstr ""
 msgid "Closed"
 msgstr "Suljettu"
 
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Profiilikuva-asetukset"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Tallenna"
-
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "Sivua ei ole."
+msgstr "Tuota tagia ei ole."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -117,16 +67,16 @@ msgstr "Sivua ei ole."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Käyttäjää ei ole."
 
 #. TRANS: Page title. %1$s is user nickname, %2$d is page number
 #: actions/all.php:90
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s and friends, page %2$d"
-msgstr "%s ja kaverit, sivu %d"
+msgstr "%s ja kaverit"
 
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
@@ -174,16 +124,6 @@ msgstr ""
 "Kokeile useamman käyttäjän tilaamista, [liity ryhmään] (%%action.groups%%) "
 "tai lähetä päivitys itse."
 
-#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
-#: actions/all.php:146
-#, fuzzy, php-format
-msgid ""
-"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
-"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-msgstr ""
-"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
-"newnotice%%%%?status_textarea=%s)!"
-
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
 #, php-format
 msgid ""
@@ -204,32 +144,6 @@ msgstr "Sinä ja kaverit"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "API-metodia ei löytynyt!"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -250,11 +164,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Ei voitu päivittää käyttäjää."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -265,11 +174,6 @@ msgstr "Ei voitu päivittää käyttäjää."
 msgid "User has no profile."
 msgstr "Käyttäjällä ei ole profiilia."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Ei voitu tallentaa profiilia."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -282,27 +186,9 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
-msgid "Unable to save your design settings."
-msgstr "Twitter-asetuksia ei voitu tallentaa!"
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Ei voitu päivittää käyttäjää."
-
 #: actions/apiblockcreate.php:105
-#, fuzzy
 msgid "You cannot block yourself!"
-msgstr "Et voi lopettaa itsesi tilausta!"
+msgstr "Sinä et voi poistaa käyttäjiä."
 
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
@@ -355,28 +241,18 @@ msgstr ""
 msgid "No status found with that ID."
 msgstr "Käyttäjätunnukselle ei löytynyt statusviestiä."
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Tämä päivitys on jo suosikki!"
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Ei voitu lisätä suosikiksi."
 
-#: actions/apifavoritedestroy.php:123
-#, fuzzy
-msgid "That status is not a favorite."
-msgstr "Tämä päivitys ei ole suosikki!"
-
 #: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
 msgid "Could not delete favorite."
 msgstr "Ei voitu poistaa suosikkia."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Ei voitu tilata käyttäjää: Käyttäjää ei löytynyt."
+msgstr "Ei voitu lopettaa tilausta: Käyttäjää ei löytynyt."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -388,24 +264,20 @@ msgid "Could not unfollow user: User not found."
 msgstr "Ei voitu lopettaa tilausta: Käyttäjää ei löytynyt."
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Et voi lopettaa itsesi tilausta!"
+msgstr "Sinä et voi poistaa käyttäjiä."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Kaksi käyttäjätunnusta tai nimeä täytyy antaa."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "Julkista päivitysvirtaa ei saatu."
+msgstr "Ei voitu päivittää käyttäjää."
 
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "Ei löytynyt yhtään päivitystä."
+msgstr "Ei voitu päivittää käyttäjää."
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
@@ -442,9 +314,9 @@ msgstr "Koko nimi on liian pitkä (max 255 merkkiä)."
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "kuvaus on liian pitkä (max 140 merkkiä)."
+msgstr "kuvaus on liian pitkä (max %d merkkiä)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -458,11 +330,6 @@ msgstr "Kotipaikka on liian pitkä (max 255 merkkiä)."
 msgid "Too many aliases! Maximum %d."
 msgstr "Liikaa aliaksia. Maksimimäärä on %d."
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "Virheellinen alias: \"%s\""
-
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
 #, php-format
@@ -477,31 +344,30 @@ msgstr "Alias ei voi olla sama kuin ryhmätunnus."
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "Ryhmää ei löytynyt!"
+msgstr "Ei löytynyt."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Sinä kuulut jo tähän ryhmään."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Sinut on estetty osallistumasta tähän ryhmään ylläpitäjän toimesta."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s."
-msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s."
-
 #: actions/apigroupleave.php:115
 msgid "You are not a member of this group."
 msgstr "Sinä et kuulu tähän ryhmään."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s"
+msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s."
 
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
@@ -509,12 +375,6 @@ msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s"
 msgid "%s's groups"
 msgstr "Käyttäjän %s ryhmät"
 
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Ryhmät, joiden jäsen %s on"
-
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
@@ -522,25 +382,14 @@ msgstr "Ryhmät, joiden jäsen %s on"
 msgid "%s groups"
 msgstr "Käyttäjän %s ryhmät"
 
-#: actions/apigrouplistall.php:96
-#, fuzzy, php-format
-msgid "groups on %s"
-msgstr "Ryhmän toiminnot"
-
 #: actions/apimediaupload.php:99
-#, fuzzy
 msgid "Upload failed."
-msgstr "Lataa"
+msgstr "Komento epäonnistui"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Koko ei kelpaa."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -561,21 +410,6 @@ msgstr ""
 "Istuntosi avaimen kanssa oli ongelmia. Olisitko ystävällinen ja kokeilisit "
 "uudelleen."
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Käyttäjätunnus tai salasana ei kelpaa."
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Virhe tapahtui käyttäjän asettamisessa."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -635,16 +469,6 @@ msgstr "Tunnus"
 msgid "Password"
 msgstr "Salasana"
 
-#: actions/apioauthauthorize.php:328
-#, fuzzy
-msgid "Deny"
-msgstr "Ulkoasu"
-
-#: actions/apioauthauthorize.php:334
-#, fuzzy
-msgid "Allow"
-msgstr "Kaikki"
-
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
 msgstr ""
@@ -662,15 +486,10 @@ msgstr "Et voi poistaa toisen käyttäjän päivitystä."
 msgid "No such notice."
 msgstr "Päivitystä ei ole."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "Ilmoituksia ei voi pistää päälle."
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "Poista tämä päivitys"
+msgstr "Tätä päivitystä ei voi poistaa."
 
 #: actions/apistatusesshow.php:139
 msgid "Status deleted."
@@ -684,7 +503,7 @@ msgstr "Käyttäjätunnukselle ei löytynyt statusviestiä."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -694,7 +513,7 @@ msgstr "Päivitys on liian pitkä. Maksimipituus on %d merkkiä."
 msgid "Not found."
 msgstr "Ei löytynyt."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Maksimikoko päivitykselle on %d merkkiä, mukaan lukien URL-osoite."
@@ -704,19 +523,19 @@ msgid "Unsupported format."
 msgstr "Formaattia ei ole tuettu."
 
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Käyttäjän %s suosikit"
+msgstr "Käyttäjän %1$s päivitys %2$s"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen."
+msgstr "Käyttäjän %1$s suosikit palvelussa %2$s!"
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Vastaukset päivitykseen %2$s"
+msgstr "Käyttäjän %1$s päivitys %2$s"
 
 #: actions/apitimelinementions.php:131
 #, php-format
@@ -734,25 +553,15 @@ msgstr "%s julkinen aikajana"
 msgid "%s updates from everyone!"
 msgstr "%s päivitykset kaikilta!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "Vastaukset käyttäjälle %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "Vastaukset käyttäjälle %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr "Päivitykset joilla on tagi %s"
 
 #: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
+#, php-format
 msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
+msgstr "Käyttäjän %1$s suosikit palvelussa %2$s!"
 
 #: actions/apitrends.php:87
 msgid "API method under construction."
@@ -791,9 +600,8 @@ msgstr "Voit ladata oman profiilikuvasi. Maksimikoko on %s."
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "Käyttäjälle ei löydy profiilia"
+msgstr "Käyttäjällä ei ole profiilia."
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
@@ -811,7 +619,7 @@ msgid "Preview"
 msgstr "Esikatselu"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Poista"
 
@@ -823,11 +631,6 @@ msgstr "Lataa"
 msgid "Crop"
 msgstr "Rajaa"
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Profiilia ei ole määritelty."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr "Valitse neliön muotoinen alue kuvasta profiilikuvaksi"
@@ -849,9 +652,8 @@ msgid "Avatar deleted."
 msgstr "Kuva poistettu."
 
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Sinä olet jo estänyt tämän käyttäjän."
+msgstr "Olet jos tilannut seuraavien käyttäjien päivitykset:"
 
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
 msgid "Block user"
@@ -872,10 +674,9 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Ei"
+msgstr "Huomaa"
 
 #. TRANS: Submit button title for 'No' when blocking a user.
 #. TRANS: Submit button title for 'No' when deleting a user.
@@ -883,19 +684,6 @@ msgstr "Ei"
 msgid "Do not block this user"
 msgstr "Älä estä tätä käyttäjää"
 
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Kyllä"
-
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
 msgid "Block this user"
@@ -905,6 +693,8 @@ msgstr "Estä tämä käyttäjä"
 msgid "Failed to save block information."
 msgstr "Käyttäjän estotiedon tallennus epäonnistui."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -914,21 +704,11 @@ msgstr "Käyttäjän estotiedon tallennus epäonnistui."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Tuota ryhmää ei ole."
 
-#: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
-msgid "%s blocked profiles"
-msgstr "Käyttäjän profiili"
-
-#: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
-msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s ja kaverit, sivu %d"
-
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
 msgstr "Lista käyttäjistä, jotka ovat estetty liittymästä tähän ryhmään."
@@ -947,9 +727,9 @@ msgstr "Poista esto tältä käyttäjältä"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "Kuva"
+msgstr "Vastaukset käyttäjälle %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -965,9 +745,9 @@ msgstr "Tämä vahvistuskoodi ei ole sinun!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Tuntematon osoitetyyppi %s "
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -996,9 +776,8 @@ msgid "Couldn't delete email confirmation."
 msgstr "Ei voitu poistaa sähköpostivahvistusta."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Vahvista osoite"
+msgstr "Tämän hetken vahvistettu sähköpostiosoite."
 
 #: actions/confirmaddress.php:161
 #, php-format
@@ -1015,21 +794,12 @@ msgid "Notices"
 msgstr "Päivitykset"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr ""
-"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
+msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Päivitykselle ei ole profiilia"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Sinä et kuulu tähän ryhmään."
+msgstr "Vahvistuskoodia ei löytynyt."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1037,11 +807,6 @@ msgstr "Sinä et kuulu tähän ryhmään."
 msgid "There was a problem with your session token."
 msgstr "Istuntoavaimesi kanssa oli ongelma."
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Päivitystä ei ole."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1049,18 +814,6 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "Älä poista tätä päivitystä"
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "Poista tämä päivitys"
-
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1098,7 +851,7 @@ msgid "Do not delete this notice"
 msgstr "Älä poista tätä päivitystä"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Poista tämä päivitys"
 
@@ -1107,9 +860,8 @@ msgid "You cannot delete users."
 msgstr "Sinä et voi poistaa käyttäjiä."
 
 #: actions/deleteuser.php:74
-#, fuzzy
 msgid "You can only delete local users."
-msgstr "Et voi poistaa toisen käyttäjän päivitystä."
+msgstr "Sinä et voi poistaa käyttäjiä."
 
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
 msgid "Delete user"
@@ -1123,9 +875,8 @@ msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when deleting a user.
 #: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
 msgid "Delete this user"
-msgstr "Poista tämä päivitys"
+msgstr "Poista käyttäjä"
 
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
@@ -1138,45 +889,17 @@ msgstr "Ulkoasu"
 msgid "Design settings for this StatusNet site."
 msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Koko ei kelpaa."
-
-#: actions/designadminpanel.php:322
-#, fuzzy, php-format
-msgid "Theme not available: %s."
-msgstr "Pikaviestin ei ole käytettävissä."
-
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Vaihda salasanasi"
+msgstr "Vaihda väriä"
 
 #: actions/designadminpanel.php:431
-#, fuzzy
 msgid "Site logo"
-msgstr "Kutsu"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
-msgstr "Vaihda"
-
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
 msgstr "Palvelun ilmoitus"
 
-#: actions/designadminpanel.php:461
-#, fuzzy
-msgid "Theme for the site."
-msgstr "Kirjaudu ulos palvelusta"
-
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Palvelun ilmoitus"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1191,13 +914,6 @@ msgstr "Vaihda tautakuva"
 msgid "Background"
 msgstr "Tausta"
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr "Voit ladata ryhmälle logokuvan. Maksimikoko on %s."
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1208,14 +924,6 @@ msgstr "On"
 msgid "Off"
 msgstr "Off"
 
-#: actions/designadminpanel.php:545 lib/designsettings.php:156
-msgid "Turn background image on or off."
-msgstr ""
-
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-msgid "Tile background image"
-msgstr ""
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "Vaihda väriä"
@@ -1224,11 +932,6 @@ msgstr "Vaihda väriä"
 msgid "Content"
 msgstr "Sisältö"
 
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "Haku"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "Teksti"
@@ -1249,14 +952,6 @@ msgstr ""
 msgid "Use defaults"
 msgstr "Käytä oletusasetuksia"
 
-#: actions/designadminpanel.php:677 lib/designsettings.php:248
-msgid "Restore default designs"
-msgstr ""
-
-#: actions/designadminpanel.php:683 lib/designsettings.php:254
-msgid "Reset back to default"
-msgstr ""
-
 #. TRANS: Submit button title
 #: actions/designadminpanel.php:685 actions/othersettings.php:126
 #: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
@@ -1268,10 +963,6 @@ msgstr ""
 msgid "Save"
 msgstr "Tallenna"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr "Tämä päivitys ei ole suosikki!"
@@ -1281,70 +972,22 @@ msgid "Add to favorites"
 msgstr "Lisää suosikkeihin"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Dokumenttia ei ole."
+msgstr "Liitettä ei ole."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Muita asetuksia"
-
-#: actions/editapplication.php:66
-#, fuzzy
-msgid "You must be logged in to edit an application."
 msgstr ""
-"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Päivitystä ei ole."
-
-#: actions/editapplication.php:161
-#, fuzzy
-msgid "Use this form to edit your application."
-msgstr "Käytä tätä lomaketta muokataksesi ryhmää."
-
-#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
-msgid "Name is required."
-msgstr "Sama kuin ylläoleva salasana. Pakollinen."
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Koko nimi on liian pitkä (max 255 merkkiä)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Tunnus on jo käytössä. Yritä toista tunnusta."
-
-#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
-msgid "Description is required."
-msgstr "Kuvaus"
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Kotisivun verkko-osoite ei ole toimiva."
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr ""
 
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Kotipaikka on liian pitkä (max 255 merkkiä)."
-
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
 msgstr ""
@@ -1357,11 +1000,6 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Ei voitu päivittää ryhmää."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
@@ -1373,9 +1011,9 @@ msgstr "Sinun pitää olla kirjautunut sisään jotta voit luoda ryhmän."
 
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
 msgid "You must be an admin to edit the group."
-msgstr "Sinun pitää olla ylläpitäjä, jotta voit muokata ryhmää"
+msgstr ""
+"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
 
 #: actions/editgroup.php:158
 msgid "Use this form to edit the group."
@@ -1406,9 +1044,8 @@ msgstr "Asetukset tallennettu."
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Sähköpostiasetukset"
+msgstr "Profiiliasetukset"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1417,13 +1054,6 @@ msgstr "Sähköpostiasetukset"
 msgid "Manage how you get email from %%site.name%%."
 msgstr "Määritä miten saat sähköpostin palvelusta %%site.name%%."
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Sähköpostiosoitteet"
-
 #. TRANS: Form note in e-mail settings form.
 #: actions/emailsettings.php:112
 msgid "Current confirmed email address."
@@ -1450,17 +1080,6 @@ msgstr ""
 "sähköpostilaatikostasi (ja roskapostikansiosta!) viesti, jossa on "
 "lisäohjeita. "
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Peruuta"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1471,10 +1090,9 @@ msgstr "Sähköpostiosoite, esimerkiksi \"käyttäjätunnus@example.org\""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Lisää"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1499,16 +1117,14 @@ msgstr ""
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Uusi"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "Asetukset"
+msgstr "Sähköpostiosoitteet"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1545,12 +1161,6 @@ msgstr "Haluan lähettää päivityksiä sähköpostilla."
 msgid "Publish a MicroID for my email address."
 msgstr "Julkaise MicroID sähköpostiosoitteelleni."
 
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Ulkoasuasetukset tallennettu."
-
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
@@ -1603,17 +1213,10 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Avoimia vahvistuksia ei ole peruutettavana."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Tämä on väärä pikaviestiosoite."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Vahvistus peruttu."
+msgstr "Avoimia vahvistuksia ei ole peruutettavana."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1623,9 +1226,8 @@ msgstr "Tämä ei ole sähköpostiosoitteesi."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Osoite on poistettu."
+msgstr "Saapuvan sähköpostin osoite poistettu."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1709,38 +1311,33 @@ msgid "Featured users, page %d"
 msgstr "Esittelyssä olevat käyttäjät, sivu %d"
 
 #: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "A selection of some great users on %s"
-msgstr "Valikoima joitakin loistavia palvelun %s käyttäjiä"
+msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "Ei päivitystä"
+msgstr "Päivitystä ei ole."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Ei päivitystä"
+msgstr "Päivitystä ei ole."
 
 #: actions/file.php:42
-#, fuzzy
 msgid "No attachments."
-msgstr "Ei liitteitä"
+msgstr "Liitettä ei ole."
 
 #: actions/file.php:51
-#, fuzzy
 msgid "No uploaded attachments."
-msgstr "Ei ladattuja liitteitä"
+msgstr "Liitettä ei ole."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "Odottamaton vastaus saatu!"
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "Käyttäjää jota seurataan ei ole olemassa."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1755,19 +1352,12 @@ msgid "You are not authorized."
 msgstr "Sinulla ei ole valtuutusta tähän."
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Ei voitu muuttaa request tokeneita access tokeneiksi."
+msgstr "Ei saatu request tokenia."
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Tuntematon OMB-protokollan versio."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Virhe tapahtui etäprofiilin päivittämisessä"
+msgstr ""
 
 #: actions/getfile.php:79
 msgid "No such file."
@@ -1777,24 +1367,17 @@ msgstr "Tiedostoa ei ole."
 msgid "Cannot read file."
 msgstr "Tiedostoa ei voi lukea."
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Koko ei kelpaa."
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Et voi lähettää viestiä tälle käyttäjälle."
+msgstr "Päivityksesi tähän palveluun on estetty."
 
 #: actions/grantrole.php:82
-#, fuzzy
 msgid "User already has this role."
-msgstr "Käyttäjä on asettanut eston sinulle."
+msgstr "Käyttäjällä ei ole profiilia."
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1818,9 +1401,8 @@ msgid "Only an admin can block group members."
 msgstr "Vain ylläpitäjä voi estää ryhmän jäseniä."
 
 #: actions/groupblock.php:95
-#, fuzzy
 msgid "User is already blocked from group."
-msgstr "Käyttäjä on asettanut eston sinulle."
+msgstr "Käyttäjää ei ole estetty ryhmästä."
 
 #: actions/groupblock.php:100
 msgid "User is not a member of group."
@@ -1848,14 +1430,9 @@ msgstr "Älä estä tätä käyttäjää tästä ryhmästä"
 msgid "Block this user from this group"
 msgstr "Estä tätä käyttäjää osallistumassa tähän ryhmään"
 
-#: actions/groupblock.php:206
-msgid "Database error blocking user from group."
-msgstr ""
-
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "ID-tunnusta ei ole"
+msgstr "Ei Jabber ID -osoitetta"
 
 #: actions/groupdesignsettings.php:68
 msgid "You must be logged in to edit a group."
@@ -1909,9 +1486,9 @@ msgid "%s group members"
 msgstr "Ryhmän %s jäsenet"
 
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "Ryhmän %s jäsenet, sivu %d"
+msgstr "Ryhmän %s jäsenet"
 
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
@@ -1976,16 +1553,6 @@ msgstr ""
 msgid "Create a new group"
 msgstr "Luo uusi ryhmä"
 
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
-msgstr ""
-"Hae ihmisiä palvelun %%site.name%% käyttäjien nimistä, paikoista ja "
-"kiinnostuksen kohteista. Erota hakutermit välilyönnillä; hakutermien pitää "
-"olla 3 tai useamman merkin pituisia."
-
 #: actions/groupsearch.php:58
 msgid "Group search"
 msgstr "Ryhmähaku"
@@ -2023,9 +1590,8 @@ msgstr "Tapahtui virhe, kun estoa poistettiin."
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "Pikaviestiasetukset"
+msgstr "Profiilikuva-asetukset"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2047,9 +1613,8 @@ msgstr "Pikaviestin ei ole käytettävissä."
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "Pikaviestiosoite"
+msgstr "Sähköpostiosoitteet"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2081,9 +1646,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Asetukset"
+msgstr "Asetukset tallennettu."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2153,17 +1717,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Tämä on väärä pikaviestiosoite."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Ei voitu poistaa sähköpostivahvistusta."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Vahvistus peruttu."
+msgstr "Varmistuskoodia ei ole annettu."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2173,14 +1730,8 @@ msgstr "Tämä ei ole Jabber ID-tunnuksesi."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "Osoite on poistettu."
-
-#: actions/inbox.php:59
-#, fuzzy, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr "Saapuneet viestit käyttäjälle %s"
+msgstr "Saapuvan sähköpostin osoite poistettu."
 
 #: actions/inbox.php:62
 #, php-format
@@ -2196,11 +1747,10 @@ msgid "Invites have been disabled."
 msgstr "Kutsut ovat pois käytöstä."
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
 msgstr ""
-"Sinun täytyy olla kirjautuneena sisään kutsuaksesi uusia käyttäjiä palveluun "
-"%s"
+"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
 
 #: actions/invite.php:72
 #, php-format
@@ -2221,7 +1771,7 @@ msgstr "Olet jos tilannut seuraavien käyttäjien päivitykset:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2270,10 +1820,9 @@ msgstr "Voit myös lisätä oman viestisi kutsuun"
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Lähetä"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2342,32 +1891,19 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "Sinun pitää olla kirjautunut sisään, jos haluat liittyä ryhmään."
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Tunnusta ei ole."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, fuzzy, php-format
-msgid "%1$s joined group %2$s"
-msgstr "%s liittyi ryhmään %s"
-
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
 msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Sinä et kuulu tähän ryhmään."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%s erosi ryhmästä %s"
+msgstr "Käyttäjän %1$s päivitys %2$s"
 
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
@@ -2377,11 +1913,6 @@ msgstr "Olet jo kirjautunut sisään."
 msgid "Incorrect username or password."
 msgstr "Väärä käyttäjätunnus tai salasana"
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Sinulla ei ole valtuutusta tähän."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Kirjaudu sisään"
@@ -2412,68 +1943,29 @@ msgstr ""
 "Syötä turvallisuussyistä käyttäjätunnuksesi ja salasanasi uudelleen ennen "
 "asetuksiesi muuttamista."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Kirjaudu sisään käyttäjätunnuksella ja salasanalla"
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Kirjaud sisään käyttäjätunnuksella ja salasanalla. Ei vielä "
-"käyttäjätunnusta? [Rekisteröi](%%action.register%%) käyttäjätunnus tai "
-"kokeile [OpenID](%%action.openidlogin%%)-tunnuksella sisään kirjautumista. "
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr "Vain ylläpitäjä voi tehdä toisesta käyttäjästä ylläpitäjän."
 
-#: actions/makeadmin.php:96
-#, fuzzy, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "%s on jo ryhmän \"%s\" ylläpitäjä."
-
-#: actions/makeadmin.php:133
-#, fuzzy, php-format
-msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Ei saatu käyttäjän %s jäsenyystietoja ryhmästä %s"
-
 #: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
 msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Ei voitu tehdä käyttäjästä %s ylläpitäjää ryhmään %s"
+msgstr "Tee tästä käyttäjästä ylläpitäjä"
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "Ei nykyistä tilatietoa"
-
-#: actions/newapplication.php:52
-#, fuzzy
-msgid "New Application"
-msgstr "Päivitystä ei ole."
-
-#: actions/newapplication.php:64
-#, fuzzy
-msgid "You must be logged in to register an application."
-msgstr "Sinun pitää olla kirjautunut sisään jotta voit luoda ryhmän."
-
-#: actions/newapplication.php:143
-#, fuzzy
-msgid "Use this form to register a new application."
-msgstr "Käytä tätä lomaketta luodaksesi ryhmän."
+msgstr "Ei tuloksia"
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
 msgstr ""
 
-#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
-msgid "Could not create application."
-msgstr "Ei voitu lisätä aliasta."
-
 #: actions/newgroup.php:53
 msgid "New group"
 msgstr "Uusi ryhmä"
@@ -2486,12 +1978,15 @@ msgstr "Käytä tätä lomaketta luodaksesi ryhmän."
 msgid "New message"
 msgstr "Uusi viesti"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Et voi lähettää viestiä tälle käyttäjälle."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Ei sisältöä!"
 
@@ -2499,7 +1994,8 @@ msgstr "Ei sisältöä!"
 msgid "No recipient specified."
 msgstr "Vastaanottajaa ei ole määritelty."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Älä lähetä viestiä itsellesi, vaan kuiskaa se vain hiljaa itsellesi."
@@ -2508,12 +2004,7 @@ msgstr "Älä lähetä viestiä itsellesi, vaan kuiskaa se vain hiljaa itsellesi
 msgid "Message sent"
 msgstr "Viesti lähetetty"
 
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Suora viesti käyttäjälle %s lähetetty"
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax-virhe"
 
@@ -2521,7 +2012,7 @@ msgstr "Ajax-virhe"
 msgid "New notice"
 msgstr "Uusi päivitys"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Päivitys lähetetty"
 
@@ -2539,9 +2030,9 @@ msgid "Text search"
 msgstr "Tekstihaku"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr " Hakusyöte haulle \"%s\""
+msgstr "Viesti käyttäjältä %1$s, %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2552,30 +2043,15 @@ msgstr ""
 "Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
 "newnotice%%%%?status_textarea=%s)!"
 
-#: actions/noticesearch.php:124
-#, php-format
-msgid ""
-"Why not [register an account](%%%%action.register%%%%) and be the first to "
-"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
-msgstr ""
-
-#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
-msgid "Updates with \"%s\""
-msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
-
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Kaikki päivitykset hakuehdolla \"%s\""
+msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Käyttäjä ei ole sallinut tönäisyjä tai ei ole vahvistanut "
-"sähköpostiosoitettaan."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2585,39 +2061,14 @@ msgstr "Tönäisy lähetetty"
 msgid "Nudge sent!"
 msgstr "Tönäisy lähetetty!"
 
-#: actions/oauthappssettings.php:59
-#, fuzzy
-msgid "You must be logged in to list your applications."
-msgstr ""
-"Sinun pitää olla kirjautunut sisään, jotta voit muuttaa ryhmän tietoja."
-
-#: actions/oauthappssettings.php:74
-#, fuzzy
-msgid "OAuth applications"
-msgstr "Muita asetuksia"
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Sinä et kuulu tähän ryhmään."
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2632,9 +2083,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Päivitykselle ei ole profiilia"
+msgstr "Käyttäjällä ei ole profiilia."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2643,9 +2093,9 @@ msgstr "Käyttäjän %1$s päivitys %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Yhdistä"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2654,8 +2104,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Tuo ei ole tuettu tietomuoto."
 
@@ -2668,9 +2118,8 @@ msgid "Notice Search"
 msgstr "Etsi Päivityksistä"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Muita Asetuksia"
+msgstr "Profiilikuva-asetukset"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2689,9 +2138,8 @@ msgid "Automatic shortening service to use."
 msgstr "Käytettävä automaattinen lyhennyspalvelu."
 
 #: actions/othersettings.php:122
-#, fuzzy
 msgid "View profile designs"
-msgstr "Profiiliasetukset"
+msgstr "Näytä tai piillota profiilin ulkoasu."
 
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
@@ -2701,35 +2149,9 @@ msgstr "Näytä tai piillota profiilin ulkoasu."
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "URL-lyhennyspalvelun nimi on liian pitkä (max 50 merkkiä)."
 
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "Ryhmää ei ole määritelty."
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Profiilia ei ole määritelty."
-
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "Ei profiili id:tä kyselyssä."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Päivityksen sisältö ei kelpaa"
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "Kirjaudu sisään"
-
-#: actions/outbox.php:58
-#, fuzzy, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr "Käyttäjän %s lähetetyt viestit"
+msgstr "Ei valtuutuspyyntöä!"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2811,52 +2233,23 @@ msgid "Path and server settings for this StatusNet site."
 msgstr "Polut ja palvelin asetukset tälle StatusNet palvelulle."
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Pikaviestin ei ole käytettävissä."
-
-#: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
-msgid "Avatar directory not writable: %s."
-msgstr "Pikaviestin ei ole käytettävissä."
-
-#: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
-msgid "Background directory not writable: %s."
-msgstr "Taustakuvan hakemisto"
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Pikaviestin ei ole käytettävissä."
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
-msgid "Site"
-msgstr "Kutsu"
-
-#: actions/pathsadminpanel.php:238
-#, fuzzy
-msgid "Server"
-msgstr "Palauta"
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-msgid "Path"
-msgstr ""
-
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Palvelun ilmoitus"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2885,29 +2278,9 @@ msgstr ""
 msgid "Theme path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:272
-msgid "Theme directory"
-msgstr ""
-
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Kuva"
-
-#: actions/pathsadminpanel.php:284
-#, fuzzy
-msgid "Avatar server"
-msgstr "Profiilikuva-asetukset"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Kuva päivitetty."
-
 #: actions/pathsadminpanel.php:292
-#, fuzzy
 msgid "Avatar directory"
-msgstr "Kuva poistettu."
+msgstr "Taustakuvan hakemisto"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
@@ -2925,26 +2298,6 @@ msgstr "Taustakuvan hakemistopolku"
 msgid "Background directory"
 msgstr "Taustakuvan hakemisto"
 
-#: actions/pathsadminpanel.php:320
-#, fuzzy
-msgid "SSL"
-msgstr "SMS"
-
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "Palauta"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Päivitykset"
-
-#: actions/pathsadminpanel.php:325
-#, fuzzy
-msgid "Always"
-msgstr "Aliakset"
-
 #: actions/pathsadminpanel.php:329
 msgid "Use SSL"
 msgstr ""
@@ -2954,18 +2307,16 @@ msgid "When to use SSL"
 msgstr ""
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
-msgstr "Palauta"
+msgstr ""
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Palvelun ilmoitus"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2982,19 +2333,13 @@ msgid "People search"
 msgstr "Etsi ihmisiä"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "Ei sallittu henkilötagi: %s"
-
-#: actions/peopletag.php:142
-#, fuzzy, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Käyttäjät joilla henkilötagi %s - sivu %d"
+msgstr "Tuo ei ole kelvollinen sähköpostiosoite."
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Päivityksen sisältö ei kelpaa"
+msgstr "Koko ei kelpaa."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3103,9 +2448,9 @@ msgstr ""
 "ihmiskäyttäjille)"
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "\"Tietoja\" on liian pitkä (max 140 merkkiä)."
+msgstr "kuvaus on liian pitkä (max %d merkkiä)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
@@ -3124,11 +2469,6 @@ msgstr "Virheellinen tagi: \"%s\""
 msgid "Couldn't update user for autosubscribe."
 msgstr "Ei voitu asettaa käyttäjälle automaattista tilausta."
 
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Tageja ei voitu tallentaa."
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Ei voitu tallentaa profiilia."
@@ -3172,13 +2512,6 @@ msgstr "Julkisen Aikajanan Syöte (RSS 2.0)"
 msgid "Public Stream Feed (Atom)"
 msgstr "Julkinen syöte (Atom)"
 
-#: actions/public.php:188
-#, php-format
-msgid ""
-"This is the public timeline for %%site.name%% but no one has posted anything "
-"yet."
-msgstr ""
-
 #: actions/public.php:191
 msgid "Be the first to post!"
 msgstr "Ole ensimmäinen joka lähettää päivityksen!"
@@ -3199,14 +2532,12 @@ msgid ""
 msgstr ""
 
 #: actions/public.php:247
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
 "blogging) service based on the Free Software [StatusNet](http://status.net/) "
 "tool."
 msgstr ""
-"Tämä on %%site.name%%, [mikroblogaus](http://en.wikipedia.org/wiki/Micro-"
-"blogging)palvelu "
 
 #: actions/publictagcloud.php:57
 msgid "Public tag cloud"
@@ -3267,12 +2598,6 @@ msgstr "Vahvistuskoodi on liian vanha. Aloita uudelleen."
 msgid "Could not update user with confirmed email address."
 msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta."
 
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr "Sinut on tunnistettu. Syötä uusi salasana alapuolelle. "
@@ -3454,16 +2779,14 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-"poislukien yksityinen tieto: salasana, sähköpostiosoite, IM-osoite, "
-"puhelinnumero."
 
 #: actions/register.php:583
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
@@ -3480,20 +2803,6 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Onnittelut, %s! Tervetuloa palveluun %%%%site.name%%%%. Täältä voit "
-"jatkaa...\n"
-"\n"
-"* [Profiiliisi](%s) ja lähettää ensimmäisen päivityksesi.\n"
-"* Lisäämään [Jabber/GTalk osoitteen](%%%%action.imsettings%%%%), jotta saat "
-"lähetettyä päivitykset pikaviestimen kautta.\n"
-"* [Hakemaan ihmisiä](%%%%action.peoplesearch%%%%), jotka tunnet tai joilla "
-"on samanlaisia kiinnostuksen kohteita. \n"
-"* Päivittämään [profiiliasi](%%%%action.profilesettings%%%%), jotta muut "
-"tietävät enemmän sinusta.\n"
-"* Lukemaan [ohjeista](%%%%doc.help%%%%) muista ominaisuuksista, joista et "
-"vielä tiedä. \n"
-"\n"
-"Kiitokset rekisteröitymisestäsi ja toivomme että pidät palvelustamme."
 
 #: actions/register.php:607
 msgid ""
@@ -3549,11 +2858,8 @@ msgid "Invalid profile URL (bad format)"
 msgstr "Profiilin URL-osoite '%s' ei kelpaa (virheellinen muoto)."
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
 msgstr ""
-"Tuo ei ole kelvollinen profiilin verkko-osoite (YADIS dokumenttia ei "
-"löytynyt)."
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
@@ -3564,35 +2870,9 @@ msgstr ""
 msgid "Couldn’t get a request token."
 msgstr "Ei saatu request tokenia."
 
-#: actions/repeat.php:57
-#, fuzzy
-msgid "Only logged-in users can repeat notices."
-msgstr "Vain käyttäjä voi lukea omaa postilaatikkoaan."
-
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Profiilia ei ole määritelty."
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Et voi rekisteröityä, jos et hyväksy lisenssiehtoja."
-
 #: actions/repeat.php:90
-#, fuzzy
 msgid "You already repeated that notice."
-msgstr "Sinä olet jo estänyt tämän käyttäjän."
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
-msgid "Repeated"
-msgstr "Luotu"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "Luotu"
+msgstr "Sinä kuulut jo tähän ryhmään."
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3601,19 +2881,9 @@ msgid "Replies to %s"
 msgstr "Vastaukset käyttäjälle %s"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "Viesti käyttäjälle %1$s, %2$s"
-
-#: actions/replies.php:145
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Päivityksien syöte käyttäjälle %s"
-
-#: actions/replies.php:152
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Päivityksien syöte käyttäjälle %s"
+msgstr "Vastaukset käyttäjälle %s"
 
 #: actions/replies.php:159
 #, php-format
@@ -3621,13 +2891,13 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Päivityksien syöte käyttäjälle %s"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
 msgstr ""
-"Tämä on käyttäjän %s aikajana, mutta %s ei ole lähettänyt vielä yhtään "
-"päivitystä."
+"Tämä on käyttäjän %s ja kavereiden aikajana, mutta kukaan ei ole lähettyänyt "
+"vielä mitään."
 
 #: actions/replies.php:204
 #, php-format
@@ -3636,44 +2906,9 @@ msgid ""
 "[join groups](%%action.groups%%)."
 msgstr ""
 
-#: actions/replies.php:206
-#, fuzzy, php-format
-msgid ""
-"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
-"newnotice%%%%?status_textarea=%3$s)."
-msgstr ""
-"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
-"newnotice%%%%?status_textarea=%s)!"
-
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "Viesti käyttäjälle %1$s, %2$s"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Et voi lähettää viestiä tälle käyttäjälle."
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "Käyttäjälle ei löydy profiilia"
-
-#: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
-msgid "StatusNet"
-msgstr "Päivitys poistettu."
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Et voi lähettää viestiä tälle käyttäjälle."
-
-#: actions/sandbox.php:72
-#, fuzzy
-msgid "User is already sandboxed."
-msgstr "Käyttäjä on asettanut eston sinulle."
+msgstr "Päivityksesi tähän palveluun on estetty."
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3681,11 +2916,6 @@ msgstr "Käyttäjä on asettanut eston sinulle."
 msgid "Sessions"
 msgstr ""
 
-#: actions/sessionsadminpanel.php:65
-#, fuzzy
-msgid "Session settings for this StatusNet site."
-msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
-
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
 msgstr ""
@@ -3702,40 +2932,11 @@ msgstr ""
 msgid "Turn on debugging output for sessions."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/useradminpanel.php:294
-#, fuzzy
-msgid "Save site settings"
-msgstr "Profiilikuva-asetukset"
-
-#: actions/showapplication.php:82
-#, fuzzy
-msgid "You must be logged in to view an application."
-msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Päivitykselle ei ole profiilia"
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Tunnus"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
-msgid "Organization"
-msgstr "Sivutus"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
 #: lib/applicationeditform.php:216 lib/groupeditform.php:172
@@ -3752,18 +2953,10 @@ msgstr "Tilastot"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3790,16 +2983,6 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Oletko varma että haluat poistaa tämän päivityksen?"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "Käyttäjän %s suosikkipäivitykset"
-
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
 msgstr "Ei saatu haettua suosikkipäivityksiä."
@@ -3850,9 +3033,9 @@ msgid "%s group"
 msgstr "Ryhmä %s"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Ryhmän %s jäsenet, sivu %d"
+msgstr "Ryhmät, sivu %d"
 
 #: actions/showgroup.php:227
 msgid "Group profile"
@@ -3925,15 +3108,13 @@ msgid ""
 msgstr ""
 
 #: actions/showgroup.php:461
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. Its members share short messages about "
 "their life and interests. "
 msgstr ""
-"**%s** on ryhmä palvelussa %%%%site.name%%%%, joka on [mikroblogauspalvelu]"
-"(http://en.wikipedia.org/wiki/Micro-blogging)"
 
 #: actions/showgroup.php:489
 msgid "Admins"
@@ -3961,47 +3142,37 @@ msgstr "Viesti käyttäjältä %1$s, %2$s"
 msgid "Notice deleted."
 msgstr "Päivitys on poistettu."
 
-#: actions/showstream.php:73
-#, fuzzy, php-format
-msgid " tagged %s"
-msgstr "Päivitykset joilla on tagi %s"
-
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s ja kaverit, sivu %d"
+msgstr "Ryhmät, sivu %d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Päivityssyöte ryhmälle %s"
+msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Päivityksien syöte käyttäjälle %s"
+msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Päivityksien syöte käyttäjälle %s"
+msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (Atom)"
-msgstr "Päivityksien syöte käyttäjälle %s"
-
-#: actions/showstream.php:148
-#, fuzzy, php-format
-msgid "FOAF for %s"
-msgstr "Käyttäjän %s lähetetyt viestit"
+msgstr "Syöte ryhmän %s päivityksille (Atom)"
 
 #: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
 msgstr ""
-"Tämä on käyttäjän %s aikajana, mutta %s ei ole lähettänyt vielä yhtään "
-"päivitystä."
+"Tämä on käyttäjän %s ja kavereiden aikajana, mutta kukaan ei ole lähettyänyt "
+"vielä mitään."
 
 #: actions/showstream.php:205
 msgid ""
@@ -4009,15 +3180,6 @@ msgid ""
 "would be a good time to start :)"
 msgstr ""
 
-#: actions/showstream.php:207
-#, fuzzy, php-format
-msgid ""
-"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
-"%?status_textarea=%2$s)."
-msgstr ""
-"Ole ensimmäinen joka [lähettää päivityksen tästä aiheesta] (%%%%action."
-"newnotice%%%%?status_textarea=%s)!"
-
 #: actions/showstream.php:243
 #, php-format
 msgid ""
@@ -4028,43 +3190,20 @@ msgid ""
 msgstr ""
 
 #: actions/showstream.php:248
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
-"Käyttäjällä **%s** on käyttäjätili palvelussa %%%%site.name%%%%, joka on "
-"[mikroblogauspalvelu](http://en.wikipedia.org/wiki/Micro-blogging)"
-
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "Vastaukset käyttäjälle %s"
-
-#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
-msgid "You cannot silence users on this site."
-msgstr "Et voi lähettää viestiä tälle käyttäjälle."
-
-#: actions/silence.php:72
-#, fuzzy
-msgid "User is already silenced."
-msgstr "Käyttäjä on asettanut eston sinulle."
-
-#: actions/siteadminpanel.php:69
-#, fuzzy
-msgid "Basic settings for this StatusNet site"
-msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
 msgstr ""
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Tuo ei ole kelvollinen sähköpostiosoite"
+msgstr "Tuo ei ole kelvollinen sähköpostiosoite."
 
 #: actions/siteadminpanel.php:159
 #, php-format
@@ -4083,11 +3222,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Palvelun ilmoitus"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4108,16 +3242,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Uusi sähköpostiosoite päivityksien lähettämiseen palveluun %s"
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Paikalliset näkymät"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4126,11 +3250,6 @@ msgstr ""
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
-#: actions/siteadminpanel.php:262
-#, fuzzy
-msgid "Default language"
-msgstr "Ensisijainen kieli"
-
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
 msgstr ""
@@ -4155,44 +3274,18 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "Palvelun ilmoitus"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Uusi viesti"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Twitter-asetuksia ei voitu tallentaa!"
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Palvelun ilmoitus"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "Palvelun ilmoitus"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "SMS-asetukset"
+msgstr "Profiilikuva-asetukset"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4209,9 +3302,8 @@ msgstr "SMS ei ole käytettävissä."
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "Pikaviestiosoite"
+msgstr "Sähköpostiosoitteet"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4233,18 +3325,10 @@ msgstr "Vahvistuskoodi"
 msgid "Enter the code you received on your phone."
 msgstr "Syötä koodi jonka sait puhelimeesi."
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Vahvista"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
-msgstr "SMS puhelinnumero"
+msgstr "Puhelinnumeroa ei ole."
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
@@ -4253,9 +3337,8 @@ msgstr "Puhelinnumero, ei välimerkkejä tai välilyöntejä, suuntanumerollinen
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Asetukset"
+msgstr "Asetukset tallennettu."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4266,12 +3349,6 @@ msgstr ""
 "Lähetä päivityksiä SMS:llä; Ymmärrän, että voin saada kohtuuttomia laskuja "
 "tästä matkapuhelinoperaattoriltani."
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Asetukset tallennettu."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
@@ -4308,9 +3385,8 @@ msgstr "Tämä on väärä vahvistukoodi."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Vahvistus peruttu."
+msgstr "SMS vahvistus"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4318,12 +3394,6 @@ msgstr "Vahvistus peruttu."
 msgid "That is not your phone number."
 msgstr "Tämä ei ole puhelinnumerosi."
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "SMS puhelinnumero"
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
@@ -4358,13 +3428,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Ensisijainen sivunavigointi"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Sähköpostiosoitteen vahvistus"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4406,11 +3471,6 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Profiilikuva-asetukset"
-
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
 msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
@@ -4424,16 +3484,6 @@ msgstr "Tilausta ei onnistuttu tallentamaan."
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Tiedostoa ei ole."
-
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "Tilattu"
@@ -4444,9 +3494,9 @@ msgid "%s subscribers"
 msgstr "Käyttäjän %s tilaajat"
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "Käyttäjän %s tilaajat, sivu %d"
+msgstr "Käyttäjän %s tilaajat"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4481,9 +3531,9 @@ msgid "%s subscriptions"
 msgstr "Käyttäjän %s tilaukset"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "Käyttäjän %s tilaukset, sivu %d"
+msgstr "Käyttäjän %s tilaukset"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
@@ -4518,29 +3568,24 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Käyttäjät joilla henkilötagi %s - sivu %d"
+msgstr "Päivitykset joilla on tagi %s"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Päivityksien syöte käyttäjälle %s"
+msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Päivityksien syöte käyttäjälle %s"
+msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr "Päivityksien syöte käyttäjälle %s"
-
-#: actions/tagother.php:39
-#, fuzzy
-msgid "No ID argument."
-msgstr "Ei id parametria."
+msgstr "Syöte ryhmän %s päivityksille (Atom)"
 
 #: actions/tagother.php:65
 #, php-format
@@ -4590,24 +3635,12 @@ msgid "No such tag."
 msgstr "Tuota tagia ei ole."
 
 #: actions/unblock.php:59
-#, fuzzy
 msgid "You haven't blocked that user."
-msgstr "Sinä olet jo estänyt tämän käyttäjän."
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Käyttäjää ei ole estetty ryhmästä."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Käyttäjällä ei ole profiilia."
+msgstr "Älä estä tätä käyttäjää"
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Ei profiili id:tä kyselyssä."
+msgstr "Ei profiilia tuolle ID:lle."
 
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
@@ -4619,17 +3652,6 @@ msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "Käyttäjä"
-
-#: actions/useradminpanel.php:70
-msgid "User settings for this StatusNet site."
-msgstr ""
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4657,11 +3679,6 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-#, fuzzy
-msgid "New users"
-msgstr "Kutsu uusia käyttäjiä"
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
@@ -4670,28 +3687,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Kaikki tilaukset"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Tilaa automaattisesti kaikki, jotka tilaavat päivitykseni (ei sovi hyvin "
-"ihmiskäyttäjille)"
-
-#: actions/useradminpanel.php:251
-#, fuzzy
-msgid "Invitations"
-msgstr "Kutsu(t) lähetettiin"
-
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "Kutsu(t) lähetettiin"
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4701,15 +3696,11 @@ msgid "Authorize subscription"
 msgstr "Valtuuta tilaus"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Tarkista nämä tiedot varmistaaksesi, että haluat tilata tämän käyttäjän "
-"päivitykset. Jos et valinnut haluavasi tilata jonkin käyttäjän päivityksiä, "
-"paina \"Peruuta\"."
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4728,11 +3719,6 @@ msgstr "Tilaa tämä käyttäjä"
 msgid "Reject"
 msgstr "Hylkää"
 
-#: actions/userauthorization.php:220
-#, fuzzy
-msgid "Reject this subscription"
-msgstr "Käyttäjän %s tilaukset"
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Ei valtuutuspyyntöä!"
@@ -4742,29 +3728,22 @@ msgid "Subscription authorized"
 msgstr "Tilaus sallittu"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"Päivityksen tilaus on hyväksytty, mutta callback-osoitetta palveluun ei ole "
-"saatu. Tarkista sivuston ohjeet miten päivityksen tilaus hyväksytään. "
-"Tilauskoodisi on:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Tilaus hylätty"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"Päivityksen tilaus on hylätty, mutta callback-osoitetta palveluun ei ole "
-"saatu. Tarkista sivuston ohjeet miten päivityksen tilaus hylätään kokonaan."
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4792,19 +3771,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Kuvan URL-osoitetta '%s' ei voi avata."
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Kuvan '%s' tyyppi on väärä"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Profiiliasetukset"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4818,18 +3792,18 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Ryhmän %s jäsenet, sivu %d"
+msgstr "Ryhmät, sivu %d"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr "Hae lisää ryhmiä"
 
 #: actions/usergroups.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not a member of any group."
-msgstr "Sinä et kuulu tähän ryhmään."
+msgstr "Käyttäjä ei kuulu tähän ryhmään."
 
 #: actions/usergroups.php:164
 #, php-format
@@ -4847,11 +3821,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "Tilastot"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4890,12 +3859,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Omat"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4934,54 +3897,11 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Koko ei kelpaa."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Ryhmän profiili"
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Ei voitu päivittää ryhmää."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Ryhmän profiili"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Ei voitu päivittää ryhmää."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Ei voitu lisätä aliasta."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "Tapahtui virhe suoran viestin lähetyksessä."
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -5000,24 +3920,18 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Ongelma päivityksen tallentamisessa."
+msgstr "Virhe tapahtui profiilikuvan lisäämisessä"
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -5025,7 +3939,7 @@ msgstr ""
 "päivityksien lähettämista muutaman minuutin päästä."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -5034,33 +3948,27 @@ msgstr ""
 "päivityksien lähettämista muutaman minuutin päästä."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Päivityksesi tähän palveluun on estetty."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Ongelma päivityksen tallentamisessa."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Ongelma päivityksen tallentamisessa."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5076,64 +3984,30 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Käyttäjällä ei ole profiilia."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "Twitter-asetuksia ei voitu tallentaa!"
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Käyttäjä on estänyt sinua tilaamasta päivityksiä."
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
+msgstr "Tagien tallennus epäonnistui."
 
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "Käyttäjä on asettanut eston sinulle."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ei ole tilattu!."
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Ei voitu poistaa tilausta."
+msgstr "Tilausta ei onnistuttu tallentamaan."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Ei voitu poistaa tilausta."
+msgstr "Tilausta ei onnistuttu tallentamaan."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Ei voitu poistaa tilausta."
-
-#. TRANS: Notice given on user registration.
-#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
-#: classes/User.php:365
-#, fuzzy, php-format
-msgid "Welcome to %1$s, @%2$s!"
-msgstr "Viesti käyttäjälle %1$s, %2$s"
+msgstr "Tilausta ei onnistuttu tallentamaan."
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
@@ -5142,21 +4016,14 @@ msgstr "Ryhmän luonti ei onnistunut."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
+msgstr "Ryhmän luonti ei onnistunut."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
 msgid "Could not set group membership."
 msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
 
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "Tilausta ei onnistuttu tallentamaan."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
@@ -5177,12 +4044,6 @@ msgstr "Vaihda salasanasi"
 msgid "Change email handling"
 msgstr "Muuta sähköpostin käsittelyasetuksia."
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "Käyttäjän profiili"
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -5193,12 +4054,6 @@ msgstr "Muita asetuksia"
 msgid "Other"
 msgstr "Muut"
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5211,131 +4066,62 @@ msgstr "Ensisijainen sivunavigointi"
 
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr "Henkilökohtainen profiili ja kavereiden aikajana"
-
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Omat"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "Muuta sähköpostiosoitettasi, kuvaasi, salasanaasi, profiiliasi"
+msgstr "Vaihda salasanasi"
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Ei voitu uudelleenohjata palvelimelle: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "Yhdistä"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Ensisijainen sivunavigointi"
-
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "Ylläpito"
-
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "Kutsu kavereita ja työkavereita liittymään palveluun %s"
-
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "Kutsu"
-
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
-msgstr "Kirjaudu ulos palvelusta"
+msgstr "Kirjaudu sisään"
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "Kirjaudu ulos"
+msgstr "Logo"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Luo uusi käyttäjätili"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Rekisteröidy"
+msgstr "Luo uusi ryhmä"
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Login to the site"
-msgstr "Kirjaudu sisään palveluun"
-
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
 msgstr "Kirjaudu sisään"
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "Auta minua!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "Ohjeet"
 
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr "Hae ihmisiä tai tekstiä"
-
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Haku"
+msgstr "Hae lisää ryhmiä"
 
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
@@ -5393,11 +4179,6 @@ msgstr "Lähdekoodi"
 msgid "Contact"
 msgstr "Ota yhteyttä"
 
-#: lib/action.php:794
-#, fuzzy
-msgid "Badge"
-msgstr "Tönäise"
-
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
 msgid "StatusNet software license"
@@ -5405,13 +4186,11 @@ msgstr "StatusNet-ohjelmiston lisenssi"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** on mikroblogipalvelu, jonka tarjoaa [%%site.broughtby%%](%%"
-"site.broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5431,12 +4210,6 @@ msgstr ""
 "versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://"
 "www.fsf.org/licensing/licenses/agpl-3.0.html)."
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "StatusNet-ohjelmiston lisenssi"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5496,154 +4269,32 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Et voi lähettää viestiä tälle käyttäjälle."
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Rekisteröityminen ei ole sallittu."
-
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-#, fuzzy
-msgid "showForm() not implemented."
-msgstr "Komentoa ei ole vielä toteutettu."
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-#, fuzzy
-msgid "saveSettings() not implemented."
-msgstr "Komentoa ei ole vielä toteutettu."
-
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Twitter-asetuksia ei voitu tallentaa!"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Sähköpostiosoitteen vahvistus"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "Kutsu"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "SMS vahvistus"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-#, fuzzy
-msgctxt "MENU"
-msgid "Design"
-msgstr "Ulkoasu"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "SMS vahvistus"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "Käyttäjä"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "SMS vahvistus"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "SMS vahvistus"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "SMS vahvistus"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Palvelun ilmoitus"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "SMS vahvistus"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
-#, fuzzy, php-format
+#, php-format
 msgid "Describe your application in %d characters"
-msgstr "Kuvaile ryhmää tai aihetta 140 merkillä"
+msgstr "Kuvaile itseäsi ja kiinnostuksen kohteitasi %d merkillä"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Kuvaile ryhmää tai aihetta 140 merkillä"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "Ryhmän tai aiheen kotisivun tai blogin osoite"
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Lähdekoodi"
+msgstr "Kuvaus"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
 msgid "Organization responsible for this application"
 msgstr ""
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:242
-#, fuzzy
-msgid "URL for the homepage of the organization"
-msgstr "Ryhmän tai aiheen kotisivun tai blogin osoite"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
 msgid "URL to redirect to after authentication"
@@ -5700,47 +4351,15 @@ msgstr ""
 msgid "Approved %1$s - \"%2$s\" access."
 msgstr ""
 
-#. TRANS: Button label
-#: lib/applicationlist.php:159
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Revoke"
-msgstr "Poista"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
-
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:265
-msgid "Author"
-msgstr ""
-
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
-#, fuzzy
 msgid "Provider"
-msgstr "Profiili"
+msgstr "Esikatselu"
 
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Salasanan vaihto"
-
-#: lib/authenticationplugin.php:236
-#, fuzzy
-msgid "Password changing is not allowed"
-msgstr "Salasanan vaihto"
-
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
 msgstr "Komennon tulos"
@@ -5753,45 +4372,21 @@ msgstr "Komento suoritettu"
 msgid "Command failed"
 msgstr "Komento epäonnistui"
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Ei profiilia tuolla id:llä."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Käyttäjällä ei ole viimeistä päivitystä"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Valitettavasti tätä komentoa  ei ole vielä toteutettu."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Tönäisy lähetetty"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5799,55 +4394,39 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Päivitys on merkitty suosikiksi."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Sinä kuulut jo tähän ryhmään."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Koko nimi: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Kotipaikka: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Kotisivu: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Tietoa: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5856,150 +4435,94 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Suora viesti käyttäjälle %s lähetetty"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Tapahtui virhe suoran viestin lähetyksessä."
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Ilmoituksia ei voi pistää päälle."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Poista tämä päivitys"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Päivitys lähetetty"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "Ongelma päivityksen tallentamisessa."
-
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Vastaa tähän päivitykseen"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Ongelma päivityksen tallentamisessa."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Anna käyttäjätunnus, jonka päivitykset haluat tilata"
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Käyttäjän %s päivitykset tilattu"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Anna käyttäjätunnus, jonka päivityksien tilauksen haluat lopettaa"
+msgstr "Virhe tapahtui käyttäjän asettamisessa."
 
-#: lib/command.php:664
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Unsubscribed from %s"
-msgstr "Käyttäjän %s päivitysten tilaus lopetettu"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Komentoa ei ole vielä toteutettu."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Ilmoitukset pois päältä."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Ilmoituksia ei voi pistää pois päältä."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Ilmoitukset päällä."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Ilmoituksia ei voi pistää päälle."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Käyttäjän %s päivitysten tilaus lopetettu"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Olet jos tilannut seuraavien käyttäjien päivitykset:"
 msgstr[1] "Olet jos tilannut seuraavien käyttäjien päivitykset:"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Toista ei voitu asettaa tilaamaan sinua."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Toista ei voitu asettaa tilaamaan sinua."
 msgstr[1] "Toista ei voitu asettaa tilaamaan sinua."
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Sinä et kuulu tähän ryhmään."
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Sinä et kuulu tähän ryhmään."
 msgstr[1] "Sinä et kuulu tähän ryhmään."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6041,11 +4564,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Varmistuskoodia ei ole annettu."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -6054,11 +4572,6 @@ msgstr ""
 msgid "You may wish to run the installer to fix this."
 msgstr ""
 
-#: lib/common.php:139
-#, fuzzy
-msgid "Go to the installer."
-msgstr "Kirjaudu sisään palveluun"
-
 #: lib/connectsettingsaction.php:110
 msgid "IM"
 msgstr "Pikaviestin"
@@ -6071,11 +4584,6 @@ msgstr "Päivitykset pikaviestintä käyttäen (IM)"
 msgid "Updates by SMS"
 msgstr "Päivitykset SMS:llä"
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Yhdistä"
-
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
 msgstr ""
@@ -6084,21 +4592,6 @@ msgstr ""
 msgid "Database error"
 msgstr "Tietokantavirhe"
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Lataa"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Voit ladata oman profiilikuvasi. Maksimikoko on %s."
-
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
 msgid "Disfavor this notice"
 msgstr "Poista tämä päivitys suosikeista"
@@ -6139,11 +4632,6 @@ msgstr "Suodata tagien perusteella"
 msgid "All"
 msgstr "Kaikki"
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "Valitse operaattori"
-
 #: lib/galleryaction.php:140
 msgid "Tag"
 msgstr "Tagi"
@@ -6165,15 +4653,10 @@ msgstr ""
 msgid "URL of the homepage or blog of the group or topic"
 msgstr "Ryhmän tai aiheen kotisivun tai blogin osoite"
 
-#: lib/groupeditform.php:168
-#, fuzzy
-msgid "Describe the group or topic"
-msgstr "Kuvaile ryhmää tai aihetta 140 merkillä"
-
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Kuvaile ryhmää tai aihetta 140 merkillä"
+msgstr "Kuvaile itseäsi ja kiinnostuksen kohteitasi %d merkillä"
 
 #: lib/groupeditform.php:179
 msgid ""
@@ -6191,16 +4674,6 @@ msgstr ""
 msgid "Group"
 msgstr "Ryhmä"
 
-#: lib/groupnav.php:101
-#, fuzzy
-msgid "Blocked"
-msgstr "Estä"
-
-#: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "Estä käyttäjä"
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -6215,11 +4688,6 @@ msgstr "Logo"
 msgid "Add or edit %s logo"
 msgstr "Lisää ryhmälle %s logo tai muokkaa sitä "
 
-#: lib/groupnav.php:120
-#, fuzzy, php-format
-msgid "Add or edit %s design"
-msgstr "Lisää ryhmälle %s logo tai muokkaa sitä "
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Ryhmät, joissa eniten jäseniä"
@@ -6242,11 +4710,6 @@ msgstr "Tämä sivu ei ole saatavilla sinulle sopivassa mediatyypissä."
 msgid "Unsupported image file format."
 msgstr "Kuvatiedoston formaattia ei ole tuettu."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Voit ladata ryhmälle logon."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Osittain ladattu palvelimelle."
@@ -6365,11 +4828,9 @@ msgstr ""
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
-msgstr ""
-"Tietoja: %s\n"
-"\n"
+msgstr "Kotipaikka: %s"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6410,12 +4871,6 @@ msgstr "%s päivitys"
 msgid "SMS confirmation"
 msgstr "SMS vahvistus"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Odotetaan vahvistusta tälle puhelinnumerolle."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6467,9 +4922,9 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s lisäsi päivityksesi suosikkeihinsa"
+msgstr "Lähetä sähköpostia, jos joku lisää päivitykseni suosikiksi."
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6502,11 +4957,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6545,10 +4995,9 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
-#, fuzzy
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr " lähteestä "
+msgstr ""
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6566,11 +5015,6 @@ msgstr "Valitettavasti tuo ei ole oikea osoite sähköpostipäivityksille."
 msgid "Sorry, no incoming email allowed."
 msgstr "Valitettavasti päivitysten teko sähköpostilla ei ole sallittua."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Kuvatiedoston formaattia ei ole tuettu."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6610,9 +5054,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Julkista päivitysvirtaa ei saatu."
+msgstr "Ei voitu poistaa suosikkia."
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6632,55 +5075,46 @@ msgstr "Lähetä suora viesti"
 msgid "To"
 msgstr "Vastaanottaja"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Sallitut merkit"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Lähetä"
+msgstr ""
 
 #: lib/noticeform.php:160
 msgid "Send a notice"
 msgstr "Lähetä päivitys"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Mitä teet juuri nyt, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Tageja ei voitu tallentaa."
+msgstr ""
 
-#: lib/noticeform.php:215
-#, fuzzy
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr "Tageja ei voitu tallentaa."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-#, fuzzy
-msgid "N"
-msgstr "Ei"
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6705,29 +5139,22 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "Ei sisältöä!"
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
-#: lib/noticelist.php:602
-#, fuzzy
+#: lib/noticelist.php:603
 msgid "Repeated by"
-msgstr "Luotu"
+msgstr ""
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Vastaa tähän päivitykseen"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Vastaus"
 
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Päivitys on poistettu."
-
 #: lib/nudgeform.php:116
 msgid "Nudge this user"
 msgstr "Tönäise tätä käyttäjää"
@@ -6756,11 +5183,6 @@ msgstr "Virhe tapahtui etäprofiilin päivittämisessä"
 msgid "Error inserting remote profile"
 msgstr "Virhe tapahtui uuden etäprofiilin lisäämisessä"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Poista päivitys"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Ei voitu lisätä uutta tilausta."
@@ -6798,11 +5220,6 @@ msgstr "Lähettämäsi viestit"
 msgid "Tags in %s's notices"
 msgstr "Tagit käyttäjän %s päivityksissä"
 
-#: lib/plugin.php:115
-#, fuzzy
-msgid "Unknown"
-msgstr "Tuntematon toiminto"
-
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
 msgstr "Tilaukset"
@@ -6819,11 +5236,6 @@ msgstr "Tilaajat"
 msgid "All subscribers"
 msgstr "Kaikki tilaajat"
 
-#: lib/profileaction.php:191
-#, fuzzy
-msgid "User ID"
-msgstr "Käyttäjä"
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "Käyttäjänä alkaen"
@@ -6861,49 +5273,14 @@ msgstr "Esittelyssä"
 msgid "Popular"
 msgstr "Suosituimmat"
 
-#: lib/redirectingaction.php:95
-#, fuzzy
-msgid "No return-to arguments."
-msgstr "Ei id parametria."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Vastaa tähän päivitykseen"
-
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Kyllä"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Vastaa tähän päivitykseen"
-
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "Estä tätä käyttäjää osallistumassa tähän ryhmään"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "Saapuneet"
-
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Poista esto tältä käyttäjältä"
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Haku"
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr ""
@@ -6912,11 +5289,6 @@ msgstr ""
 msgid "Search"
 msgstr "Haku"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Haku"
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Henkilö"
@@ -6941,16 +5313,6 @@ msgstr "Nimetön osa"
 msgid "More..."
 msgstr "Lisää..."
 
-#: lib/silenceform.php:67
-#, fuzzy
-msgid "Silence"
-msgstr "Palvelun ilmoitus"
-
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "Estä tämä käyttäjä"
-
 #: lib/subgroupnav.php:83
 #, php-format
 msgid "People %s subscribes to"
@@ -6997,13 +5359,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Profiilikuvan päivittäminen epäonnistui."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -7029,9 +5384,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "Virhe tapahtui etäprofiilin päivittämisessä"
+msgstr "Tapahtui virhe, kun estoa poistettiin."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
@@ -7041,20 +5395,10 @@ msgstr "Eniten päivityksiä"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Poista esto tältä käyttäjältä"
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Poista esto tältä käyttäjältä"
-
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr "Peruuta tämän käyttäjän tilaus"
@@ -7063,16 +5407,6 @@ msgstr "Peruuta tämän käyttäjän tilaus"
 msgid "Unsubscribe"
 msgstr "Peruuta tilaus"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Käyttäjällä ei ole profiilia."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Kuva"
-
 #: lib/userprofile.php:234 lib/userprofile.php:248
 msgid "User actions"
 msgstr "Käyttäjän toiminnot"
@@ -7081,11 +5415,6 @@ msgstr "Käyttäjän toiminnot"
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Profiiliasetukset"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
@@ -7102,87 +5431,66 @@ msgstr "Viesti"
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Käyttäjän profiili"
-
-#: lib/userprofile.php:366
-#, fuzzy
-msgctxt "role"
-msgid "Administrator"
-msgstr "Ylläpitäjät"
-
 #: lib/userprofile.php:367
 msgctxt "role"
 msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "muutama sekunti sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "noin minuutti sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "noin %d minuuttia sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "noin tunti sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "noin %d tuntia sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "noin päivä sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "noin %d päivää sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "noin kuukausi sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "noin %d kuukautta sitten"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "noin vuosi sitten"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "Kotisivun verkko-osoite ei ole toimiva."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
index 4f7b3f0e70e7bc7d0d18471f548fcc6859945801..0e8427205c044557768a4bb12a78cffeab2a993d 100644 (file)
@@ -1,5 +1,6 @@
 # Translation of StatusNet to French
 #
+# Author@translatewiki.net: Brion
 # Author@translatewiki.net: Crochet.david
 # Author@translatewiki.net: IAlex
 # Author@translatewiki.net: Isoph
@@ -7,6 +8,7 @@
 # Author@translatewiki.net: Julien C
 # Author@translatewiki.net: McDutchie
 # Author@translatewiki.net: Peter17
+# Author@translatewiki.net: Sherbrooke
 # Author@translatewiki.net: Y-M D
 # --
 # This file is distributed under the same license as the StatusNet package.
@@ -15,12 +17,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:12:08+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:03+0000\n"
 "Language-Team: French\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: fr\n"
 "X-Message-Group: out-statusnet\n"
@@ -95,6 +97,7 @@ msgstr "Enregistrer"
 msgid "No such page."
 msgstr "Page non trouvée."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -114,7 +117,7 @@ msgstr "Page non trouvée."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Utilisateur non trouvé."
@@ -358,7 +361,8 @@ msgstr "Aucun statut trouvé avec cet identifiant. "
 msgid "This status is already a favorite."
 msgstr "Cet avis est déjà un favori."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Impossible de créer le favori."
 
@@ -472,15 +476,19 @@ msgstr "L’alias ne peut pas être le même que le pseudo."
 msgid "Group not found."
 msgstr "Groupe non trouvé."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Vous êtes déjà membre de ce groupe."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Vous avez été bloqué de ce groupe par l’administrateur."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Impossible de joindre l’utilisateur %1$s au groupe %2$s."
@@ -489,7 +497,10 @@ msgstr "Impossible de joindre l’utilisateur %1$s au groupe %2$s."
 msgid "You are not a member of this group."
 msgstr "Vous n’êtes pas membre de ce groupe."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Impossible de retirer l’utilisateur %1$s du groupe %2$s."
@@ -656,11 +667,13 @@ msgstr "Vous ne pouvez pas supprimer le statut d’un autre utilisateur."
 msgid "No such notice."
 msgstr "Avis non trouvé."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Vous ne pouvez pas reprendre votre propre avis."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Vous avez déjà repris cet avis."
 
@@ -676,7 +689,7 @@ msgstr "Aucun statut trouvé avec cet identifiant."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Le client doit fournir un paramètre « statut » avec une valeur."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -686,7 +699,7 @@ msgstr "C’est trop long ! La taille maximale de l’avis est de %d caractères
 msgid "Not found."
 msgstr "Non trouvé."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -898,6 +911,8 @@ msgstr "Bloquer cet utilisateur"
 msgid "Failed to save block information."
 msgstr "Impossible d’enregistrer les informations de blocage."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -907,8 +922,8 @@ msgstr "Impossible d’enregistrer les informations de blocage."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Aucun groupe trouvé."
 
@@ -2186,7 +2201,7 @@ msgstr "Vous êtes déjà abonné à ces utilisateurs :"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2312,9 +2327,7 @@ msgstr "Vous devez ouvrir une session pour rejoindre un groupe."
 msgid "No nickname or ID."
 msgstr "Aucun pseudo ou ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s a rejoint le groupe %2$s"
@@ -2323,13 +2336,12 @@ msgstr "%1$s a rejoint le groupe %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Vous devez ouvrir une session pour quitter un groupe."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Vous n’êtes pas membre de ce groupe."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s a quitté le groupe %2$s"
@@ -2448,12 +2460,15 @@ msgstr "Remplissez les champs ci-dessous pour créer un nouveau groupe :"
 msgid "New message"
 msgstr "Nouveau message"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Vous ne pouvez pas envoyer de messages à cet utilisateur."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Aucun contenu !"
 
@@ -2461,7 +2476,8 @@ msgstr "Aucun contenu !"
 msgid "No recipient specified."
 msgstr "Aucun destinataire n’a été spécifié."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2471,12 +2487,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Message envoyé"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Message direct envoyé à %s."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Erreur Ajax"
 
@@ -2484,7 +2502,7 @@ msgstr "Erreur Ajax"
 msgid "New notice"
 msgstr "Nouvel avis"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Avis publié"
 
@@ -2617,8 +2635,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Veuillez n'utiliser que des URL HTTP complètes en %s."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Format de données non supporté."
 
@@ -3056,7 +3074,7 @@ msgstr "Aucun fuseau horaire n’a été choisi."
 
 #: actions/profilesettings.php:241
 msgid "Language is too long (max 50 chars)."
-msgstr "La langue est trop longue (255 caractères maximum)."
+msgstr "La langue est trop longue (50 caractères maximum)."
 
 #: actions/profilesettings.php:253 actions/tagother.php:178
 #, php-format
@@ -4965,23 +4983,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Impossible de trouver le profil (%1$d) pour l’avis (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problème lors de l’enregistrement de l’avis ; trop long."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4989,7 +5007,7 @@ msgstr ""
 "minutes."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4998,29 +5016,29 @@ msgstr ""
 "dans quelques minutes."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Il vous est interdit de poster des avis sur ce site."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problème lors de l’enregistrement de l’avis."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Le type renseigné pour saveKnownGroups n’est pas valable"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problème lors de l’enregistrement de la boîte de réception du groupe."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5367,7 +5385,7 @@ msgid ""
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
 "Il utilise le logiciel de micro-blogging [StatusNet](http://status.net/), "
-"version %s, disponible sous la licence [GNU Affero General Public License] "
+"version %s, disponible sous la licence [GNU Affero General Public License]"
 "(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
 
 #. TRANS: DT element for StatusNet site content license.
@@ -5677,44 +5695,21 @@ msgstr "Commande complétée"
 msgid "Command failed"
 msgstr "Échec de la commande"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Aucun avis avec cet identifiant n’existe"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Aucun avis récent pour cet utilisateur"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Impossible de trouver un utilisateur avec le pseudo %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Impossible de trouver un utilisateur local portant le pseudo %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Désolé, cette commande n’a pas encore été implémentée."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Ça n’a pas de sens de se faire un clin d’œil à soi-même !"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Clin d’œil envoyé à %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5725,55 +5720,39 @@ msgstr ""
 "Abonnés : %2$s\n"
 "Messages : %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Avis ajouté aux favoris."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Vous êtes déjà membre de ce groupe"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Impossible d’inscrire l’utilisateur %1$s au groupe %2$s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Impossible de retirer l’utilisateur %1$s du groupe %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nom complet : %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Emplacement : %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Site Web : %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "À propos : %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5784,148 +5763,104 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "Message trop long ! La taille maximale est de %1$d caractères ; vous en avez "
 "entré %2$d."
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Message direct envoyé à %s."
-
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Une erreur est survenue pendant l’envoi de votre message."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Impossible de reprendre votre propre avis"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Avis déjà repris"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Avis de %s repris"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Erreur lors de la reprise de l’avis."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"Avis trop long ! La taille maximale est de %d caractères ; vous en avez "
-"entré %d."
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Réponse à %s envoyée"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Problème lors de l’enregistrement de l’avis."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Indiquez le nom de l’utilisateur auquel vous souhaitez vous abonner"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Impossible de s'inscrire aux profils OMB par cette commande."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Abonné à %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Indiquez le nom de l’utilisateur duquel vous souhaitez vous désabonner"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Désabonné de %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Cette commande n’a pas encore été implémentée."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Avertissements désactivés."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Impossible de désactiver les avertissements."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Avertissements activés."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Impossible d’activer les avertissements."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "La commande d’ouverture de session est désactivée"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Ce lien n’est utilisable qu’une seule fois, et est valable uniquement "
-"pendant 2 minutes : %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Désabonné de %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Vous n’êtes abonné(e) à personne."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Vous êtes abonné à cette personne :"
 msgstr[1] "Vous êtes abonné à ces personnes :"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Personne ne s’est abonné à vous."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Cette personne est abonnée à vous :"
 msgstr[1] "Ces personnes sont abonnées à vous :"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Vous n’êtes membre d’aucun groupe."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Vous êtes membre de ce groupe :"
 msgstr[1] "Vous êtes membre de ces groupes :"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6683,11 +6618,11 @@ msgstr "Envoyer un message direct"
 msgid "To"
 msgstr "À"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caractères restants"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Envoyer"
@@ -6696,28 +6631,28 @@ msgstr "Envoyer"
 msgid "Send a notice"
 msgstr "Envoyer un avis"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Quoi de neuf, %s ?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Attacher"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Attacher un fichier"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Partager ma localisation."
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Ne pas partager ma localisation"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6754,6 +6689,10 @@ msgstr "%1$u° %2$u' %3$u\" %4$s %5$u° %6$u' %7$u\" %8$s"
 msgid "at"
 msgstr "chez"
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "dans le contexte"
@@ -7099,11 +7038,6 @@ msgstr "Ne plus suivre cet utilisateur"
 msgid "Unsubscribe"
 msgstr "Désabonnement"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "L’utilisateur %s (%d) n’a pas de profil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Modifier l’avatar"
@@ -7151,56 +7085,56 @@ msgid "Moderator"
 msgstr "Modérateur"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "il y a quelques secondes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "il y a 1 minute"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "il y a %d minutes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "il y a 1 heure"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "il y a %d heures"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "il y a 1 jour"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "il y a %d jours"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "il y a 1 mois"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "il y a %d mois"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "il y a environ 1 an"
 
@@ -7214,10 +7148,3 @@ msgstr "&s n’est pas une couleur valide !"
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
 "%s n’est pas une couleur valide ! Utilisez 3 ou 6 caractères hexadécimaux."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Message trop long ! La taille maximale est de %1$d caractères ; vous en avez "
-"entré %2$d."
index 8d30fb829638ddc2a749d4e4c89663213f0eb04d..7facd66fcda940886bb15d616ac697d4cc05d095 100644 (file)
@@ -8,60 +8,33 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:29+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:08+0000\n"
 "Language-Team: Irish\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ga\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : "
 "4;\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "Aceptar"
-
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
-#, fuzzy
 msgid "Site access settings"
-msgstr "Configuracións de Twitter"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "Rexistrar"
+msgstr "Configuración de perfil"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "Privacidade"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
 msgstr ""
 
-#. TRANS: Checkbox label for configuring site as invite only.
-#: actions/accessadminpanel.php:176
-#, fuzzy
-msgid "Invite only"
-msgstr "Invitar"
-
 #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
 #: actions/accessadminpanel.php:183
 msgid "Disable new registrations."
@@ -69,35 +42,10 @@ msgstr ""
 
 #. TRANS: Checkbox label for disabling new user registrations.
 #: actions/accessadminpanel.php:185
-#, fuzzy
 msgid "Closed"
-msgstr "Bloquear"
-
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Configuracións de Twitter"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Gardar"
-
-#. TRANS: Server error when page not found (404)
-#: actions/all.php:68 actions/public.php:98 actions/replies.php:93
-#: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
-msgid "No such page."
-msgstr "Non existe a etiqueta."
+msgstr ""
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -117,17 +65,11 @@ msgstr "Non existe a etiqueta."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Ningún usuario."
 
-#. TRANS: Page title. %1$s is user nickname, %2$d is page number
-#: actions/all.php:90
-#, fuzzy, php-format
-msgid "%1$s and friends, page %2$d"
-msgstr "%s e amigos"
-
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
 #. TRANS: Message is used as link title. %s is a user nickname.
@@ -138,24 +80,6 @@ msgstr "%s e amigos"
 msgid "%s and friends"
 msgstr "%s e amigos"
 
-#. TRANS: %1$s is user nickname
-#: actions/all.php:107
-#, fuzzy, php-format
-msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "Fonte para os amigos de %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:116
-#, fuzzy, php-format
-msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "Fonte para os amigos de %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, fuzzy, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr "Fonte para os amigos de %s"
-
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
 #, php-format
@@ -185,12 +109,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-#, fuzzy
-msgid "You and friends"
-msgstr "%s e amigos"
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -199,32 +117,6 @@ msgstr "%s e amigos"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr "Actualizacións dende %1$s e amigos en %2$s!"
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Método da API non atopado"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -245,11 +137,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Non se puido actualizar o usuario."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -260,11 +147,6 @@ msgstr "Non se puido actualizar o usuario."
 msgid "User has no profile."
 msgstr "O usuario non ten perfil."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Non se puido gardar o perfil."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -277,28 +159,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
-msgid "Unable to save your design settings."
-msgstr "Non se puideron gardar os teus axustes de Twitter!"
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Non se puido actualizar o usuario."
-
-#: actions/apiblockcreate.php:105
-#, fuzzy
-msgid "You cannot block yourself!"
-msgstr "Non se puido actualizar o usuario."
-
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
 msgstr "Bloqueo de usuario fallido."
@@ -307,11 +167,6 @@ msgstr "Bloqueo de usuario fallido."
 msgid "Unblock user failed."
 msgstr "Desbloqueo de usuario fallido."
 
-#: actions/apidirectmessage.php:89
-#, fuzzy, php-format
-msgid "Direct messages from %s"
-msgstr "Mensaxes directas para %s"
-
 #: actions/apidirectmessage.php:93
 #, php-format
 msgid "All the direct messages sent from %s"
@@ -332,10 +187,9 @@ msgid "No message text!"
 msgstr "Non hai mensaxes de texto!"
 
 #: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max message size is %d chars."
-msgstr ""
-"Iso é demasiado longo. O tamaño máximo para unha mensaxe é de 140 caracteres."
+msgstr "Podes actualizar a túa información do perfil persoal aquí"
 
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
@@ -351,28 +205,18 @@ msgstr ""
 msgid "No status found with that ID."
 msgstr "Non se atopou un estado con ese ID."
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Este chío xa é un favorito!"
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Non se puido crear o favorito."
 
-#: actions/apifavoritedestroy.php:123
-#, fuzzy
-msgid "That status is not a favorite."
-msgstr "Este chío non é un favorito!"
-
 #: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
 msgid "Could not delete favorite."
 msgstr "Non se puido eliminar o favorito."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
+msgstr "Non podes seguir a este usuario: %s xa está na túa lista."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -380,31 +224,20 @@ msgid "Could not follow user: %s is already on your list."
 msgstr "Non podes seguir a este usuario: %s xa está na túa lista."
 
 #: actions/apifriendshipsdestroy.php:109
-#, fuzzy
 msgid "Could not unfollow user: User not found."
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-
-#: actions/apifriendshipsdestroy.php:120
-#, fuzzy
-msgid "You cannot unfollow yourself."
-msgstr "Non se puido actualizar o usuario."
+msgstr "Non podes seguir a este usuario: %s xa está na túa lista."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
-"Dous identificadores de usuario ou nomes_en_pantalla deben ser "
-"proporcionados."
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "Non se pudo recuperar a liña de tempo publica."
+msgstr "Non se puido actualizar o usuario."
 
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "Non se puido atopar ningún estado"
+msgstr "Non se puido actualizar o usuario."
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
@@ -441,7 +274,7 @@ msgstr "O nome completo é demasiado longo (max 255 car)."
 #: actions/newapplication.php:172
 #, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "O teu Bio é demasiado longo (max 140 car.)."
+msgstr "O teu Bio é demasiado longo (max %d car.)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -455,17 +288,6 @@ msgstr "A localización é demasiado longa (max 255 car.)."
 msgid "Too many aliases! Maximum %d."
 msgstr ""
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "Etiqueta inválida: '%s'"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "O alcume xa está sendo empregado por outro usuario. Tenta con outro."
-
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
@@ -474,70 +296,53 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "Método da API non atopado"
+msgstr "Non atopado"
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Xa estas suscrito a estes usuarios:"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
-
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
+#, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
+msgstr "Non podes seguir a este usuario: %s xa está na túa lista."
 
 #: actions/apigroupleave.php:115
 msgid "You are not a member of this group."
 msgstr "Non estás suscrito a ese perfil"
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
+msgstr "Non podes seguir a este usuario: %s xa está na túa lista."
 
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "%s's groups"
-msgstr "Usuarios"
+msgstr ""
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "%1s non é unha orixe fiable."
-
-#. TRANS: Message is used as a title. %s is a site name.
-#. TRANS: Message is used as a page title. %s is a nick name.
-#: actions/apigrouplistall.php:92 actions/usergroups.php:63
 #, php-format
-msgid "%s groups"
+msgid "%1$s groups %2$s is a member of."
 msgstr ""
 
-#: actions/apigrouplistall.php:96
-#, fuzzy, php-format
-msgid "groups on %s"
-msgstr "Outras opcions"
-
 #: actions/apimediaupload.php:99
-#, fuzzy
 msgid "Upload failed."
-msgstr "Subir"
+msgstr "Comando fallido"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Tamaño inválido."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -556,21 +361,6 @@ msgstr "Tamaño inválido."
 msgid "There was a problem with your session token. Try again, please."
 msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Usuario ou contrasinal inválidos."
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Acounteceu un erro configurando o usuario."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Erro ó inserir o hashtag na BD: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -611,12 +401,6 @@ msgid ""
 "give access to your %4$s account to third parties you trust."
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to user settings
-#: actions/apioauthauthorize.php:310 lib/action.php:450
-#, fuzzy
-msgid "Account"
-msgstr "Sobre"
-
 #: actions/apioauthauthorize.php:313 actions/login.php:252
 #: actions/profilesettings.php:106 actions/register.php:431
 #: actions/showgroup.php:245 actions/tagother.php:94
@@ -635,11 +419,6 @@ msgstr "Contrasinal"
 msgid "Deny"
 msgstr ""
 
-#: actions/apioauthauthorize.php:334
-#, fuzzy
-msgid "Allow"
-msgstr "Todos"
-
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
 msgstr ""
@@ -657,20 +436,10 @@ msgstr "Non deberías eliminar o estado de outro usuario"
 msgid "No such notice."
 msgstr "Ningún chío."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "Non se pode activar a notificación."
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "Eliminar chío"
-
-#: actions/apistatusesshow.php:139
-#, fuzzy
-msgid "Status deleted."
-msgstr "Avatar actualizado."
+msgstr "Non se pode eliminar este chíos."
 
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
@@ -680,41 +449,35 @@ msgstr "Non existe ningún estado con esa ID atopada."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max notice size is %d chars."
-msgstr ""
-"Iso é demasiado longo. O tamaño máximo para un chío é de 140 caracteres."
+msgstr "Podes actualizar a túa información do perfil persoal aquí"
 
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Non atopado"
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "Formato de ficheiro de imaxe non soportado."
-
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favoritos dende %s"
+msgstr "Estado de %1$s en  %2$s"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s updates favorited by %s / %s."
+msgstr "Hai %1$s chíos en resposta a chíos dende %2$s / %3$s."
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Chíos que respostan a %2$s"
+msgstr "Estado de %1$s en  %2$s"
 
 #: actions/apitimelinementions.php:131
 #, php-format
@@ -731,34 +494,18 @@ msgstr "Liña de tempo pública de %s"
 msgid "%s updates from everyone!"
 msgstr "%s chíos de calquera!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "Replies to %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "Replies to %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr "Chíos tagueados con %s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Actualizacións dende %1$s en %2$s!"
-
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "Método da API en contrución."
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "Ningún documento."
+msgstr "Non existe a etiqueta."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -781,23 +528,16 @@ msgstr "Tamaño inválido."
 msgid "Avatar"
 msgstr "Avatar"
 
-#: actions/avatarsettings.php:78
-#, fuzzy, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Podes actualizar a túa información do perfil persoal aquí"
-
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "Usuario sen un perfil que coincida."
+msgstr "O usuario non ten perfil."
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
-#, fuzzy
 msgid "Avatar settings"
-msgstr "Configuracións de Twitter"
+msgstr "Configuración de perfil"
 
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:202 actions/grouplogo.php:262
@@ -810,10 +550,9 @@ msgid "Preview"
 msgstr ""
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
-#, fuzzy
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
-msgstr "eliminar"
+msgstr "Eliminar chío"
 
 #: actions/avatarsettings.php:166 actions/grouplogo.php:236
 msgid "Upload"
@@ -823,19 +562,10 @@ msgstr "Subir"
 msgid "Crop"
 msgstr ""
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Non se especificou ningún perfil."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
 
-#: actions/avatarsettings.php:347 actions/grouplogo.php:380
-msgid "Lost our file data."
-msgstr ""
-
 #: actions/avatarsettings.php:370
 msgid "Avatar updated."
 msgstr "Avatar actualizado."
@@ -844,15 +574,9 @@ msgstr "Avatar actualizado."
 msgid "Failed updating avatar."
 msgstr "Acounteceu un fallo ó actualizar o avatar."
 
-#: actions/avatarsettings.php:397
-#, fuzzy
-msgid "Avatar deleted."
-msgstr "Avatar actualizado."
-
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Xa bloqueaches a este usuario."
+msgstr "Xa estas suscrito a estes usuarios:"
 
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
 msgid "Block user"
@@ -876,89 +600,32 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "No"
-
-#. TRANS: Submit button title for 'No' when blocking a user.
-#. TRANS: Submit button title for 'No' when deleting a user.
-#: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
-msgid "Do not block this user"
-msgstr "Bloquear usuario"
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Si"
-
-#. TRANS: Submit button title for 'Yes' when blocking a user.
-#: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-#, fuzzy
-msgid "Block this user"
-msgstr "Bloquear usuario"
+msgstr ""
 
 #: actions/block.php:187
 msgid "Failed to save block information."
 msgstr "Erro ao gardar información de bloqueo."
 
-#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
-#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
-#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
-#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
-#: actions/groupmembers.php:83 actions/groupmembers.php:90
-#: actions/grouprss.php:98 actions/grouprss.php:105
-#: actions/groupunblock.php:86 actions/joingroup.php:82
-#: actions/joingroup.php:93 actions/leavegroup.php:82
-#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
-msgid "No such group."
-msgstr "Non existe a etiqueta."
-
 #: actions/blockedfromgroup.php:97
 #, php-format
 msgid "%s blocked profiles"
 msgstr ""
 
-#: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
-msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s e amigos"
-
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
 msgstr ""
 
-#: actions/blockedfromgroup.php:288
-#, fuzzy
-msgid "Unblock user from group"
-msgstr "Desbloqueo de usuario fallido."
-
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr "Desbloquear"
 
-#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-#, fuzzy
-msgid "Unblock this user"
-msgstr "Bloquear usuario"
-
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "Chíos dende SMS"
+msgstr "Replies to %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -974,9 +641,9 @@ msgstr "¡Ese código de confirmación non é para ti!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Tipo de enderezo %s non recoñecido"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -1005,52 +672,26 @@ msgid "Couldn't delete email confirmation."
 msgstr "Non se pode eliminar a confirmación de email."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Confirmar enderezo"
+msgstr "Direccións de correo confirmadas actualmente."
 
 #: actions/confirmaddress.php:161
 #, php-format
 msgid "The address \"%s\" has been confirmed for your account."
 msgstr "A dirección \"%s\" xa foi confirmada para a túa conta."
 
-#: actions/conversation.php:99
-#, fuzzy
-msgid "Conversation"
-msgstr "Código de confirmación."
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "Chíos"
 
-#: actions/deleteapplication.php:63
-#, fuzzy
-msgid "You must be logged in to delete an application."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "O chío non ten perfil"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Non estás suscrito a ese perfil"
-
-#: actions/deleteapplication.php:102 actions/editapplication.php:127
-#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1263
-#, fuzzy
-msgid "There was a problem with your session token."
-msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
+msgstr "Confirmation code not found."
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
 msgid "Delete application"
-msgstr "Ningún chío."
+msgstr ""
 
 #: actions/deleteapplication.php:149
 msgid ""
@@ -1059,17 +700,10 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "Non se pode eliminar este chíos."
-
 #. TRANS: Submit button title for 'Yes' when deleting an application.
 #: actions/deleteapplication.php:164
-#, fuzzy
 msgid "Delete this application"
-msgstr "Eliminar chío"
+msgstr ""
 
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -1087,13 +721,10 @@ msgid "Can't delete this notice."
 msgstr "Non se pode eliminar este chíos."
 
 #: actions/deletenotice.php:103
-#, fuzzy
 msgid ""
 "You are about to permanently delete a notice. Once this is done, it cannot "
 "be undone."
 msgstr ""
-"Vas a eliminar permanentemente este chío. Unha vez feito, xa non hai volta "
-"atrás... Quedas avisado!"
 
 #: actions/deletenotice.php:109 actions/deletenotice.php:141
 msgid "Delete notice"
@@ -1103,32 +734,9 @@ msgstr "Eliminar chío"
 msgid "Are you sure you want to delete this notice?"
 msgstr "Estas seguro que queres eliminar este chío?"
 
-#. TRANS: Submit button title for 'No' when deleting a notice.
-#: actions/deletenotice.php:151
-#, fuzzy
-msgid "Do not delete this notice"
-msgstr "Non se pode eliminar este chíos."
-
-#. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
-#, fuzzy
-msgid "Delete this notice"
-msgstr "Eliminar chío"
-
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Non se puido actualizar o usuario."
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "Non deberías eliminar o estado de outro usuario"
-
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
 msgid "Delete user"
-msgstr "eliminar"
+msgstr "Eliminar chío"
 
 #: actions/deleteuser.php:136
 msgid ""
@@ -1136,12 +744,6 @@ msgid ""
 "the user from the database, without a backup."
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when deleting a user.
-#: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
-msgid "Delete this user"
-msgstr "Eliminar chío"
-
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
@@ -1153,44 +755,17 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Tamaño inválido."
-
-#: actions/designadminpanel.php:322
-#, fuzzy, php-format
-msgid "Theme not available: %s."
-msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
-
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Cambiar contrasinal"
-
-#: actions/designadminpanel.php:431
-#, fuzzy
-msgid "Site logo"
-msgstr "Invitar"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
 msgstr "Modificado"
 
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
-msgstr "Novo chío"
-
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
 msgstr ""
 
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Novo chío"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1205,13 +780,6 @@ msgstr ""
 msgid "Background"
 msgstr ""
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr "Podes actualizar a túa información do perfil persoal aquí"
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1230,29 +798,13 @@ msgstr ""
 msgid "Tile background image"
 msgstr ""
 
-#: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
-msgid "Change colours"
-msgstr "Cambiar contrasinal"
-
-#: actions/designadminpanel.php:587 lib/designsettings.php:191
-#, fuzzy
-msgid "Content"
-msgstr "Conectar"
-
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "Buscar"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "Texto"
 
 #: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
 msgid "Links"
-msgstr "Lista"
+msgstr "Inicio de sesión"
 
 #: actions/designadminpanel.php:651
 msgid "Advanced"
@@ -1285,10 +837,6 @@ msgstr ""
 msgid "Save"
 msgstr "Gardar"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr "Este chío non é un favorito!"
@@ -1298,75 +846,22 @@ msgid "Add to favorites"
 msgstr "Engadir a favoritos"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Ningún documento."
+msgstr "Ningún chío."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Outras opcions"
-
-#: actions/editapplication.php:66
-#, fuzzy
-msgid "You must be logged in to edit an application."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Ningún chío."
-
-#: actions/editapplication.php:161
-#, fuzzy
-msgid "Use this form to edit your application."
 msgstr ""
-"Usa este formulario para engadir etiquetas aos teus seguidores ou aos que "
-"sigues."
-
-#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
-msgid "Name is required."
-msgstr "A mesma contrasinal que arriba. Requerido."
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "O nome completo é demasiado longo (max 255 car)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "O alcume xa está sendo empregado por outro usuario. Tenta con outro."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "Subscricións"
+msgstr "Subscrición rexeitada"
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "A páxina persoal semella que non é unha URL válida."
-
-#: actions/editapplication.php:203 actions/newapplication.php:188
-msgid "Organization is required."
-msgstr ""
-
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "A localización é demasiado longa (max 255 car.)."
-
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
@@ -1375,62 +870,20 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Non se puido actualizar o usuario."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
 msgstr ""
 
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-#, fuzzy
-msgid "You must be logged in to create a group."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/editgroup.php:107 actions/editgroup.php:172
-#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
-msgid "You must be an admin to edit the group."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/editgroup.php:158
-msgid "Use this form to edit the group."
-msgstr ""
-
 #: actions/editgroup.php:205 actions/newgroup.php:145
 #, php-format
 msgid "description is too long (max %d chars)."
 msgstr "O teu Bio é demasiado longo (max 140 car.)."
 
-#: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\""
-msgstr "Etiqueta inválida: '%s'"
-
-#: actions/editgroup.php:258
-#, fuzzy
-msgid "Could not update group."
-msgstr "Non se puido actualizar o usuario."
-
-#. TRANS: Server exception thrown when creating group aliases failed.
-#: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
-msgid "Could not create aliases."
-msgstr "Non se puido crear o favorito."
-
-#: actions/editgroup.php:280
-#, fuzzy
-msgid "Options saved."
-msgstr "Configuracións gardadas."
-
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Configuración de Correo"
+msgstr "Configuración de perfil"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1439,13 +892,6 @@ msgstr "Configuración de Correo"
 msgid "Manage how you get email from %%site.name%%."
 msgstr "Xestina como recibir correo dende %%site.name%%."
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Enderezos de correo"
-
 #. TRANS: Form note in e-mail settings form.
 #: actions/emailsettings.php:112
 msgid "Current confirmed email address."
@@ -1459,10 +905,9 @@ msgstr "Direccións de correo confirmadas actualmente."
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "Eliminar"
+msgstr "Recuperar"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1473,17 +918,6 @@ msgstr ""
 "GTalk que ten que haber unha mensaxe coas seguintes instrucións. (Engadiches "
 "a %s á túa lista de contactos?)"
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Cancelar"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1494,10 +928,9 @@ msgstr "Dirección de correo, coma \"Nomede Usuario@example.org\""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Engadir"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1520,16 +953,14 @@ msgstr "Crear unha nova dirección de correo para enviar, elimina a antiga."
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Novo"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "Preferencias"
+msgstr "Enderezos de correo"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1546,12 +977,6 @@ msgstr "Enviar un correo cando alguen enganda un chío meu coma favorito."
 msgid "Send me email when someone sends me a private message."
 msgstr "Enviarme un email cando alguén me envíe unha mensaxe privada."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:199
-#, fuzzy
-msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Enviarme un email cando alguén me envíe unha mensaxe privada."
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
@@ -1567,12 +992,6 @@ msgstr "Quero enviar chíos dende o mail."
 msgid "Publish a MicroID for my email address."
 msgstr "Publicar unha MicroID dende a miña dirección de correo."
 
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Preferencias gardadas."
-
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
@@ -1625,17 +1044,10 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Non hai ningunha confirmación pendente para cancelar."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Esa é unha enderezo IM incorrecto."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Confirmación cancealada."
+msgstr "Non hai ningunha confirmación pendente para cancelar."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1645,9 +1057,8 @@ msgstr "Esa non é a túa dirección de correo."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Enderezo eliminado."
+msgstr "Dirección de correo entrante eliminada."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1683,15 +1094,9 @@ msgstr "Desactivar favorito"
 msgid "Popular notices"
 msgstr "Chíos populares"
 
-#: actions/favorited.php:67
-#, fuzzy, php-format
-msgid "Popular notices, page %d"
-msgstr "Chíos populares"
-
 #: actions/favorited.php:79
-#, fuzzy
 msgid "The most popular notices on the site right now."
-msgstr "Amoa os tags máis populares dende a semana pasada"
+msgstr ""
 
 #: actions/favorited.php:150
 msgid "Favorite notices appear on this page but no one has favorited one yet."
@@ -1716,54 +1121,31 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "Chíos favoritos de %s"
 
-#: actions/favoritesrss.php:115
-#, fuzzy, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr "Actualizacións dende %1$s en %2$s!"
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
 msgstr "Usuarios destacados"
 
-#: actions/featured.php:71
-#, fuzzy, php-format
-msgid "Featured users, page %d"
-msgstr "Usuarios destacados"
-
 #: actions/featured.php:99
 #, php-format
 msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "Novo chío"
+msgstr "Ningún chío."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Novo chío"
-
-#: actions/file.php:42
-#, fuzzy
-msgid "No attachments."
-msgstr "Ningún documento."
-
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "Ningún documento."
+msgstr "Ningún chío."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "¡Non esperaba esa resposta!"
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "O usuario  que está sendo escoitado non existe."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1774,24 +1156,16 @@ msgid "That user has blocked you from subscribing."
 msgstr "Este usuario non che permite suscribirte a el."
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Non está autorizado."
+msgstr "Non estás suscrito a ese perfil"
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Non se pode convertir o token da petición a tokens de acceso."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Versión de protocolo OMB descoñecida."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Acounteceu un erro actualizando o perfil remoto"
+msgstr ""
 
 #: actions/getfile.php:79
 msgid "No such file."
@@ -1801,24 +1175,17 @@ msgstr "Ningún chío."
 msgid "Cannot read file."
 msgstr "Bloqueo de usuario fallido."
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Tamaño inválido."
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Non podes enviar mensaxes a este usurio."
+msgstr "Tes restrinxido o envio de chíos neste sitio."
 
 #: actions/grantrole.php:82
-#, fuzzy
 msgid "User already has this role."
-msgstr "O usuario bloqueoute."
+msgstr "O usuario non ten perfil."
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1832,46 +1199,13 @@ msgstr "Non se especificou ningún perfil."
 msgid "No profile with that ID."
 msgstr "Non se atopou un perfil con ese ID."
 
-#: actions/groupblock.php:81 actions/groupunblock.php:81
-#: actions/makeadmin.php:81
-#, fuzzy
-msgid "No group specified."
-msgstr "Non se especificou ningún perfil."
-
 #: actions/groupblock.php:91
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-#, fuzzy
-msgid "User is already blocked from group."
-msgstr "O usuario bloqueoute."
-
 #: actions/groupblock.php:100
-#, fuzzy
 msgid "User is not a member of group."
-msgstr "%1s non é unha orixe fiable."
-
-#: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
-msgid "Block user from group"
-msgstr "Bloquear usuario"
-
-#: actions/groupblock.php:160
-#, fuzzy, php-format
-msgid ""
-"Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
-"will be removed from the group, unable to post, and unable to subscribe to "
-"the group in the future."
-msgstr ""
-"Seguro que queres bloquear a este usuario? Despois diso, vai ser de-suscrito "
-"do teur perfil, non será capaz de suscribirse a ti nun futuro, e non vas a "
-"ser notificado de ningunha resposta-@ del."
-
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-msgid "Do not block this user from this group"
-msgstr ""
+msgstr "Non estás suscrito a ese perfil"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
@@ -1883,14 +1217,8 @@ msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Sen id."
-
-#: actions/groupdesignsettings.php:68
-#, fuzzy
-msgid "You must be logged in to edit a group."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
+msgstr "Sen Identificador de Jabber."
 
 #: actions/groupdesignsettings.php:144
 msgid "Group design"
@@ -1902,51 +1230,15 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Non se puido actualizar o usuario."
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "Preferencias gardadas."
-
-#: actions/grouplogo.php:142 actions/grouplogo.php:195
-msgid "Group logo"
-msgstr ""
-
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
-
 #: actions/grouplogo.php:365
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "Avatar actualizado."
-
-#: actions/grouplogo.php:401
-#, fuzzy
-msgid "Failed updating logo."
-msgstr "Acounteceu un fallo ó actualizar o avatar."
-
 #: actions/groupmembers.php:100 lib/groupnav.php:92
 #, php-format
 msgid "%s group members"
 msgstr ""
 
-#: actions/groupmembers.php:103
-#, php-format
-msgid "%1$s group members, page %2$d"
-msgstr ""
-
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
 msgstr ""
@@ -1980,22 +1272,11 @@ msgstr ""
 msgid "%s timeline"
 msgstr "Liña de tempo de %s"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "Actualizacións dende %1$s en %2$s!"
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
 msgstr ""
 
-#: actions/groups.php:64
-#, php-format
-msgid "Groups, page %d"
-msgstr ""
-
 #: actions/groups.php:90
 #, php-format
 msgid ""
@@ -2007,29 +1288,13 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "Crear nova conta"
-
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"Procurar xente en %%site.name%% pola seu nome, localización, ou intereses. "
-"Separa os termos por espazos; deben ter 3 caracteres ou máis."
-
-#: actions/groupsearch.php:58
-#, fuzzy
-msgid "Group search"
-msgstr "Procurar xente."
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "Non se atoparon resultados"
+msgstr "Resultados do comando"
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -2049,20 +1314,14 @@ msgstr ""
 msgid "Only an admin can unblock group members."
 msgstr ""
 
-#: actions/groupunblock.php:95
-#, fuzzy
-msgid "User is not blocked from group."
-msgstr "O usuario bloqueoute."
-
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
 msgstr "Acounteceu un erro borrando o bloqueo."
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "Configuracións de IM"
+msgstr "Configuración de perfil"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2084,9 +1343,8 @@ msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "Enderezo de IM"
+msgstr "Enderezos de correo"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2117,9 +1375,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Preferencias"
+msgstr "Preferencias gardadas."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2188,17 +1445,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Esa é unha enderezo IM incorrecto."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Non se pode eliminar a confirmación de email."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Confirmación cancealada."
+msgstr "Sen código de confirmación."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2208,14 +1458,8 @@ msgstr "Esa non é a túa conta Jabber."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "Enderezo eliminado."
-
-#: actions/inbox.php:59
-#, fuzzy, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr "Band. Entrada para %s"
+msgstr "Dirección de correo entrante eliminada."
 
 #: actions/inbox.php:62
 #, php-format
@@ -2232,9 +1476,9 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
+msgstr "Non deberías eliminar o estado de outro usuario"
 
 #: actions/invite.php:72
 #, php-format
@@ -2255,7 +1499,7 @@ msgstr "Xa estas suscrito a estes usuarios:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2302,10 +1546,9 @@ msgstr "Opcionalmente engadir unha mensaxe persoal á invitación."
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Enviar"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2369,39 +1612,10 @@ msgstr ""
 "\n"
 "Saudiños, %2$s\n"
 
-#: actions/joingroup.php:60
-#, fuzzy
-msgid "You must be logged in to join a group."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Sen alcume."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, fuzzy, php-format
-msgid "%1$s joined group %2$s"
-msgstr "%s / Favoritos dende %s"
-
-#: actions/leavegroup.php:60
-#, fuzzy
-msgid "You must be logged in to leave a group."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
-msgid "You are not a member of that group."
-msgstr "Non estás suscrito a ese perfil"
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%s / Favoritos dende %s"
+msgstr "Estado de %1$s en  %2$s"
 
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
@@ -2411,11 +1625,6 @@ msgstr "Sesión xa iniciada"
 msgid "Incorrect username or password."
 msgstr "Usuario ou contrasinal incorrectos."
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Non está autorizado."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Inicio de sesión"
@@ -2445,52 +1654,27 @@ msgstr ""
 "contrasinal antes de cambiar as túas preferenzas."
 
 #: actions/login.php:292
-#, fuzzy
 msgid "Login with your username and password."
-msgstr "Accede co teu nome de usuario e contrasinal."
+msgstr "Usuario ou contrasinal incorrectos."
 
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Accede co teu nome de usuario e contrasinal. ¿Non tes un todavía?? [Rexistra]"
-"(%%action.register%%) unha nova conta, ou accede co teu enderezo [OpenID](%%"
-"action.openidlogin%%). "
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, fuzzy, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "O usuario bloqueoute."
-
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-
-#: actions/makeadmin.php:146
-#, fuzzy, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr "O usuario bloqueoute."
-
-#: actions/microsummary.php:69
-#, fuzzy
-msgid "No current status."
-msgstr "Sen estado actual"
+msgstr ""
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
-msgstr "Ningún chío."
-
-#: actions/newapplication.php:64
-#, fuzzy
-msgid "You must be logged in to register an application."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
+msgstr ""
 
 #: actions/newapplication.php:143
 msgid "Use this form to register a new application."
@@ -2500,29 +1684,23 @@ msgstr ""
 msgid "Source URL is required."
 msgstr ""
 
-#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
-msgid "Could not create application."
-msgstr "Non se puido crear o favorito."
-
 #: actions/newgroup.php:53
 msgid "New group"
 msgstr ""
 
-#: actions/newgroup.php:110
-msgid "Use this form to create a new group."
-msgstr ""
-
 #: actions/newmessage.php:71 actions/newmessage.php:231
 msgid "New message"
 msgstr "Nova mensaxe"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Non podes enviar mensaxes a este usurio."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Sen contido!"
 
@@ -2530,24 +1708,15 @@ msgstr "Sen contido!"
 msgid "No recipient specified."
 msgstr "Non se especificou ningún destinatario"
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 "Non te envies mensaxes a ti mesmo!! só fala contigo mesmo baixiño, senón "
 "vante tomar por tolo."
 
-#: actions/newmessage.php:181
-#, fuzzy
-msgid "Message sent"
-msgstr "Non hai mensaxes de texto!"
-
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Mensaxe directo a %s enviado"
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Erro de Ajax"
 
@@ -2555,7 +1724,7 @@ msgstr "Erro de Ajax"
 msgid "New notice"
 msgstr "Novo chío"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Chío publicado"
 
@@ -2573,9 +1742,9 @@ msgid "Text search"
 msgstr "Procura de texto"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Buscar \"%s\" na Liña de tempo"
+msgstr "Mensaxe dende %1$s en %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2592,22 +1761,19 @@ msgid ""
 msgstr ""
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "Actualizacións dende %1$s en %2$s!"
+msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Tódalas actualizacións que coinciden co termo de procura \"%s\""
+msgstr "Actualizacións dende %1$s en %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Este usuario non permite toques, ou non confirmou ainda o seu correo "
-"electrónico."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2617,16 +1783,6 @@ msgstr "Toque enviado"
 msgid "Nudge sent!"
 msgstr "Toque enviado!"
 
-#: actions/oauthappssettings.php:59
-#, fuzzy
-msgid "You must be logged in to list your applications."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/oauthappssettings.php:74
-#, fuzzy
-msgid "OAuth applications"
-msgstr "Outras opcions"
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
@@ -2644,11 +1800,6 @@ msgstr ""
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Non estás suscrito a ese perfil"
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2663,9 +1814,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "O chío non ten perfil"
+msgstr "O usuario non ten perfil."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2674,9 +1824,9 @@ msgstr "Estado de %1$s en  %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Conectar"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2685,8 +1835,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Non é un formato de datos soportado."
 
@@ -2699,9 +1849,8 @@ msgid "Notice Search"
 msgstr "Procura de Chíos"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Outros axustes"
+msgstr "Outras opcions"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2719,11 +1868,6 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr "Servizo de acortado automático a usar."
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Configuración de perfil"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
@@ -2732,34 +1876,9 @@ msgstr ""
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "Sistema de acortamento de URLs demasiado longo (max 50 car.)."
 
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "Non se especificou ningún perfil."
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Non se especificou ningún perfil."
-
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "Non hai identificador de perfil na peticion."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Contido do chío inválido"
-
-#: actions/otp.php:104
-msgid "Login token expired."
-msgstr ""
-
-#: actions/outbox.php:58
-#, fuzzy, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr "Band. Saída para %s"
+msgstr "Sen petición de autorización!"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2775,16 +1894,6 @@ msgstr ""
 msgid "Change password"
 msgstr "Cambiar contrasinal"
 
-#: actions/passwordsettings.php:69
-#, fuzzy
-msgid "Change your password."
-msgstr "Cambiar contrasinal"
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "Contrasinal gardada."
-
 #: actions/passwordsettings.php:104
 msgid "Old password"
 msgstr "Contrasinal antiga"
@@ -2844,39 +1953,29 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
-msgid "Site"
-msgstr "Invitar"
-
-#: actions/pathsadminpanel.php:238
-#, fuzzy
-msgid "Server"
-msgstr "Recuperar"
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2885,11 +1984,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Novo chío"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2922,34 +2016,14 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Avatar"
-
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "Configuracións de Twitter"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Avatar actualizado."
-
-#: actions/pathsadminpanel.php:292
-#, fuzzy
-msgid "Avatar directory"
-msgstr "Avatar actualizado."
+msgstr "Avatar"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
 msgstr ""
 
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:309
 msgid "Background path"
 msgstr ""
@@ -2958,21 +2032,6 @@ msgstr ""
 msgid "Background directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:320
-#, fuzzy
-msgid "SSL"
-msgstr "SMS"
-
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "Recuperar"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Chíos"
-
 #: actions/pathsadminpanel.php:325
 msgid "Always"
 msgstr ""
@@ -2985,19 +2044,13 @@ msgstr ""
 msgid "When to use SSL"
 msgstr ""
 
-#: actions/pathsadminpanel.php:335
-#, fuzzy
-msgid "SSL server"
-msgstr "Recuperar"
-
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Novo chío"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -3013,19 +2066,13 @@ msgid "People search"
 msgstr "Procurar xente."
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "%s non é unha etiqueta de xente válida"
-
-#: actions/peopletag.php:142
-#, fuzzy, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Usuarios auto-etiquetados como %s - páxina %d"
+msgstr "Non é un enderezo de correo válido."
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Contido do chío inválido"
+msgstr "Tamaño inválido."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3044,9 +2091,8 @@ msgstr ""
 "che poida coñecer mellor."
 
 #: actions/profilesettings.php:99
-#, fuzzy
 msgid "Profile information"
-msgstr "Perfil descoñecido"
+msgstr "Configuración de perfil"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -3070,14 +2116,13 @@ msgid "URL of your homepage, blog, or profile on another site"
 msgstr "Enderezo da túa páxina persoal, blogue, ou perfil noutro sitio"
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
+msgstr ""
 
 #: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
 msgid "Describe yourself and your interests"
-msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
+msgstr ""
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3134,11 +2179,6 @@ msgstr ""
 "Suscribirse automáticamente a calquera que se suscriba a min (o mellor para "
 "non humáns)"
 
-#: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
-msgid "Bio is too long (max %d chars)."
-msgstr "O teu Bio é demasiado longo (max 140 car.)."
-
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr "Fuso Horario non seleccionado"
@@ -3156,11 +2196,6 @@ msgstr "Etiqueta inválida: '%s'"
 msgid "Couldn't update user for autosubscribe."
 msgstr "Non se puido actualizar o usuario para autosuscrición."
 
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Non se puideron gardar as etiquetas."
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Non se puido gardar o perfil."
@@ -3183,29 +2218,13 @@ msgstr ""
 msgid "Could not retrieve public stream."
 msgstr "Non se pudo recuperar a liña de tempo publica."
 
-#: actions/public.php:130
-#, fuzzy, php-format
-msgid "Public timeline, page %d"
-msgstr "Liña de tempo pública"
-
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
 msgstr "Liña de tempo pública"
 
-#: actions/public.php:160
-#, fuzzy
-msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Sindicación do Fio Público"
-
-#: actions/public.php:164
-#, fuzzy
-msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Sindicación do Fio Público"
-
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "Sindicación do Fio Público"
+msgstr ""
 
 #: actions/public.php:188
 #, php-format
@@ -3237,22 +2256,9 @@ msgstr ""
 "(http://status.net/). [Únete agora](%%action.register%%) para compartir "
 "chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
 
-#: actions/public.php:247
-#, fuzzy, php-format
-msgid ""
-"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
-"blogging) service based on the Free Software [StatusNet](http://status.net/) "
-"tool."
-msgstr ""
-"Esto é %%site.name%%, un servizo de [micro-blogging](http://en.wikipedia.org/"
-"wiki/Micro-blogging) basado na ferramenta de código aberto [StatusNet]"
-"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
-"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "Sindicación do Fio Público"
+msgstr ""
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3307,24 +2313,10 @@ msgstr "Ese código de confirmación é demasiado antigo. Comeza de novo."
 msgid "Could not update user with confirmed email address."
 msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico."
 
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "O teu alcume neste servidor, ou o teu enderezo rexistrado."
@@ -3405,11 +2397,6 @@ msgstr "A nova contrasinal gardouse correctamente. Xa estas logueado."
 msgid "Sorry, only invited people can register."
 msgstr "Desculpa, só se pode rexistrar a xente con invitación."
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "Acounteceu un erro co código de confirmación."
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "Xa estas rexistrado!!"
@@ -3435,14 +2422,10 @@ msgid "Invalid username or password."
 msgstr "Usuario ou contrasinal inválidos."
 
 #: actions/register.php:350
-#, fuzzy
 msgid ""
 "With this form you can create a new account. You can then post notices and "
 "link up to friends and colleagues. "
 msgstr ""
-"Neste formulario podes crear unha conta de usuario. Logo poderás publicar "
-"chíos, e suscribirte a amigos. (Tes unha conta [OpenID](http://openid.net/)? "
-"Proba o noso [Rexistro OpenID](%%action.openidlogin%%)!)"
 
 #: actions/register.php:432
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@@ -3496,16 +2479,14 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-" agás esta informción privada: contrasinal, dirección de correo electrónico, "
-"dirección IM, número de teléfono."
 
 #: actions/register.php:583
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
@@ -3522,19 +2503,6 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Noraboa, %s! e benvido a %%%%site.name%%%%. Dende aquí, podes...\n"
-"\n"
-"* Ír ó [teu perfil](%s) e enviar o teu primeiro chío.\n"
-"* Engadir unha [conta de Jabber/Gtalk](%%%%action.imsettings%%%%) para "
-"enviar os teus chíos a través de mensaxería instantánea.\n"
-"* [Buscar xente ](%%%%action.peoplesearch%%%%) que poidas coñecer ou que "
-"comparta os teus intereses. \n"
-"* Actualizar as túas [preferencias no perfil](%%%%action.profilesettings%%%"
-"%) para decirlle a outros máis sobre ti. \n"
-"* Ler os [manuais en liña](%%%%doc.help%%%%) para ollar máis cousas que "
-"podes facer aquí. \n"
-"\n"
-"Grazas por rexistrarte e esperamos que laretexes moito."
 
 #: actions/register.php:607
 msgid ""
@@ -3560,11 +2528,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "Suscrición remota"
 
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "Suscrito a %s"
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "Alcume de usuario"
@@ -3591,49 +2554,24 @@ msgid "Invalid profile URL (bad format)"
 msgstr "Enderezo de perfil inválido (formato incorrecto)"
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Non é un enderezo de perfil válido (non ten documento YADIS)."
+msgstr ""
 
 #: actions/remotesubscribe.php:176
-#, fuzzy
 msgid "That’s a local profile! Login to subscribe."
-msgstr "Este é un perfil local! Rexístrate para suscribirte."
+msgstr ""
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Non se puido recoller o token de petición."
-
-#: actions/repeat.php:57
-#, fuzzy
-msgid "Only logged-in users can repeat notices."
-msgstr "Só o usuario pode ler os seus propios buzóns."
-
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Non se especificou ningún perfil."
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Non podes rexistrarte se non estas de acordo coa licenza."
+msgstr ""
 
 #: actions/repeat.php:90
-#, fuzzy
 msgid "You already repeated that notice."
-msgstr "Xa bloqueaches a este usuario."
+msgstr "Xa estas suscrito a estes usuarios:"
 
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "Crear"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "Crear"
+msgstr "Destacado"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3642,24 +2580,24 @@ msgid "Replies to %s"
 msgstr "Replies to %s"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "Mensaxe de %1$s en %2$s"
+msgstr "Replies to %s"
 
 #: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/replies.php:199
 #, php-format
@@ -3682,35 +2620,13 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "Mensaxe de %1$s en %2$s"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Non podes enviar mensaxes a este usurio."
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "Usuario sen un perfil que coincida."
+msgstr "Tes restrinxido o envio de chíos neste sitio."
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Avatar actualizado."
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Non podes enviar mensaxes a este usurio."
-
-#: actions/sandbox.php:72
-#, fuzzy
-msgid "User is already sandboxed."
-msgstr "O usuario bloqueoute."
+msgstr "Estatísticas"
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3740,44 +2656,18 @@ msgstr ""
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "Configuracións de Twitter"
-
-#: actions/showapplication.php:82
-#, fuzzy
-msgid "You must be logged in to view an application."
-msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "O chío non ten perfil"
+msgstr "Configuración de perfil"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Alcume"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "Invitación(s) enviada(s)."
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:187 actions/version.php:200
-#: lib/applicationeditform.php:216 lib/groupeditform.php:172
-#, fuzzy
-msgid "Description"
-msgstr "Subscricións"
+msgstr ""
 
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
@@ -3789,18 +2679,10 @@ msgstr "Estatísticas"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3827,16 +2709,6 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Estas seguro que queres eliminar este chío?"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "Chíos favoritos de %s"
-
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
 msgstr "Non se pode "
@@ -3886,103 +2758,47 @@ msgstr ""
 msgid "%s group"
 msgstr ""
 
-#: actions/showgroup.php:84
-#, fuzzy, php-format
-msgid "%1$s group, page %2$d"
-msgstr "Tódalas subscricións"
-
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "Non existe o perfil."
+msgstr "O usuario non ten perfil."
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-#, fuzzy
-msgid "Note"
-msgstr "Chíos"
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-#, fuzzy
-msgid "Group actions"
-msgstr "Outras opcions"
-
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Fonte de chíos para %s"
-
-#: actions/showgroup.php:350
-#, fuzzy, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/showgroup.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s group"
-msgstr "Band. Saída para %s"
-
-#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
-#, fuzzy
-msgid "Members"
-msgstr "Membro dende"
+msgstr ""
 
 #: actions/showgroup.php:398 lib/profileaction.php:117
 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
-#, fuzzy
 msgid "(None)"
-msgstr "(nada)"
+msgstr ""
 
 #: actions/showgroup.php:404
 msgid "All members"
 msgstr ""
 
 #: actions/showgroup.php:439
-#, fuzzy
 msgid "Created"
-msgstr "Crear"
-
-#: actions/showgroup.php:455
-#, fuzzy, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. [Join now](%%%%action.register%%%%) to become part "
-"of this group and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-"Esto é %%site.name%%, un servizo de [micro-blogging](http://en.wikipedia.org/"
-"wiki/Micro-blogging) basado na ferramenta de código aberto [StatusNet]"
-"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
-"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-
-#: actions/showgroup.php:461
-#, fuzzy, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. "
-msgstr ""
-"Esto é %%site.name%%, un servizo de [micro-blogging](http://en.wikipedia.org/"
-"wiki/Micro-blogging) basado na ferramenta de código aberto [StatusNet]"
-"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
-"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
+msgstr "Destacado"
 
 #: actions/showgroup.php:489
 msgid "Admins"
@@ -4006,45 +2822,30 @@ msgstr "Mensaxe de %1$s en %2$s"
 msgid "Message from %1$s on %2$s"
 msgstr "Mensaxe dende %1$s en %2$s"
 
-#: actions/shownotice.php:90
-#, fuzzy
-msgid "Notice deleted."
-msgstr "Chío publicado"
-
-#: actions/showstream.php:73
-#, fuzzy, php-format
-msgid " tagged %s"
-msgstr "Chíos tagueados con %s"
-
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s e amigos"
+msgstr "%1$s (%2$s)"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (Atom)"
-msgstr "Fonte de chíos para %s"
-
-#: actions/showstream.php:148
-#, fuzzy, php-format
-msgid "FOAF for %s"
-msgstr "Band. Saída para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/showstream.php:200
 #, php-format
@@ -4057,52 +2858,12 @@ msgid ""
 "would be a good time to start :)"
 msgstr ""
 
-#: actions/showstream.php:207
-#, php-format
-msgid ""
-"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
-"%?status_textarea=%2$s)."
-msgstr ""
-
-#: actions/showstream.php:243
-#, fuzzy, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
-"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-"Esto é %%site.name%%, un servizo de [micro-blogging](http://en.wikipedia.org/"
-"wiki/Micro-blogging) basado na ferramenta de código aberto [StatusNet]"
-"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
-"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-
-#: actions/showstream.php:248
-#, fuzzy, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. "
-msgstr ""
-"Esto é %%site.name%%, un servizo de [micro-blogging](http://en.wikipedia.org/"
-"wiki/Micro-blogging) basado na ferramenta de código aberto [StatusNet]"
-"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
-"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "Replies to %s"
-
-#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
-msgid "You cannot silence users on this site."
-msgstr "Non podes enviar mensaxes a este usurio."
-
-#: actions/silence.php:72
-#, fuzzy
-msgid "User is already silenced."
-msgstr "O usuario bloqueoute."
+#: actions/showstream.php:207
+#, php-format
+msgid ""
+"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
+"%?status_textarea=%2$s)."
+msgstr ""
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
@@ -4113,9 +2874,8 @@ msgid "Site name must have non-zero length."
 msgstr ""
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Non é unha dirección de correo válida"
+msgstr "Non é un enderezo de correo válido."
 
 #: actions/siteadminpanel.php:159
 #, php-format
@@ -4134,11 +2894,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Novo chío"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4159,16 +2914,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Nova dirección de email para posterar en %s"
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Localización"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4177,11 +2922,6 @@ msgstr ""
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
-#: actions/siteadminpanel.php:262
-#, fuzzy
-msgid "Default language"
-msgstr "Linguaxe preferida"
-
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
 msgstr ""
@@ -4207,43 +2947,29 @@ msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "Novo chío"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Nova mensaxe"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Non se puideron gardar os teus axustes de Twitter!"
+msgstr "Chíos"
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:176
-#, fuzzy
 msgid "Site notice text"
-msgstr "Novo chío"
+msgstr "Eliminar chío"
 
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:198
-#, fuzzy
 msgid "Save site notice"
-msgstr "Novo chío"
+msgstr "Eliminar chío"
 
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "Configuracións de SMS"
+msgstr "Configuración de perfil"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4259,9 +2985,8 @@ msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "Enderezo de IM"
+msgstr "Enderezos de correo"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4283,18 +3008,10 @@ msgstr "Código de confirmación."
 msgid "Enter the code you received on your phone."
 msgstr "Insire o código que recibiches no teu teléfono."
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Confirmar"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
-msgstr "Número de Teléfono do SMS"
+msgstr "Non hai ningún número de teléfono."
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
@@ -4303,9 +3020,8 @@ msgstr "Número de teléfono, sen puntuacións ou espazos, co código de área"
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Preferencias"
+msgstr "Preferencias gardadas."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4316,12 +3032,6 @@ msgstr ""
 "Enviarme chíos mediante SMS, entendo que a miña operadora poida cobrarme "
 "grandes facturas."
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Preferencias gardadas."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
@@ -4344,12 +3054,11 @@ msgstr "O número de teléfono xa pertence a outro usuario."
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
 msgstr ""
-"Enviouseche o código de confirmación ó número de teléfono que engadiches. "
+"Enviouseche un código de confirmación á dirección de correo que engadiches. "
 "Comproba a túa bandexa de entrada (ou spam!) polo código e instrucións que "
 "debes seguir."
 
@@ -4360,9 +3069,8 @@ msgstr "Ese é un número de confirmación incorrecto."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Confirmación cancealada."
+msgstr "Confirmación de SMS"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4370,18 +3078,6 @@ msgstr "Confirmación cancealada."
 msgid "That is not your phone number."
 msgstr "Ese non é o teu número de teléfono."
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "Número de Teléfono do SMS"
-
-#. TRANS: Label for mobile carrier dropdown menu in SMS settings.
-#: actions/smssettings.php:511
-#, fuzzy
-msgid "Mobile carrier"
-msgstr "Selecciona unha operadora"
-
 #. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:516
 msgid "Select a carrier"
@@ -4410,13 +3106,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Navegación de subscricións"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Confirmar correo electrónico"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4458,11 +3149,6 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Configuracións de Twitter"
-
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
 msgstr "Non estás suscrito a ese perfil"
@@ -4476,30 +3162,10 @@ msgstr "Non se pode gardar a subscrición."
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Ningún chío."
-
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Non estás suscrito a ese perfil"
-
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "Suscrito"
 
-#: actions/subscribers.php:50
-#, fuzzy, php-format
-msgid "%s subscribers"
-msgstr "Subscritores"
-
-#: actions/subscribers.php:52
-#, fuzzy, php-format
-msgid "%1$s subscribers, page %2$d"
-msgstr "Tódalas subscricións"
-
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
 msgstr "Esa é a xente que escoita os teus chíos."
@@ -4527,16 +3193,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Tódalas subscricións"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "Tódalas subscricións"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr "Esa é a xente á que lle estas a escoitar os seus chíos"
@@ -4556,11 +3212,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
-msgid "%s is not listening to anyone."
-msgstr "%1$s está a escoitar os teus chíos %2$s."
-
 #: actions/subscriptions.php:208
 msgid "Jabber"
 msgstr "Jabber."
@@ -4570,50 +3221,34 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Usuarios auto-etiquetados como %s - páxina %d"
+msgstr "Chíos tagueados con %s"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr "Fonte de chíos para %s"
+msgstr "Fonte para os amigos de %s"
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Non hai argumento id."
-
-#: actions/tagother.php:65
-#, fuzzy, php-format
-msgid "Tag %s"
-msgstr "Tags"
-
-#: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
-msgid "User profile"
-msgstr "O usuario non ten perfil."
+msgstr ""
 
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
 msgstr ""
 
-#: actions/tagother.php:141
-#, fuzzy
-msgid "Tag user"
-msgstr "Tags"
-
 #: actions/tagother.php:151
 msgid ""
 "Tags for this user (letters, numbers, -, ., and _), comma- or space- "
@@ -4644,24 +3279,16 @@ msgid "No such tag."
 msgstr "Non existe a etiqueta."
 
 #: actions/unblock.php:59
-#, fuzzy
 msgid "You haven't blocked that user."
-msgstr "Xa bloqueaches a este usuario."
+msgstr "Non estás suscrito a ese perfil"
 
 #: actions/unsandbox.php:72
-#, fuzzy
 msgid "User is not sandboxed."
-msgstr "O usuario bloqueoute."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "O usuario non ten perfil."
+msgstr "O usuario non ten último chio."
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Non hai identificador de perfil na peticion."
+msgstr "Non se atopou un perfil con ese ID."
 
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
@@ -4673,13 +3300,6 @@ msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "Usuario"
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr ""
@@ -4711,11 +3331,6 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-#, fuzzy
-msgid "New users"
-msgstr "Invitar a novos usuarios"
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
@@ -4724,28 +3339,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Tódalas subscricións"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Suscribirse automáticamente a calquera que se suscriba a min (o mellor para "
-"non humáns)"
-
-#: actions/useradminpanel.php:251
-#, fuzzy
-msgid "Invitations"
-msgstr "Invitación(s) enviada(s)."
-
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "Invitación(s) enviada(s)."
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4755,39 +3348,20 @@ msgid "Authorize subscription"
 msgstr "Subscrición de autorización."
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Please check these details to make sure that you want to subscribe to this "
-"user's notices. If you didn't just ask to subscribe to someone's notices, "
-"click \"Cancel\"."
-
-#: actions/userauthorization.php:196 actions/version.php:167
-msgid "License"
-msgstr ""
 
 #: actions/userauthorization.php:217
 msgid "Accept"
 msgstr "Aceptar"
 
-#: actions/userauthorization.php:218 lib/subscribeform.php:115
-#: lib/subscribeform.php:139
-#, fuzzy
-msgid "Subscribe to this user"
-msgstr "Suscrito a %s"
-
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Rexeitar"
 
-#: actions/userauthorization.php:220
-#, fuzzy
-msgid "Reject this subscription"
-msgstr "Subscrición de autorización."
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Sen petición de autorización!"
@@ -4797,30 +3371,22 @@ msgid "Subscription authorized"
 msgstr "Subscrición autorizada"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"A subscrición foi autorizada, pero ningunha URL de retorno foi "
-"proporcionada. Comproba coas instruccións do sitio para máis detalles en "
-"como autorizar subscricións. O teu token de subscrición é:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Subscrición rexeitada"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"The subscription has been rejected, but no callback URL was passed. Check "
-"with the site's instructions for details on how to fully reject the "
-"subscription."
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4848,19 +3414,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Non se pode ler a URL do avatar de '%s'"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Tipo de imaxe incorrecto para '%s'"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Configuración de perfil"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4872,20 +3433,14 @@ msgstr ""
 msgid "Enjoy your hotdog!"
 msgstr ""
 
-#. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
-#: actions/usergroups.php:66
-#, fuzzy, php-format
-msgid "%1$s groups, page %2$d"
-msgstr "Tódalas subscricións"
-
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
 #: actions/usergroups.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not a member of any group."
-msgstr "%1s non é unha orixe fiable."
+msgstr "Non estás suscrito a ese perfil"
 
 #: actions/usergroups.php:164
 #, php-format
@@ -4903,11 +3458,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr "Actualizacións dende %1$s en %2$s!"
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "Estatísticas"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4946,12 +3496,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Persoal"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4990,54 +3534,11 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Tamaño inválido."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Non existe o perfil."
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Non se puido actualizar o usuario."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Non existe o perfil."
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Non se puido actualizar o usuario."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Non se puido crear o favorito."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "Erro ó enviar a mensaxe directa."
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -5056,68 +3557,46 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Erro ó inserir o hashtag na BD: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Aconteceu un erro ó gardar o chío."
+msgstr "Acounteceu un erro ó inserir o avatar"
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
 "duns minutos."
 
-#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-#, fuzzy
-msgid ""
-"Too many duplicate messages too quickly; take a breather and post again in a "
-"few minutes."
-msgstr ""
-"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
-"duns minutos."
-
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Tes restrinxido o envio de chíos neste sitio."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Aconteceu un erro ó gardar o chío."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Aconteceu un erro ó gardar o chío."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5133,100 +3612,41 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "O usuario non ten perfil."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "Non se puideron gardar os teus axustes de Twitter!"
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Este usuario non che permite suscribirte a el."
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
+msgstr "Non se poden gardar as etiquetas."
 
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "O usuario bloqueoute."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Non está suscrito!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Non se pode eliminar a subscrición."
+msgstr "Non se pode gardar a subscrición."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Non se pode eliminar a subscrición."
+msgstr "Non se pode gardar a subscrición."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Non se pode eliminar a subscrición."
-
-#. TRANS: Notice given on user registration.
-#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
-#: classes/User.php:365
-#, fuzzy, php-format
-msgid "Welcome to %1$s, @%2$s!"
-msgstr "Mensaxe de %1$s en %2$s"
-
-#. TRANS: Server exception thrown when creating a group failed.
-#: classes/User_group.php:496
-#, fuzzy
-msgid "Could not create group."
-msgstr "Non se puido crear o favorito."
+msgstr "Non se pode gardar a subscrición."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Non se pode gardar a subscrición."
-
-#. TRANS: Server exception thrown when setting group membership failed.
-#: classes/User_group.php:529
-#, fuzzy
-msgid "Could not set group membership."
-msgstr "Non se pode gardar a subscrición."
-
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "Non se pode gardar a subscrición."
+msgstr "Non se poden gardar as etiquetas."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
 msgstr "Configuración de perfil"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "Acounteceu un fallo ó actualizar o avatar."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:123
 msgid "Change your password"
@@ -5237,12 +3657,6 @@ msgstr "Cambiar contrasinal"
 msgid "Change email handling"
 msgstr "Cambiar a xestión de email"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "O usuario non ten perfil."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -5253,12 +3667,6 @@ msgstr "Outras opcions"
 msgid "Other"
 msgstr "Outros"
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5275,87 +3683,34 @@ msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Persoal"
-
-#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change your email, avatar, password, profile"
-msgstr "Cambiar contrasinal"
-
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Non se pode redireccionar ao servidor: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "Conectar"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Navegación de subscricións"
-
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
 msgctxt "MENU"
 msgid "Admin"
 msgstr ""
 
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-"Emprega este formulario para invitar ós teus amigos e colegas a empregar "
-"este servizo."
-
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "Invitar"
-
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
 msgstr ""
 
-#. TRANS: Main menu option when logged in to log out the current user
-#: lib/action.php:477
-#, fuzzy
-msgctxt "MENU"
-msgid "Logout"
-msgstr "Sair"
-
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Crear nova conta"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Rexistrar"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
@@ -5363,60 +3718,21 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Inicio de sesión"
-
-#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:494
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Help me!"
-msgstr "Axuda"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
-msgstr "Axuda"
-
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
 msgstr ""
 
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Buscar"
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Novo chío"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Novo chío"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "Navegación de subscricións"
+msgstr ""
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5464,13 +3780,11 @@ msgstr ""
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** é un servizo de microbloguexo que che proporciona [%%site."
-"broughtby%%](%%site.broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5490,12 +3804,6 @@ msgstr ""
 "%s, dispoñible baixo licenza [GNU Affero General Public License](http://www."
 "fsf.org/licensing/licenses/agpl-3.0.html)."
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "Atopar no contido dos chíos"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5529,16 +3837,14 @@ msgstr ""
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
-#, fuzzy
 msgid "After"
-msgstr "« Despois"
+msgstr "Outros"
 
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: past than the currently displayed information.
 #: lib/action.php:1213
-#, fuzzy
 msgid "Before"
-msgstr "Antes »"
+msgstr ""
 
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
@@ -5557,103 +3863,21 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Non podes enviar mensaxes a este usurio."
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Non se permite o rexistro neste intre."
-
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-#, fuzzy
-msgid "showForm() not implemented."
-msgstr "Comando non implementado."
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-#, fuzzy
-msgid "saveSettings() not implemented."
-msgstr "Comando non implementado."
-
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Non se puideron gardar os teus axustes de Twitter!"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Confirmar correo electrónico"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "Invitar"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "Confirmación de SMS"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
-msgid "Design"
-msgstr "Persoal"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "Confirmación de SMS"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Usuario"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Confirmación de SMS"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "Confirmación de SMS"
+msgid "Design"
+msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Confirmación de SMS"
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Usuario"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:398
-#, fuzzy
 msgid "Edit site notice"
-msgstr "Novo chío"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Confirmación de SMS"
+msgstr "Eliminar chío"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
@@ -5672,27 +3896,19 @@ msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
-#, fuzzy, php-format
+#, php-format
 msgid "Describe your application in %d characters"
-msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:224
-#, fuzzy
 msgid "URL of the homepage of this application"
-msgstr "Enderezo da túa páxina persoal, blogue, ou perfil noutro sitio"
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Fonte"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
@@ -5701,9 +3917,8 @@ msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
-#, fuzzy
 msgid "URL for the homepage of the organization"
-msgstr "Enderezo da túa páxina persoal, blogue, ou perfil noutro sitio"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5763,44 +3978,22 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "Eliminar"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
+msgstr "Recuperar"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
 msgstr ""
 
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:279
-#, fuzzy
-msgid "Provider"
-msgstr "Perfil"
-
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Contrasinal gardada."
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "Contrasinal gardada."
+msgstr ""
 
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
@@ -5814,45 +4007,21 @@ msgstr "Comando completo"
 msgid "Command failed"
 msgstr "Comando fallido"
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Non se atopou un perfil con ese ID."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "O usuario non ten último chio."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Desculpa, este comando todavía non está implementado."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Toque enviado"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5863,56 +4032,39 @@ msgstr ""
 "Suscriptores: %2$s\n"
 "Chíos: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Chío marcado coma favorito."
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "Xa estas suscrito a estes usuarios:"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nome completo: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Ubicación: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Páxina persoal: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Sobre: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5921,122 +4073,70 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Mensaxe directo a %s enviado"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Erro ó enviar a mensaxe directa."
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Non se pode activar a notificación."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Eliminar chío"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Chío publicado"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "Aconteceu un erro ó gardar o chío."
-
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Non se pode eliminar este chíos."
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Aconteceu un erro ó gardar o chío."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Especifica o nome do usuario ó que queres suscribirte"
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Non estás suscrito a ese perfil"
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Suscrito a %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Especifica o nome de usuario ó que queres deixar de seguir"
+msgstr "Acounteceu un erro configurando o usuario."
 
-#: lib/command.php:664
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Unsubscribed from %s"
-msgstr "Desuscribir de %s"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Comando non implementado."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notificación desactivada."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "No se pode desactivar a notificación."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notificación habilitada."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Non se pode activar a notificación."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Desuscribir de %s"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Non estás suscrito a ese perfil"
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Xa estas suscrito a estes usuarios:"
@@ -6045,12 +4145,10 @@ msgstr[2] ""
 msgstr[3] ""
 msgstr[4] ""
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Outro usuario non se puido suscribir a ti."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Outro usuario non se puido suscribir a ti."
@@ -6059,12 +4157,10 @@ msgstr[2] ""
 msgstr[3] ""
 msgstr[4] ""
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Non estás suscrito a ese perfil"
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Non estás suscrito a ese perfil"
@@ -6073,8 +4169,7 @@ msgstr[2] ""
 msgstr[3] ""
 msgstr[4] ""
 
-#: lib/command.php:838
-#, fuzzy
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6115,37 +4210,6 @@ msgid ""
 "tracks - not yet implemented.\n"
 "tracking - not yet implemented.\n"
 msgstr ""
-"Comandos:\n"
-"on - activar as notificacións\n"
-"off - desactivar as notificacións\n"
-"help - mostrar esta axuda\n"
-"follow <nickname> - suscribirse ao usuario\n"
-"leave <nickname> - de-suscribirse do usuario\n"
-"d <nickname> <text> - mensaxe directa ao usuario\n"
-"get <nickname> - lelo último chío do usuario\n"
-"whois <nickname> - amosar informacion do usuario\n"
-"fav <nickname> - engadilo último chío do usuario como favorito\n"
-"stats - amosalas túas estatísticas\n"
-"stop - o mesmo que 'off'\n"
-"quit - o mesmo que 'off'\n"
-"sub <nickname> - o mesmo que 'follow'\n"
-"unsub <nickname> - o mesmo que 'leave'\n"
-"last <nickname> - o mesmo que 'get'\n"
-"on <nickname> - non implementado por agora.\n"
-"off <nickname> - non implementado por agora.\n"
-"nudge <nickname> - non implementado por agora.\n"
-"invite <phone number> - non implementado por agora.\n"
-"track <word> - non implementado por agora.\n"
-"untrack <word> - non implementado por agora.\n"
-"track off - non implementado por agora.\n"
-"untrack all - non implementado por agora.\n"
-"tracks - non implementado por agora.\n"
-"tracking - non implementado por agora.\n"
-
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Sen código de confirmación."
 
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
@@ -6171,11 +4235,6 @@ msgstr "Chíos dende mensaxería instantánea (IM)"
 msgid "Updates by SMS"
 msgstr "Chíos dende SMS"
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Conectar"
-
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
 msgstr ""
@@ -6184,30 +4243,17 @@ msgstr ""
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Subir"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Podes actualizar a túa información do perfil persoal aquí"
-
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
 
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
 msgid "Disfavor this notice"
-msgstr "%s chíos favoritos"
+msgstr "Chíos favoritos de %s"
 
 #: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
 msgid "Favor this notice"
-msgstr "%s chíos favoritos"
+msgstr "Chíos favoritos de %s"
 
 #: lib/favorform.php:140
 msgid "Favor"
@@ -6241,11 +4287,6 @@ msgstr "Filtrar etiquetas"
 msgid "All"
 msgstr "Todos"
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "Selecciona unha operadora"
-
 #: lib/galleryaction.php:140
 msgid "Tag"
 msgstr "Etiqueta"
@@ -6263,26 +4304,14 @@ msgstr "Ir"
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr "Enderezo da túa páxina persoal, blogue, ou perfil noutro sitio"
-
 #: lib/groupeditform.php:168
-#, fuzzy
 msgid "Describe the group or topic"
-msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
+msgstr ""
 
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Contanos un pouco de ti e dos teus intereses en 140 caractéres."
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "¿Onde estas, coma \"Cidade, Provincia, País\""
+msgstr ""
 
 #: lib/groupeditform.php:187
 #, php-format
@@ -6293,25 +4322,14 @@ msgstr ""
 msgid "Group"
 msgstr ""
 
-#: lib/groupnav.php:101
-#, fuzzy
-msgid "Blocked"
-msgstr "Bloquear"
-
-#: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "Bloquear usuario"
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
 msgstr ""
 
 #: lib/groupnav.php:113
-#, fuzzy
 msgid "Logo"
-msgstr "Sair"
+msgstr "Inicio de sesión"
 
 #: lib/groupnav.php:114
 #, php-format
@@ -6345,11 +4363,6 @@ msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
 msgid "Unsupported image file format."
 msgstr "Formato de ficheiro de imaxe non soportado."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Podes actualizar a túa información do perfil persoal aquí"
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Carga parcial."
@@ -6363,14 +4376,12 @@ msgid "Not an image or corrupt file."
 msgstr "Non é unha imaxe ou está corrupta."
 
 #: lib/imagefile.php:122
-#, fuzzy
 msgid "Lost our file."
-msgstr "Bloqueo de usuario fallido."
+msgstr "Ningún chío."
 
 #: lib/imagefile.php:163 lib/imagefile.php:224
-#, fuzzy
 msgid "Unknown file type"
-msgstr "tipo de ficheiro non soportado"
+msgstr ""
 
 #: lib/imagefile.php:244
 msgid "MB"
@@ -6390,25 +4401,13 @@ msgstr ""
 msgid "Unknown inbox source %d."
 msgstr ""
 
-#: lib/joinform.php:114
-#, fuzzy
-msgid "Join"
-msgstr "Inicio de sesión"
-
-#: lib/leaveform.php:114
-#, fuzzy
-msgid "Leave"
-msgstr "Gardar"
-
 #: lib/logingroupnav.php:80
-#, fuzzy
 msgid "Login with a username and password"
-msgstr "Accede co teu nome de usuario e contrasinal."
+msgstr "Usuario ou contrasinal inválidos."
 
 #: lib/logingroupnav.php:86
-#, fuzzy
 msgid "Sign up for a new account"
-msgstr "Crear nova conta"
+msgstr ""
 
 #. TRANS: Subject for address confirmation email
 #: lib/mail.php:174
@@ -6460,7 +4459,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6473,18 +4472,6 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1$s está a escoitar os teus chíos en %2$s.\n"
-"\n"
-"\t%3$s\n"
-"\n"
-"Atentamente todo seu,\n"
-"%4$s.\n"
-
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "Ubicación: %s"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6525,12 +4512,6 @@ msgstr "Estado de %s"
 msgid "SMS confirmation"
 msgstr "Confirmación de SMS"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Agardando a confirmación neste número de teléfono."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6606,13 +4587,13 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s gustoulle o teu chío"
+msgstr "Enviar un correo cando alguen enganda un chío meu coma favorito."
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
 "\n"
@@ -6631,18 +4612,6 @@ msgid ""
 "Faithfully yours,\n"
 "%6$s\n"
 msgstr ""
-"%1$s acaba de engadir o teu chío en %2$s como un dos seus favoritos.\n"
-"\n"
-"Se o olvidaches, podes velo texto do teu chío aquí:\n"
-"\n"
-"%3$s\n"
-"\n"
-"Podes vela lista de cíos favoritos de %1$s aquí:\n"
-"\n"
-"%4$s\n"
-"\n"
-"Fielmente teu,\n"
-"%5$s\n"
 
 #. TRANS: Line in @-reply notification e-mail. %s is conversation URL.
 #: lib/mail.php:651
@@ -6653,11 +4622,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6696,10 +4660,9 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
-#, fuzzy
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr " dende "
+msgstr ""
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6717,11 +4680,6 @@ msgstr "Ise é un enderezo IM incorrecto."
 msgid "Sorry, no incoming email allowed."
 msgstr "Aivá, non se permiten correos entrantes."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Formato de ficheiro de imaxe non soportado."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6761,9 +4719,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Non se pudo recuperar a liña de tempo publica."
+msgstr "Non se puido eliminar o favorito."
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6775,55 +4732,41 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-#, fuzzy
-msgid "Send a direct notice"
-msgstr "Eliminar chío"
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr "A"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "6 ou máis caracteres"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Enviar"
+msgstr ""
 
 #: lib/noticeform.php:160
-#, fuzzy
 msgid "Send a notice"
-msgstr "Dar un toque"
+msgstr "Novo chío"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "¿Que pasa, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Non se puideron gardar as etiquetas."
+msgstr ""
 
-#: lib/noticeform.php:215
-#, fuzzy
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr "Non se puideron gardar as etiquetas."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6831,9 +4774,8 @@ msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of north
 #: lib/noticelist.php:436
-#, fuzzy
 msgid "N"
-msgstr "No"
+msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
@@ -6859,45 +4801,13 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "Sen contido!"
-
-#: lib/noticelist.php:602
-#, fuzzy
-msgid "Repeated by"
-msgstr "Crear"
-
-#: lib/noticelist.php:629
-#, fuzzy
-msgid "Reply to this notice"
-msgstr "Non se pode eliminar este chíos."
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
-#: lib/noticelist.php:630
-#, fuzzy
+#: lib/noticelist.php:631
 msgid "Reply"
-msgstr "contestar"
-
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Chío publicado"
-
-#: lib/nudgeform.php:116
-#, fuzzy
-msgid "Nudge this user"
-msgstr "Toque enviado"
-
-#: lib/nudgeform.php:128
-#, fuzzy
-msgid "Nudge"
-msgstr "Toque enviado"
-
-#: lib/nudgeform.php:128
-#, fuzzy
-msgid "Send a nudge to this user"
-msgstr "Non podes enviar mensaxes a este usurio."
+msgstr "Respostas"
 
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
@@ -6915,11 +4825,6 @@ msgstr "Acounteceu un erro actualizando o perfil remoto"
 msgid "Error inserting remote profile"
 msgstr "Aconteceu un erro ó inserir o perfil remoto"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Eliminar chío"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Non se puido inserir a nova subscrición."
@@ -6952,16 +4857,6 @@ msgstr "Band. Saída"
 msgid "Your sent messages"
 msgstr "As túas mensaxes enviadas"
 
-#: lib/personaltagcloudsection.php:56
-#, fuzzy, php-format
-msgid "Tags in %s's notices"
-msgstr "O usuario non ten último chio."
-
-#: lib/plugin.php:115
-#, fuzzy
-msgid "Unknown"
-msgstr "Acción descoñecida"
-
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
 msgstr "Subscricións"
@@ -6974,16 +4869,6 @@ msgstr "Tódalas subscricións"
 msgid "Subscribers"
 msgstr "Subscritores"
 
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "Subscritores"
-
-#: lib/profileaction.php:191
-#, fuzzy
-msgid "User ID"
-msgstr "Usuario"
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "Membro dende"
@@ -6994,9 +4879,8 @@ msgid "Daily average"
 msgstr ""
 
 #: lib/profileaction.php:264
-#, fuzzy
 msgid "All groups"
-msgstr "Tódalas etiquetas"
+msgstr ""
 
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
@@ -7007,9 +4891,8 @@ msgid "Public"
 msgstr "Público"
 
 #: lib/publicgroupnav.php:82
-#, fuzzy
 msgid "User groups"
-msgstr "Usuarios"
+msgstr ""
 
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
 msgid "Recent tags"
@@ -7024,24 +4907,13 @@ msgid "Popular"
 msgstr "Popular"
 
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "Non hai argumento id."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Non se pode eliminar este chíos."
+msgstr ""
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Si"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Non se pode eliminar este chíos."
-
 #: lib/revokeroleform.php:91
 #, php-format
 msgid "Revoke the \"%s\" role from this user"
@@ -7051,20 +4923,9 @@ msgstr ""
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "Band. Entrada"
-
 #: lib/sandboxform.php:78
-#, fuzzy
 msgid "Sandbox this user"
-msgstr "Bloquear usuario"
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Buscar"
+msgstr ""
 
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
@@ -7074,11 +4935,6 @@ msgstr ""
 msgid "Search"
 msgstr "Buscar"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Buscar"
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Xente"
@@ -7091,11 +4947,6 @@ msgstr "Atopar xente neste sitio"
 msgid "Find content of notices"
 msgstr "Atopar no contido dos chíos"
 
-#: lib/searchgroupnav.php:85
-#, fuzzy
-msgid "Find groups on this site"
-msgstr "Atopar xente neste sitio"
-
 #: lib/section.php:89
 msgid "Untitled section"
 msgstr ""
@@ -7105,41 +4956,17 @@ msgid "More..."
 msgstr ""
 
 #: lib/silenceform.php:67
-#, fuzzy
 msgid "Silence"
-msgstr "Novo chío"
+msgstr ""
 
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "Bloquear usuario"
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "Suscrición remota"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "Suscrito a %s"
-
-#: lib/subgroupnav.php:99
-#, php-format
-msgid "Groups %s is a member of"
 msgstr ""
 
 #: lib/subgroupnav.php:105
 msgid "Invite"
 msgstr "Invitar"
 
-#: lib/subgroupnav.php:106
-#, fuzzy, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-"Emprega este formulario para invitar ós teus amigos e colegas a empregar "
-"este servizo."
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -7151,9 +4978,8 @@ msgid "People Tagcloud as tagged"
 msgstr ""
 
 #: lib/tagcloudsection.php:56
-#, fuzzy
 msgid "None"
-msgstr "No"
+msgstr ""
 
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
@@ -7163,13 +4989,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Acounteceu un fallo ó actualizar o avatar."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -7195,9 +5014,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "Acounteceu un erro actualizando o perfil remoto"
+msgstr "Acounteceu un erro borrando o bloqueo."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
@@ -7208,75 +5026,33 @@ msgid "Unsandbox"
 msgstr ""
 
 #: lib/unsandboxform.php:80
-#, fuzzy
 msgid "Unsandbox this user"
-msgstr "Bloquear usuario"
+msgstr ""
 
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "Bloquear usuario"
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-#, fuzzy
-msgid "Unsubscribe from this user"
-msgstr "Desuscribir de %s"
+msgstr ""
 
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr "Eliminar subscrición"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "O usuario non ten perfil."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Avatar"
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-#, fuzzy
-msgid "User actions"
-msgstr "Outras opcions"
-
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Configuración de perfil"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
 
-#: lib/userprofile.php:287
-#, fuzzy
-msgid "Send a direct message to this user"
-msgstr "Non podes enviar mensaxes a este usurio."
-
-#: lib/userprofile.php:288
-#, fuzzy
-msgid "Message"
-msgstr "Nova mensaxe"
-
 #: lib/userprofile.php:326
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "O usuario non ten perfil."
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -7288,70 +5064,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "fai uns segundos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "fai un minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "fai %d minutos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "fai unha hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "fai %d horas"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "fai un día"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "fai %d días"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "fai un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "fai %d meses"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "fai un ano"
 
 #: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "%1s non é unha orixe fiable."
-
-#: lib/webcolor.php:123
 #, php-format
-msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
-
-#: lib/xmppmanager.php:403
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
+msgid "%s is not a valid color!"
+msgstr "A páxina persoal semella que non é unha URL válida."
index 68434b085fce5152d28f9ddc079eafdad647fa6d..08610bf5443365c9fa6a6913221777cd1bd68085 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:30+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:15+0000\n"
 "Language-Team: Galician\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: gl\n"
 "X-Message-Group: out-statusnet\n"
@@ -89,6 +89,7 @@ msgstr "Gardar"
 msgid "No such page."
 msgstr "Esa páxina non existe."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -108,7 +109,7 @@ msgstr "Esa páxina non existe."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Non existe tal usuario."
@@ -351,7 +352,8 @@ msgstr "Non se atopou ningún estado con esa ID."
 msgid "This status is already a favorite."
 msgstr "Este estado xa é dos favoritos."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Non se puido crear o favorito."
 
@@ -465,15 +467,19 @@ msgstr "O pseudónimo non pode coincidir co alcume."
 msgid "Group not found."
 msgstr "Non se atopou o grupo."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Xa forma parte dese grupo."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "O administrador bloqueouno nese grupo."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "O usuario %1$s non se puido engadir ao grupo %2$s."
@@ -482,7 +488,10 @@ msgstr "O usuario %1$s non se puido engadir ao grupo %2$s."
 msgid "You are not a member of this group."
 msgstr "Vostede non pertence a este grupo."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "O usuario %1$s non se puido eliminar do grupo %2$s."
@@ -644,11 +653,13 @@ msgstr "Non pode borrar o estado doutro usuario."
 msgid "No such notice."
 msgstr "Non existe tal nota."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Non pode repetir a súa propia nota."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Xa repetiu esa nota."
 
@@ -664,7 +675,7 @@ msgstr "Non se atopou ningún estado con esa ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "O cliente debe proporcionar un parámetro de \"estado\" cun valor."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -674,7 +685,7 @@ msgstr "Iso é longo de máis. A nota non pode exceder os %d caracteres."
 msgid "Not found."
 msgstr "Non se atopou."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -793,7 +804,7 @@ msgid "Preview"
 msgstr "Vista previa"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Borrar"
 
@@ -886,6 +897,8 @@ msgstr "Bloquear este usuario"
 msgid "Failed to save block information."
 msgstr "Non se puido gardar a información do bloqueo."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -895,8 +908,8 @@ msgstr "Non se puido gardar a información do bloqueo."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Non existe tal grupo."
 
@@ -1074,7 +1087,7 @@ msgid "Do not delete this notice"
 msgstr "Non borrar esta nota"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Borrar esta nota"
 
@@ -2170,7 +2183,7 @@ msgstr "Xa está subscrito aos seguintes usuarios:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2293,9 +2306,7 @@ msgstr "Ten que identificarse para unirse a un grupo."
 msgid "No nickname or ID."
 msgstr "Nin alcume nin ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s uniuse ao grupo %2$s"
@@ -2304,13 +2315,12 @@ msgstr "%1$s uniuse ao grupo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Ten que identificarse para deixar un grupo."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Non pertence a ese grupo."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s deixou o grupo %2$s"
@@ -2427,12 +2437,15 @@ msgstr "Utilice o seguinte formulario para crear un novo grupo."
 msgid "New message"
 msgstr "Mensaxe nova"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Non pode enviarlle unha mensaxe a este usuario."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Non hai contido ningún!"
 
@@ -2440,7 +2453,8 @@ msgstr "Non hai contido ningún!"
 msgid "No recipient specified."
 msgstr "Non se especificou ningún destinatario."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Non se envíe unha mensaxe, limítese a pensar nela."
@@ -2449,12 +2463,14 @@ msgstr "Non se envíe unha mensaxe, limítese a pensar nela."
 msgid "Message sent"
 msgstr "Enviouse a mensaxe"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Enviouse a mensaxe directa a %s."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Houbo un erro de AJAX"
 
@@ -2462,7 +2478,7 @@ msgstr "Houbo un erro de AJAX"
 msgid "New notice"
 msgstr "Nova nota"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Publicouse a nota"
 
@@ -2593,8 +2609,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Só %s enderezos URL sobre HTTP simple."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Non se soporta ese formato de datos."
 
@@ -3519,7 +3535,7 @@ msgstr "Non pode repetir a súa propia nota."
 msgid "You already repeated that notice."
 msgstr "Xa repetiu esa nota."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Repetida"
 
@@ -4935,23 +4951,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Non existe tal perfil (%1$d) para a nota (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Houbo un erro na base de datos ao intentar inserir a etiqueta: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Houbo un problema ao gardar a nota. É longa de máis."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Houbo un problema ao gardar a nota. Descoñécese o usuario."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4959,7 +4975,7 @@ msgstr ""
 "publicar nuns minutos."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4968,29 +4984,29 @@ msgstr ""
 "publicar nuns minutos."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Prohibíuselle publicar notas neste sitio de momento."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Houbo un problema ao gardar a nota."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "O tipo dado para saveKnownGroups era incorrecto"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Houbo un problema ao gardar a caixa de entrada do grupo."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "♻ @%1$s %2$s"
@@ -5645,44 +5661,21 @@ msgstr "Completouse a orde"
 msgid "Command failed"
 msgstr "A orde fallou"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Non hai ningunha nota con esa id"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "O usuario non ten ningunha última nota"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Non se deu atopado ningún usuario co alcume %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Non se deu atopado ningún usuario local co alcume %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Esta orde aínda non está integrada."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Non ten sentido ningún facerse un aceno a un mesmo!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Fíxoselle un aceno a %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5693,55 +5686,39 @@ msgstr ""
 "Subscritores: %2$s\n"
 "Notas: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Marcouse a nota como  favorita."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Xa forma parte dese grupo"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Non se puido meter ao usuario %1$s no grupo %2$s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Non se puido eliminar ao usuario %1$s do grupo %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nome completo: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Localidade: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Sitio web: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Acerca de: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5752,143 +5729,103 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "A mensaxe é longa de máis. O límite son %1$d caracteres, e enviou %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Envióuselle a mensaxe directa a %s"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
+"A mensaxe é longa de máis, o límite de caracteres é de %1$d, e enviou %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Houbo un erro ao enviar a mensaxe directa."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Non pode repetir unha nota propia"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Xa repetiu esa nota"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Repetiuse a nota de %s"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Houbo un erro ao repetir a nota."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "A nota é longa de máis. O límite son %d caracteres, e enviou %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Enviouse a resposta a %s"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Houbo un erro ao gardar a nota."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Introduza o  nome do usuario ao que quere subscribirse"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Non se pode subscribir aos perfís OMB cunha orde."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Subscribiuse a %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Introduza o nome do usuario ao que quer deixar de estar subscrito"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Cancelar a subscrición a %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Aínda non se integrou esa orde."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Desactivar a notificación."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Non se pode desactivar a notificación."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Activar a notificación."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Non se pode activar a notificación."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "A orde de identificación está desactivada"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Esta ligazón só se pode utilizar unha vez, e só nos próximos dous minutos: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Cancelou a subscrición a %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Non está subscrito a ninguén."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Vostede está subscrito a esta persoa:"
 msgstr[1] "Vostede está subscrito a estas persoas:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Non hai ninguén subscrito a vostede."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Esta persoa está subscrita a vostede:"
 msgstr[1] "Estas persoas están subscritas a vostede:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Non forma parte de ningún grupo."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Vostede pertence a este grupo:"
 msgstr[1] "Vostede pertence a estes grupos:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6552,7 +6489,7 @@ msgstr ""
 "Non ten mensaxes privadas. Pode enviar mensaxes privadas para conversar con "
 "outros usuarios. A xente pode enviarlle mensaxes para que só as lea vostede."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "de"
 
@@ -6640,11 +6577,11 @@ msgstr "Enviar unha nota directa"
 msgid "To"
 msgstr "A"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caracteres dispoñibles"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Enviar"
@@ -6653,28 +6590,28 @@ msgstr "Enviar"
 msgid "Send a notice"
 msgstr "Enviar unha nota"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Que hai de novo, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Anexar"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Anexar un ficheiro"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Publicar a miña localidade"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Non publicar a miña localidade"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6711,23 +6648,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "en"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "no contexto"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Repetida por"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Responder a esta nota"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Responder"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Repetiuse a nota"
 
@@ -7056,11 +6997,6 @@ msgstr "Cancelar a subscrición a este usuario"
 msgid "Unsubscribe"
 msgstr "Cancelar a subscrición"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "O usuario %s (%d) non ten perfil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Modificar o avatar"
@@ -7108,56 +7044,56 @@ msgid "Moderator"
 msgstr "Moderador"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "hai uns segundos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "hai como un minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "hai como %d minutos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "hai como unha hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "hai como %d horas"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "hai como un día"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "hai como %d días"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "hai como un mes"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "hai como %d meses"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "hai como un ano"
 
@@ -7170,9 +7106,3 @@ msgstr "%s non é unha cor correcta!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s non é unha cor correcta! Use 3 ou 6 caracteres hexadecimais."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"A mensaxe é longa de máis, o límite de caracteres é de %1$d, e enviou %2$d."
index 64c36e84eecd8ce3f7f4a2b23ec93d9b95348270..e21cb66aba4f4999d3af6ac59480352efe9fdc57 100644 (file)
@@ -7,48 +7,27 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:32+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:17+0000\n"
 "Language-Team: Hebrew\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: he\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "קבל"
-
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
-#, fuzzy
 msgid "Site access settings"
-msgstr "הגדרות"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "הירשם"
+msgstr "הגדרות הפרופיל"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "פרטיות"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
@@ -66,35 +45,16 @@ msgstr ""
 
 #. TRANS: Checkbox label for disabling new user registrations.
 #: actions/accessadminpanel.php:185
-#, fuzzy
 msgid "Closed"
-msgstr "אין משתמש כזה."
-
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "הגדרות"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "שמור"
+msgstr ""
 
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "×\90×\99×\9f ×\94×\95×\93×¢×\94 ×\9b×\96×\95."
+msgstr "×\90×\99×\9f ×\9eשת×\9eש ×\9b×\96×\94."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -114,17 +74,11 @@ msgstr "אין הודעה כזו."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "אין משתמש כזה."
 
-#. TRANS: Page title. %1$s is user nickname, %2$d is page number
-#: actions/all.php:90
-#, fuzzy, php-format
-msgid "%1$s and friends, page %2$d"
-msgstr "%s וחברים"
-
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
 #. TRANS: Message is used as link title. %s is a user nickname.
@@ -137,21 +91,15 @@ msgstr "%s וחברים"
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:107
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "הזנות החברים של %s"
+msgstr ""
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:116
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "הזנות החברים של %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, fuzzy, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr "הזנות החברים של %s"
+msgstr ""
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
@@ -182,12 +130,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-#, fuzzy
-msgid "You and friends"
-msgstr "%s וחברים"
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -196,32 +138,6 @@ msgstr "%s וחברים"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr ""
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "קוד האישור לא נמצא."
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -242,11 +158,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "עידכון המשתמש נכשל."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -257,11 +168,6 @@ msgstr "עידכון המשתמש נכשל."
 msgid "User has no profile."
 msgstr "למשתמש אין פרופיל."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "שמירת הפרופיל נכשלה."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -284,16 +190,9 @@ msgstr ""
 msgid "Unable to save your design settings."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "עידכון המשתמש נכשל."
-
 #: actions/apiblockcreate.php:105
-#, fuzzy
 msgid "You cannot block yourself!"
-msgstr "עידכון המשתמש נכשל."
+msgstr ""
 
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
@@ -323,19 +222,6 @@ msgstr ""
 msgid "All the direct messages sent to %s"
 msgstr ""
 
-#: actions/apidirectmessagenew.php:118
-msgid "No message text!"
-msgstr ""
-
-#: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
-msgid "That's too long. Max message size is %d chars."
-msgstr "זה ארוך מידי. אורך מירבי להודעה הוא 140 אותיות."
-
-#: actions/apidirectmessagenew.php:138
-msgid "Recipient user not found."
-msgstr ""
-
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
@@ -345,57 +231,22 @@ msgstr ""
 msgid "No status found with that ID."
 msgstr ""
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "זהו כבר זיהוי ה-Jabber שלך."
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
-msgid "Could not create favorite."
-msgstr ""
-
 #: actions/apifavoritedestroy.php:123
 msgid "That status is not a favorite."
 msgstr ""
 
-#: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
-msgid "Could not delete favorite."
-msgstr ""
-
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "נכשלה ההפניה לשרת: %s"
-
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
-msgid "Could not unfollow user: User not found."
-msgstr "נכשלה ההפניה לשרת: %s"
+msgstr "שמירת הפרופיל נכשלה."
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "עידכון המשתמש נכשל."
+msgstr ""
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-#, fuzzy
-msgid "Could not determine source user."
-msgstr "עידכון המשתמש נכשל."
-
-#: actions/apifriendshipsshow.php:142
-#, fuzzy
-msgid "Could not find target user."
-msgstr "עידכון המשתמש נכשל."
-
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
 #: actions/register.php:212
@@ -429,9 +280,9 @@ msgstr "השם המלא ארוך מידי (מותרות 255 אותיות בלב
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "×\94×\91×\99×\95×\92רפ×\99×\94 ×\90ר×\95×\9b×\94 ×\9e×\99×\93×\99 (×\9c×\9b×\9c ×\94×\99×\95תר 140 ×\90×\95ת×\99×\95ת)"
+msgstr "ש×\9d ×\94×\9e×\99ק×\95×\9d ×\90ר×\95×\9a ×\9e×\99×\93×\99 (×\9e×\95תר ×¢×\93 %d ×\90×\95ת×\99×\95ת)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -446,15 +297,9 @@ msgid "Too many aliases! Maximum %d."
 msgstr ""
 
 #: actions/apigroupcreate.php:267
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\"."
-msgstr "כתובת אתר הבית '%s' אינה חוקית"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "כינוי זה כבר תפוס. נסה כינוי אחר."
+msgstr "גודל לא חוקי."
 
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
@@ -464,51 +309,29 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "×\9c×\90 × ×\9eצ×\90"
+msgstr "ק×\95×\93 ×\94×\90×\99ש×\95ר ×\9c×\90 × ×\9eצ×\90."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
-msgstr "×\9b×\91ר × ×\9bנסת ×\9c×\9eער×\9bת!"
+msgstr "×\9c×\90 ×©×\9c×\97× ×\95 ×\90×\9c×\99× ×\95 ×\90ת ×\94פר×\95פ×\99×\9c ×\94×\96×\94"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr ""
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s."
-msgstr "נכשלה ההפניה לשרת: %s"
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s."
-msgstr "נכשלה יצירת OpenID מתוך: %s"
-
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "%s's groups"
-msgstr "פרופיל"
+msgstr ""
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#. TRANS: Message is used as a title. %s is a site name.
-#. TRANS: Message is used as a page title. %s is a nick name.
-#: actions/apigrouplistall.php:92 actions/usergroups.php:63
 #, php-format
-msgid "%s groups"
+msgid "%1$s groups %2$s is a member of."
 msgstr ""
 
 #: actions/apigrouplistall.php:96
@@ -516,20 +339,10 @@ msgstr ""
 msgid "groups on %s"
 msgstr ""
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "ההעלה"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "גודל לא חוקי."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -548,21 +361,6 @@ msgstr "גודל לא חוקי."
 msgid "There was a problem with your session token. Try again, please."
 msgstr ""
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "שם המשתמש או הסיסמה לא חוקיים"
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "שגיאה ביצירת שם המשתמש."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "שגיאת מסד נתונים בהכנסת התגובה: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -603,12 +401,6 @@ msgid ""
 "give access to your %4$s account to third parties you trust."
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to user settings
-#: actions/apioauthauthorize.php:310 lib/action.php:450
-#, fuzzy
-msgid "Account"
-msgstr "אודות"
-
 #: actions/apioauthauthorize.php:313 actions/login.php:252
 #: actions/profilesettings.php:106 actions/register.php:431
 #: actions/showgroup.php:245 actions/tagother.php:94
@@ -648,21 +440,6 @@ msgstr ""
 msgid "No such notice."
 msgstr "אין הודעה כזו."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "לא ניתן להירשם ללא הסכמה לרשיון"
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
-msgid "Already repeated that notice."
-msgstr "כבר נכנסת למערכת!"
-
-#: actions/apistatusesshow.php:139
-#, fuzzy
-msgid "Status deleted."
-msgstr "התמונה עודכנה."
-
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
 msgstr ""
@@ -671,85 +448,39 @@ msgstr ""
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, fuzzy, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr "זה ארוך מידי. אורך מירבי להודעה הוא 140 אותיות."
-
-#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
-#, fuzzy
-msgid "Not found."
-msgstr "לא נמצא"
-
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "פורמט התמונה אינו נתמך."
-
-#: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "הסטטוס של %1$s ב-%2$s "
-
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "מיקרובלוג מאת %s"
-
-#: actions/apitimelinementions.php:118
-#, fuzzy, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr "הסטטוס של %1$s ב-%2$s "
+msgstr ""
 
 #: actions/apitimelinementions.php:131
 #, php-format
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
 msgstr ""
 
-#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
-#, php-format
-msgid "%s public timeline"
-msgstr ""
-
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
 msgstr ""
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "תגובת עבור %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "תגובת עבור %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr ""
 
 #: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
+#, php-format
 msgid "Updates tagged with %1$s on %2$s!"
-msgstr "מיקרובלוג מאת %s"
-
-#: actions/apitrends.php:87
-msgid "API method under construction."
 msgstr ""
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "×\90×\99×\9f ×\9eס×\9e×\9a ×\9b×\96×\94."
+msgstr "×\90×\99×\9f ×\94×\95×\93×¢×\94 ×\9b×\96×\95."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -772,23 +503,10 @@ msgstr "גודל לא חוקי."
 msgid "Avatar"
 msgstr "תמונה"
 
-#: actions/avatarsettings.php:78
-#, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
-
-#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
-#: actions/grouplogo.php:181 actions/remotesubscribe.php:191
-#: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
-msgid "User without matching profile."
-msgstr "למשתמש אין פרופיל."
-
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
-#, fuzzy
 msgid "Avatar settings"
-msgstr "הגדרות"
+msgstr "הגדרות הפרופיל"
 
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:202 actions/grouplogo.php:262
@@ -801,24 +519,14 @@ msgid "Preview"
 msgstr ""
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
-#, fuzzy
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
-msgstr "מחק"
+msgstr ""
 
 #: actions/avatarsettings.php:166 actions/grouplogo.php:236
 msgid "Upload"
 msgstr "ההעלה"
 
-#: actions/avatarsettings.php:231 actions/grouplogo.php:289
-msgid "Crop"
-msgstr ""
-
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "העלאה חלקית."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
@@ -835,20 +543,9 @@ msgstr "התמונה עודכנה."
 msgid "Failed updating avatar."
 msgstr "עדכון התמונה נכשל."
 
-#: actions/avatarsettings.php:397
-#, fuzzy
-msgid "Avatar deleted."
-msgstr "התמונה עודכנה."
-
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "כבר נכנסת למערכת!"
-
-#: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
-#, fuzzy
-msgid "Block user"
-msgstr "אין משתמש כזה."
+msgstr "זיהוי ה-Jabber כבר שייך למשתמש אחר."
 
 #: actions/block.php:138
 msgid ""
@@ -865,41 +562,21 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "לא"
-
-#. TRANS: Submit button title for 'No' when blocking a user.
-#. TRANS: Submit button title for 'No' when deleting a user.
-#: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
-msgid "Do not block this user"
-msgstr "אין משתמש כזה."
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "כן"
+msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-#, fuzzy
 msgid "Block this user"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: actions/block.php:187
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -909,46 +586,33 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
-msgstr "×\90×\99×\9f ×\94×\95×\93×¢×\94 ×\9b×\96×\95."
+msgstr "×\90×\99×\9f ×\9eשת×\9eש ×\9b×\96×\94."
 
 #: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "למשתמש אין פרופיל."
+msgstr ""
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s וחברים"
+msgstr ""
 
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
 msgstr ""
 
 #: actions/blockedfromgroup.php:288
-#, fuzzy
 msgid "Unblock user from group"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr ""
 
-#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-#, fuzzy
-msgid "Unblock this user"
-msgstr "אין משתמש כזה."
-
-#. TRANS: Title for mini-posting window loaded from bookmarklet.
-#: actions/bookmarklet.php:51
-#, fuzzy, php-format
-msgid "Post to %s"
-msgstr "תגובת עבור %s"
-
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
 msgstr "אין קוד אישור."
@@ -963,9 +627,9 @@ msgstr "קוד האישור הזה אינו מיועד לך!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "סוג לא מזוהה של כתובת %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -986,48 +650,23 @@ msgstr "כתובת זו כבר אושרה."
 msgid "Couldn't update user."
 msgstr "עידכון המשתמש נכשל."
 
-#. TRANS: Server error thrown on database error canceling e-mail address confirmation.
-#. TRANS: Server error thrown on database error canceling SMS phone number confirmation.
-#: actions/confirmaddress.php:128 actions/emailsettings.php:433
-#: actions/smssettings.php:422
-msgid "Couldn't delete email confirmation."
-msgstr ""
-
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "אשר כתובת"
+msgstr "אשר"
 
 #: actions/confirmaddress.php:161
 #, php-format
 msgid "The address \"%s\" has been confirmed for your account."
 msgstr "הכתובת \"%s\" אושרה עבור חשבונך."
 
-#: actions/conversation.php:99
-#, fuzzy
-msgid "Conversation"
-msgstr "מיקום"
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "הודעות"
 
-#: actions/deleteapplication.php:63
-#, fuzzy
-msgid "You must be logged in to delete an application."
-msgstr "עידכון המשתמש נכשל."
-
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "להודעה אין פרופיל"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
+msgstr "קוד האישור לא נמצא."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1035,11 +674,6 @@ msgstr "לא שלחנו אלינו את הפרופיל הזה"
 msgid "There was a problem with your session token."
 msgstr ""
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "אין הודעה כזו."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1047,18 +681,6 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "אין הודעה כזו."
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
-
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1080,52 +702,26 @@ msgid ""
 "be undone."
 msgstr ""
 
-#: actions/deletenotice.php:109 actions/deletenotice.php:141
-msgid "Delete notice"
-msgstr ""
-
 #: actions/deletenotice.php:144
 msgid "Are you sure you want to delete this notice?"
 msgstr ""
 
 #. TRANS: Submit button title for 'No' when deleting a notice.
 #: actions/deletenotice.php:151
-#, fuzzy
 msgid "Do not delete this notice"
-msgstr "אין הודעה כזו."
+msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr ""
 
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "עידכון המשתמש נכשל."
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "ניתן להשתמש במנוי המקומי!"
-
-#: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
-msgid "Delete user"
-msgstr "מחק"
-
 #: actions/deleteuser.php:136
 msgid ""
 "Are you sure you want to delete this user? This will clear all data about "
 "the user from the database, without a backup."
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when deleting a user.
-#: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
-msgid "Delete this user"
-msgstr "אין משתמש כזה."
-
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
@@ -1137,44 +733,22 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "גודל לא חוקי."
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
+msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "שנה סיסמה"
-
-#: actions/designadminpanel.php:431
-#, fuzzy
-msgid "Site logo"
-msgstr "הודעה חדשה"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
 msgstr "שנה"
 
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
-msgstr "הודעה חדשה"
-
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
 msgstr ""
 
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "הודעה חדשה"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1189,13 +763,6 @@ msgstr ""
 msgid "Background"
 msgstr ""
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr "זה ארוך מידי. אורך מירבי להודעה הוא 140 אותיות."
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1214,30 +781,10 @@ msgstr ""
 msgid "Tile background image"
 msgstr ""
 
-#: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
-msgid "Change colours"
-msgstr "שנה סיסמה"
-
-#: actions/designadminpanel.php:587 lib/designsettings.php:191
-#, fuzzy
-msgid "Content"
-msgstr "התחבר"
-
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "חיפוש"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "טקסט"
 
-#: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
-msgid "Links"
-msgstr "היכנס"
-
 #: actions/designadminpanel.php:651
 msgid "Advanced"
 msgstr ""
@@ -1269,84 +816,31 @@ msgstr ""
 msgid "Save"
 msgstr "שמור"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr ""
 
-#: actions/disfavor.php:94
-#, fuzzy
-msgid "Add to favorites"
-msgstr "מועדפים"
-
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "×\90×\99×\9f ×\9eס×\9e×\9a ×\9b×\96×\94."
+msgstr "×\90×\99×\9f ×\94×\95×\93×¢×\94 ×\9b×\96×\95."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "להודעה אין פרופיל"
-
-#: actions/editapplication.php:66
-msgid "You must be logged in to edit an application."
 msgstr ""
 
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "אין הודעה כזו."
-
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
 msgstr ""
 
-#: actions/editapplication.php:177 actions/newapplication.php:159
-msgid "Name is required."
-msgstr ""
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "השם המלא ארוך מידי (מותרות 255 אותיות בלבד)"
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "כינוי זה כבר תפוס. נסה כינוי אחר."
-
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "×\94רש×\9e×\95ת"
+msgstr "×\94×\94רש×\9e×\94 × ×\93×\97ת×\94"
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "לאתר הבית יש כתובת לא חוקית."
-
-#: actions/editapplication.php:203 actions/newapplication.php:188
-msgid "Organization is required."
-msgstr ""
-
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "שם המיקום ארוך מידי (מותר עד 255 אותיות)."
-
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
@@ -1355,20 +849,11 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "עידכון המשתמש נכשל."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
 msgstr ""
 
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-msgid "You must be logged in to create a group."
-msgstr ""
-
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
 msgid "You must be an admin to edit the group."
@@ -1379,36 +864,14 @@ msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "הביוגרפיה ארוכה מידי (לכל היותר 140 אותיות)"
-
-#: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\""
-msgstr "כתובת אתר הבית '%s' אינה חוקית"
-
-#: actions/editgroup.php:258
-#, fuzzy
-msgid "Could not update group."
-msgstr "עידכון המשתמש נכשל."
+msgstr "שם המיקום ארוך מידי (מותר עד 255 אותיות)."
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
-msgstr "שמירת מידע התמונה נכשל"
-
-#: actions/editgroup.php:280
-#, fuzzy
-msgid "Options saved."
-msgstr "ההגדרות נשמרו."
-
-#. TRANS: Title for e-mail settings.
-#: actions/emailsettings.php:61
-#, fuzzy
-msgid "Email settings"
-msgstr "הגדרות הפרופיל"
+msgstr "עידכון המשתמש נכשל."
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1417,18 +880,6 @@ msgstr "הגדרות הפרופיל"
 msgid "Manage how you get email from %%site.name%%."
 msgstr ""
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "כתובת מסרים מידיים"
-
-#. TRANS: Form note in e-mail settings form.
-#: actions/emailsettings.php:112
-msgid "Current confirmed email address."
-msgstr ""
-
 #. TRANS: Button label to remove a confirmed e-mail address.
 #. TRANS: Button label for removing a set sender e-mail address to post notices from.
 #. TRANS: Button label to remove a confirmed IM address.
@@ -1437,27 +888,9 @@ msgstr ""
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "הסר"
-
-#: actions/emailsettings.php:122
-msgid ""
-"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
-"a message with further instructions."
-msgstr ""
-
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "בטל"
+msgstr "שיחזור"
 
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
@@ -1469,10 +902,9 @@ msgstr ""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "הוסף"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1495,20 +927,8 @@ msgstr ""
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "חדש"
-
-#. TRANS: Form legend for e-mail preferences form.
-#: actions/emailsettings.php:174
-#, fuzzy
-msgid "Email preferences"
-msgstr "העדפות"
-
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:180
-msgid "Send me notices of new subscriptions through email."
 msgstr ""
 
 #. TRANS: Checkbox label in e-mail preferences form.
@@ -1541,38 +961,6 @@ msgstr ""
 msgid "Publish a MicroID for my email address."
 msgstr ""
 
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "העדפות נשמרו."
-
-#. TRANS: Message given saving e-mail address without having provided one.
-#: actions/emailsettings.php:353
-msgid "No email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-msgid "Cannot normalize that email address"
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that not valid.
-#: actions/emailsettings.php:366 actions/register.php:208
-#: actions/siteadminpanel.php:144
-msgid "Not a valid email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that is already set.
-#: actions/emailsettings.php:370
-msgid "That is already your email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-msgid "That email address already belongs to another user."
-msgstr ""
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
@@ -1581,13 +969,6 @@ msgstr ""
 msgid "Couldn't insert confirmation code."
 msgstr "הכנסת קוד האישור נכשלה."
 
-#. TRANS: Message given saving valid e-mail address that is to be confirmed.
-#: actions/emailsettings.php:398
-msgid ""
-"A confirmation code was sent to the email address you added. Check your "
-"inbox (and spam box!) for the code and instructions on how to use it."
-msgstr ""
-
 #. TRANS: Message given canceling e-mail address confirmation that is not pending.
 #. TRANS: Message given canceling IM address confirmation that is not pending.
 #. TRANS: Message given canceling SMS phone number confirmation that is not pending.
@@ -1596,51 +977,20 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "אין אישור ממתין שניתן לבטל."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "זוהי כתובת מסרים מידיים שגויה."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "האישור בוטל."
-
-#. TRANS: Message given trying to remove an e-mail address that is not
-#. TRANS: registered for the active user.
-#: actions/emailsettings.php:458
-msgid "That is not your email address."
-msgstr ""
+msgstr "אין אישור ממתין שניתן לבטל."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "×\94×\9bת×\95×\91ת ×\94×\95סרה."
+msgstr "×\9bת×\95×\91ת ×\96×\95 ×\9b×\91ר ×\90×\95שרה."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
 msgstr ""
 
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-msgid "Couldn't update user record."
-msgstr ""
-
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-msgid "Incoming email address removed."
-msgstr ""
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
-
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr ""
@@ -1649,16 +999,10 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:91
-#: lib/publicgroupnav.php:93
-#, fuzzy
-msgid "Popular notices"
-msgstr "אין הודעה כזו."
-
 #: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
 msgid "Popular notices, page %d"
-msgstr "אין הודעה כזו."
+msgstr ""
 
 #: actions/favorited.php:79
 msgid "The most popular notices on the site right now."
@@ -1688,13 +1032,8 @@ msgid "%s's favorite notices"
 msgstr ""
 
 #: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
 msgid "Updates favored by %1$s on %2$s!"
-msgstr "מיקרובלוג מאת %s"
-
-#: actions/featured.php:69 lib/featureduserssection.php:87
-#: lib/publicgroupnav.php:89
-msgid "Featured users"
 msgstr ""
 
 #: actions/featured.php:71
@@ -1708,33 +1047,20 @@ msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "×\94×\95×\93×¢×\94 ×\97×\93ש×\94"
+msgstr "×\90×\99×\9f ×\94×\95×\93×¢×\94 ×\9b×\96×\95."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "הודעה חדשה"
-
-#: actions/file.php:42
-#, fuzzy
-msgid "No attachments."
-msgstr "אין מסמך כזה."
-
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "אין מסמך כזה."
+msgstr "אין הודעה כזו."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "זו תגובה לא צפויה!"
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "המשתמש אליו אתה מאזין אינו קיים."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1745,64 +1071,27 @@ msgid "That user has blocked you from subscribing."
 msgstr ""
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "×\9c×\90 ×\9e×\95רש×\94."
+msgstr "×\94×\94רש×\9e×\94 ×\90×\95שר×\94"
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "המרת אסימון הבקשה לאסימון גישה לא הצליחה."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "גירסה לא מוכרת של פרוטוקול OMB"
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "שגיאה בעדכון פרופיל מרוחק"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "אין הודעה כזו."
+msgstr ""
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "אין הודעה כזו."
-
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "גודל לא חוקי."
+msgstr "שמירת הפרופיל נכשלה."
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "למשתמש אין פרופיל."
-
-#: actions/groupblock.php:71 actions/groupunblock.php:71
-#: actions/makeadmin.php:71 actions/subedit.php:46
-#: lib/profileformaction.php:79
-msgid "No profile specified."
-msgstr ""
-
-#: actions/groupblock.php:76 actions/groupunblock.php:76
-#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
-#: actions/unsubscribe.php:84 lib/profileformaction.php:86
-msgid "No profile with that ID."
 msgstr ""
 
 #: actions/groupblock.php:81 actions/groupunblock.php:81
@@ -1814,20 +1103,9 @@ msgstr ""
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-#, fuzzy
-msgid "User is already blocked from group."
-msgstr "למשתמש אין פרופיל."
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
 #: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
 msgid "Block user from group"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: actions/groupblock.php:160
 #, php-format
@@ -1839,80 +1117,36 @@ msgstr ""
 
 #. TRANS: Submit button title for 'No' when blocking a user from a group.
 #: actions/groupblock.php:182
-#, fuzzy
 msgid "Do not block this user from this group"
-msgstr "נכשלה ההפניה לשרת: %s"
+msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
-#, fuzzy
 msgid "Block this user from this group"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "אין זיהוי."
+msgstr "אין זיהוי Jabber כזה."
 
 #: actions/groupdesignsettings.php:68
 msgid "You must be logged in to edit a group."
 msgstr ""
 
-#: actions/groupdesignsettings.php:144
-#, fuzzy
-msgid "Group design"
-msgstr "קבוצות"
-
 #: actions/groupdesignsettings.php:155
 msgid ""
 "Customize the way your group looks with a background image and a colour "
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "עידכון המשתמש נכשל."
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "העדפות נשמרו."
-
-#: actions/grouplogo.php:142 actions/grouplogo.php:195
-msgid "Group logo"
-msgstr ""
-
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
-
 #: actions/grouplogo.php:365
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "התמונה עודכנה."
-
-#: actions/grouplogo.php:401
-#, fuzzy
-msgid "Failed updating logo."
-msgstr "עדכון התמונה נכשל."
-
-#: actions/groupmembers.php:100 lib/groupnav.php:92
-#, php-format
-msgid "%s group members"
-msgstr ""
-
 #: actions/groupmembers.php:103
 #, php-format
 msgid "%1$s group members, page %2$d"
@@ -1942,20 +1176,11 @@ msgstr ""
 msgid "Make this user an admin"
 msgstr ""
 
-#. TRANS: Message is used as link title. %s is a user nickname.
-#. TRANS: Title in atom group notice feed. %s is a group name.
-#. TRANS: Title in atom user notice feed. %s is a user name.
-#: actions/grouprss.php:139 actions/userrss.php:94
-#: lib/atomgroupnoticefeed.php:63 lib/atomusernoticefeed.php:69
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #: actions/grouprss.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Updates from members of %1$s on %2$s!"
-msgstr "מיקרובלוג מאת %s"
+msgstr ""
 
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
@@ -1978,29 +1203,13 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "צור חשבון חדש"
-
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"חפש אנשים ב-%%site.name%% לפי שם, מיקום, או תחומי עניין. הפרד בעזרת רווחים "
-"בין הביטויים; עליהם להיות בני לפחות 3 אותיות."
-
-#: actions/groupsearch.php:58
-#, fuzzy
-msgid "Group search"
-msgstr "חיפוש סיסמה"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "אין תוצאות"
+msgstr ""
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -2021,20 +1230,13 @@ msgid "Only an admin can unblock group members."
 msgstr ""
 
 #: actions/groupunblock.php:95
-#, fuzzy
 msgid "User is not blocked from group."
-msgstr "למשתמש אין פרופיל."
-
-#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
-msgid "Error removing the block."
-msgstr "שגיאה בשמירת המשתמש."
+msgstr ""
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "×\94×\92×\93ר×\95ת ×\9eסר×\99×\9d ×\9e×\99×\93×\99×\99×\9d"
+msgstr "×\94×\92×\93ר×\95ת ×\94פר×\95פ×\99×\9c"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2050,16 +1252,8 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
-
-#. TRANS: Form legend for IM settings form.
-#. TRANS: Field label for IM address input in IM settings form.
-#: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
-msgid "IM address"
-msgstr "כתובת מסרים מידיים"
+msgstr ""
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2089,9 +1283,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "העדפות"
+msgstr "העדפות נשמרו."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2103,16 +1296,6 @@ msgstr "שלח לי הודעות דרך Jabber/GTalk."
 msgid "Post a notice when my Jabber/GTalk status changes."
 msgstr "פרסם הודעה כששורת הסטטוס שלי ב-Jabber/GTalk מתעדכנת."
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:172
-msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
-msgstr ""
-
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -2159,17 +1342,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "זוהי כתובת מסרים מידיים שגויה."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "הכנסת קוד האישור נכשלה."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "×\94×\90×\99ש×\95ר ×\91×\95×\98×\9c."
+msgstr "×\90×\99×\9f ×§×\95×\93 ×\90×\99ש×\95ר."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2177,12 +1353,6 @@ msgstr "האישור בוטל."
 msgid "That is not your Jabber ID."
 msgstr "זהו לא זיהוי ה-Jabber שלך."
 
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-#, fuzzy
-msgid "The IM address was removed."
-msgstr "הכתובת הוסרה."
-
 #: actions/inbox.php:59
 #, php-format
 msgid "Inbox for %1$s - page %2$d"
@@ -2202,30 +1372,17 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "עידכון המשתמש נכשל."
-
-#: actions/invite.php:72
 #, php-format
-msgid "Invalid email address: %s"
+msgid "You must be logged in to invite other users to use %s."
 msgstr ""
 
 #: actions/invite.php:110
 msgid "Invitation(s) sent"
 msgstr ""
 
-#: actions/invite.php:112
-msgid "Invite new users"
-msgstr ""
-
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr ""
@@ -2250,33 +1407,18 @@ msgid ""
 "Use this form to invite your friends and colleagues to use this service."
 msgstr ""
 
-#: actions/invite.php:187
-msgid "Email addresses"
-msgstr ""
-
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
 msgstr ""
 
-#: actions/invite.php:192
-msgid "Personal message"
-msgstr ""
-
 #: actions/invite.php:194
 msgid "Optionally add a personal message to the invitation."
 msgstr ""
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "שלח"
-
-#. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
-#: actions/invite.php:228
-#, php-format
-msgid "%1$s has invited you to join them on %2$s"
 msgstr ""
 
 #. TRANS: Body text for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
@@ -2315,14 +1457,7 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr ""
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "אין כינוי"
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr ""
@@ -2331,18 +1466,6 @@ msgstr ""
 msgid "You must be logged in to leave a group."
 msgstr ""
 
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
-msgid "You are not a member of that group."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
-msgid "%1$s left group %2$s"
-msgstr "הסטטוס של %1$s ב-%2$s "
-
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
 msgstr "כבר מחובר."
@@ -2351,11 +1474,6 @@ msgstr "כבר מחובר."
 msgid "Incorrect username or password."
 msgstr "שם משתמש או סיסמה לא נכונים."
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "לא מורשה."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "היכנס"
@@ -2383,49 +1501,40 @@ msgid ""
 msgstr "לצרכי אבטחה, הכנס מחדש את שם המשתמש והסיסמה לפני שתשנה את ההגדרות."
 
 #: actions/login.php:292
-#, fuzzy
 msgid "Login with your username and password."
-msgstr "ש×\9d ×\94×\9eשת×\9eש ×\90×\95 ×\94ס×\99ס×\9e×\94 ×\9c×\90 ×\97×\95ק×\99×\99×\9d"
+msgstr "ש×\9d ×\9eשת×\9eש ×\90×\95 ×¡×\99ס×\9e×\94 ×\9c×\90 × ×\9b×\95× ×\99×\9d."
 
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"היכנס בעזרת שם המשתמש והסיסמה שלך. עדיין אין לך שם משתמש? [הרשם](%%action."
-"register%%) לחשבון "
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
 #: actions/makeadmin.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "למשתמש אין פרופיל."
+msgstr ""
 
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "נכשלה יצירת OpenID מתוך: %s"
+msgstr ""
 
 #: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
 msgid "Can't make %1$s an admin for group %2$s."
-msgstr "למשתמש אין פרופיל."
+msgstr ""
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "אין תוצאות"
+msgstr ""
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
-msgstr "אין הודעה כזו."
-
-#: actions/newapplication.php:64
-msgid "You must be logged in to register an application."
 msgstr ""
 
 #: actions/newapplication.php:143
@@ -2437,13 +1546,8 @@ msgid "Source URL is required."
 msgstr ""
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
-msgstr "שמירת מידע התמונה נכשל"
-
-#: actions/newgroup.php:53
-msgid "New group"
-msgstr ""
+msgstr "שמירת הפרופיל נכשלה."
 
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
@@ -2453,12 +1557,10 @@ msgstr ""
 msgid "New message"
 msgstr "הודעה חדשה"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-msgid "You can't send a message to this user."
-msgstr ""
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "אין תוכן!"
 
@@ -2466,22 +1568,24 @@ msgstr "אין תוכן!"
 msgid "No recipient specified."
 msgstr ""
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 
 #: actions/newmessage.php:181
-#, fuzzy
 msgid "Message sent"
-msgstr "הודעה חדשה"
+msgstr ""
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
@@ -2489,11 +1593,6 @@ msgstr ""
 msgid "New notice"
 msgstr "הודעה חדשה"
 
-#: actions/newnotice.php:217
-#, fuzzy
-msgid "Notice posted"
-msgstr "הודעות"
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2508,9 +1607,9 @@ msgid "Text search"
 msgstr "חיפוש טקסט"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "חיפוש ברצף אחרי \"%s\""
+msgstr ""
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2527,14 +1626,14 @@ msgid ""
 msgstr ""
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "מיקרובלוג מאת %s"
+msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "כל העידכונים התואמים את החיפוש אחרי \"%s\""
+msgstr ""
 
 #: actions/nudge.php:85
 msgid ""
@@ -2561,24 +1660,10 @@ msgstr ""
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2593,9 +1678,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "×\9c×\94×\95×\93×¢×\94 ×\90×\99×\9f ×¤×¨×\95פ×\99×\9c"
+msgstr "×\9c×\9eשת×\9eש ×\90×\99×\9f ×¤×¨×\95פ×\99×\9c."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2604,9 +1688,9 @@ msgstr "הסטטוס של %1$s ב-%2$s "
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "התחבר"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2614,24 +1698,13 @@ msgstr "התחבר"
 msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
-#. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
-msgid "Not a supported data format."
-msgstr ""
-
 #: actions/opensearch.php:64
 msgid "People Search"
 msgstr "חיפוש אנשים"
 
-#: actions/opensearch.php:67
-msgid "Notice Search"
-msgstr ""
-
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "הגדרות"
+msgstr "הגדרות הפרופיל"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2649,43 +1722,17 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "הגדרות הפרופיל"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "שם המיקום ארוך מידי (מותר עד 255 אותיות)."
-
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "הודעה חדשה"
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "הודעה חדשה"
+msgstr ""
 
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "השרת לא החזיר כתובת פרופיל"
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "תוכן ההודעה לא חוקי"
-
-#: actions/otp.php:104
-msgid "Login token expired."
-msgstr ""
+msgstr "לא התבקש אישור!"
 
 #: actions/outbox.php:58
 #, php-format
@@ -2705,16 +1752,6 @@ msgstr ""
 msgid "Change password"
 msgstr "שנה סיסמה"
 
-#: actions/passwordsettings.php:69
-#, fuzzy
-msgid "Change your password."
-msgstr "שנה סיסמה"
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "הסיסמה נשמרה."
-
 #: actions/passwordsettings.php:104
 msgid "Old password"
 msgstr "סיסמה ישנה"
@@ -2740,10 +1777,6 @@ msgstr "זהה לסיסמה למעלה"
 msgid "Change"
 msgstr "שנה"
 
-#: actions/passwordsettings.php:154 actions/register.php:237
-msgid "Password must be 6 or more characters."
-msgstr ""
-
 #: actions/passwordsettings.php:157 actions/register.php:240
 msgid "Passwords don't match."
 msgstr "הסיסמאות לא תואמות."
@@ -2774,24 +1807,24 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2801,11 +1834,6 @@ msgstr ""
 msgid "Site"
 msgstr ""
 
-#: actions/pathsadminpanel.php:238
-#, fuzzy
-msgid "Server"
-msgstr "שיחזור"
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2814,11 +1842,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "הודעה חדשה"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2851,34 +1874,14 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "תמונה"
-
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "הגדרות"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "התמונה עודכנה."
-
-#: actions/pathsadminpanel.php:292
-#, fuzzy
-msgid "Avatar directory"
-msgstr "התמונה עודכנה."
+msgstr "תמונה"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
 msgstr ""
 
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:309
 msgid "Background path"
 msgstr ""
@@ -2887,21 +1890,6 @@ msgstr ""
 msgid "Background directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:320
-#, fuzzy
-msgid "SSL"
-msgstr "סמס"
-
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "שיחזור"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "הודעות"
-
 #: actions/pathsadminpanel.php:325
 msgid "Always"
 msgstr ""
@@ -2914,19 +1902,13 @@ msgstr ""
 msgid "When to use SSL"
 msgstr ""
 
-#: actions/pathsadminpanel.php:335
-#, fuzzy
-msgid "SSL server"
-msgstr "שיחזור"
-
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "הודעה חדשה"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2942,19 +1924,18 @@ msgid "People search"
 msgstr "חיפוש סיסמה"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "לא עומד בכללים ל-OpenID."
+msgstr ""
 
 #: actions/peopletag.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "מיקרובלוג מאת %s"
+msgstr ""
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "ת×\95×\9b×\9f ×\94×\94×\95×\93×¢×\94 ×\9c×\90 ×\97×\95ק×\99"
+msgstr "×\92×\95×\93×\9c ×\9c×\90 ×\97×\95ק×\99."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -2971,9 +1952,8 @@ msgid ""
 msgstr "עדכן את הפרופיל האישי שלך כאן, על מנת שאנשים יוכלו לדעת עליך יותר."
 
 #: actions/profilesettings.php:99
-#, fuzzy
 msgid "Profile information"
-msgstr "פר×\95פ×\99×\9c ×\9c×\90 ×\9e×\95×\9bר"
+msgstr "×\94×\92×\93ר×\95ת ×\94פר×\95פ×\99×\9c"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -2996,14 +1976,13 @@ msgid "URL of your homepage, blog, or profile on another site"
 msgstr "הכתובת של אתר הבית שלך, בלוג, או פרופיל באתר אחר "
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
+msgstr ""
 
 #: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
 msgid "Describe yourself and your interests"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
+msgstr ""
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3057,41 +2036,23 @@ msgid ""
 msgstr ""
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "×\94×\91×\99×\95×\92רפ×\99×\94 ×\90ר×\95×\9b×\94 ×\9e×\99×\93×\99 (×\9c×\9b×\9c ×\94×\99×\95תר 140 ×\90×\95ת×\99×\95ת)"
+msgstr "ש×\9d ×\94×\9e×\99ק×\95×\9d ×\90ר×\95×\9a ×\9e×\99×\93×\99 (×\9e×\95תר ×¢×\93 %d ×\90×\95ת×\99×\95ת)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
-msgstr "כתובת אתר הבית '%s' אינה חוקית"
-
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "שמירת הפרופיל נכשלה."
+msgstr "גודל לא חוקי."
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "שמירת הפרופיל נכשלה."
 
-#: actions/profilesettings.php:383
-#, fuzzy
-msgid "Couldn't save tags."
-msgstr "שמירת הפרופיל נכשלה."
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -3102,33 +2063,21 @@ msgstr "ההגדרות נשמרו."
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
-#: actions/public.php:130
-#, fuzzy, php-format
-msgid "Public timeline, page %d"
-msgstr "קו זמן ציבורי"
-
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
 msgstr "קו זמן ציבורי"
 
 #: actions/public.php:160
-#, fuzzy
 msgid "Public Stream Feed (RSS 1.0)"
-msgstr "הזנת זרם הציבורי"
+msgstr ""
 
 #: actions/public.php:164
-#, fuzzy
 msgid "Public Stream Feed (RSS 2.0)"
-msgstr "הזנת זרם הציבורי"
+msgstr ""
 
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "הזנת זרם הציבורי"
+msgstr ""
 
 #: actions/public.php:188
 #, php-format
@@ -3165,9 +2114,8 @@ msgid ""
 msgstr ""
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "הזנת זרם הציבורי"
+msgstr ""
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3218,10 +2166,6 @@ msgstr "שגיאה באישור הקוד."
 msgid "This confirmation code is too old. Please start again."
 msgstr "קוד אישור זה ישן מידי. אנא התחל מחדש."
 
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
@@ -3232,10 +2176,6 @@ msgstr ""
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
 #: actions/recoverpassword.php:191
 msgid "Nickname or email address"
 msgstr ""
@@ -3318,11 +2258,6 @@ msgstr "הסיסמה החדשה נשמרה בהצלחה. אתה מחובר למ
 msgid "Sorry, only invited people can register."
 msgstr ""
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "שגיאה באישור הקוד."
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr ""
@@ -3339,10 +2274,6 @@ msgstr ""
 msgid "You can't register if you don't agree to the license."
 msgstr "לא ניתן להירשם ללא הסכמה לרשיון"
 
-#: actions/register.php:219
-msgid "Email address already exists."
-msgstr ""
-
 #: actions/register.php:250 actions/register.php:272
 msgid "Invalid username or password."
 msgstr "שם המשתמש או הסיסמה לא חוקיים"
@@ -3353,18 +2284,10 @@ msgid ""
 "link up to friends and colleagues. "
 msgstr ""
 
-#: actions/register.php:432
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr ""
-
 #: actions/register.php:437
 msgid "6 or more characters. Required."
 msgstr " לפחות 6 אותיות. שדה חובה."
 
-#: actions/register.php:441
-msgid "Same as password above. Required."
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
 #: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:132
@@ -3448,11 +2371,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "הרשמה מרוחקת"
 
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "ההרשמה אושרה"
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "כינוי משתמש"
@@ -3479,47 +2397,24 @@ msgid "Invalid profile URL (bad format)"
 msgstr "כתובת פרופיל לא חוקית (פורמט לא תקין)"
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Not a valid profile URL (no YADIS document)."
+msgstr ""
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
 msgstr ""
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "אסימון הבקשה לא התקבל."
+msgstr ""
 
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "הודעה חדשה"
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "לא ניתן להירשם ללא הסכמה לרשיון"
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "כבר נכנסת למערכת!"
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "צור"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "צור"
+msgstr "איפוס"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3527,25 +2422,10 @@ msgstr "צור"
 msgid "Replies to %s"
 msgstr "תגובת עבור %s"
 
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "תגובת עבור %s"
-
-#: actions/replies.php:145
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr "הזנת הודעות של %s"
-
-#: actions/replies.php:152
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr "הזנת הודעות של %s"
-
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "×\94×\96נת ×\94×\95×\93×¢×\95ת ×©×\9c %s"
+msgstr "ת×\92×\95×\91ת ×¢×\91×\95ר %s"
 
 #: actions/replies.php:199
 #, php-format
@@ -3568,35 +2448,25 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "תגובת עבור %s"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
+msgstr ""
 
 #: actions/revokerole.php:82
-#, fuzzy
 msgid "User doesn't have this role."
-msgstr "למשתמש אין פרופיל."
+msgstr ""
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "×\94ת×\9e×\95× ×\94 ×¢×\95×\93×\9b× ×\94."
+msgstr "ס×\98×\98×\99ס×\98×\99ק×\94"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
 msgid "You cannot sandbox users on this site."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
+msgstr ""
 
 #: actions/sandbox.php:72
-#, fuzzy
 msgid "User is already sandboxed."
-msgstr "למשתמש אין פרופיל."
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3626,43 +2496,18 @@ msgstr ""
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "הגדרות"
-
-#: actions/showapplication.php:82
-msgid "You must be logged in to view an application."
-msgstr ""
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "להודעה אין פרופיל"
+msgstr "הגדרות הפרופיל"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "כינוי"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "מיקום"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:187 actions/version.php:200
-#: lib/applicationeditform.php:216 lib/groupeditform.php:172
-#, fuzzy
-msgid "Description"
-msgstr "הרשמות"
+msgstr ""
 
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
@@ -3674,18 +2519,10 @@ msgstr "סטטיסטיקה"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3717,28 +2554,19 @@ msgid "Are you sure you want to reset your consumer key and secret?"
 msgstr ""
 
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s וחברים"
-
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
 msgstr ""
 
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "הזנות החברים של %s"
+msgstr ""
 
 #: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "הזנות החברים של %s"
-
-#: actions/showfavorites.php:185
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr "הזנות החברים של %s"
+msgstr ""
 
 #: actions/showfavorites.php:206
 msgid ""
@@ -3765,64 +2593,38 @@ msgstr ""
 msgid "This is a way to share what you like."
 msgstr ""
 
-#: actions/showgroup.php:82 lib/groupnav.php:86
-#, php-format
-msgid "%s group"
-msgstr ""
-
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "כל המנויים"
+msgstr ""
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "×\90×\99×\9f ×\94×\95×\93×¢×\94 ×\9b×\96×\95."
+msgstr "×\9c×\9eשת×\9eש ×\90×\99×\9f ×¤×¨×\95פ×\99×\9c."
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-#, fuzzy
-msgid "Note"
-msgstr "הודעות"
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "הזנת הודעות של %s"
+msgstr ""
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "הזנת הודעות של %s"
-
-#: actions/showgroup.php:350
-#, fuzzy, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr "הזנת הודעות של %s"
+msgstr ""
 
 #: actions/showgroup.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s group"
-msgstr "הזנת הודעות של %s"
-
-#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
-#, fuzzy
-msgid "Members"
-msgstr "חבר מאז"
+msgstr ""
 
 #: actions/showgroup.php:398 lib/profileaction.php:117
 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
@@ -3834,11 +2636,6 @@ msgstr ""
 msgid "All members"
 msgstr ""
 
-#: actions/showgroup.php:439
-#, fuzzy
-msgid "Created"
-msgstr "צור"
-
 #: actions/showgroup.php:455
 #, php-format
 msgid ""
@@ -3862,10 +2659,6 @@ msgstr ""
 msgid "Admins"
 msgstr ""
 
-#: actions/showmessage.php:81
-msgid "No such message."
-msgstr ""
-
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
 msgstr ""
@@ -3881,9 +2674,8 @@ msgid "Message from %1$s on %2$s"
 msgstr ""
 
 #: actions/shownotice.php:90
-#, fuzzy
 msgid "Notice deleted."
-msgstr "הודעות"
+msgstr ""
 
 #: actions/showstream.php:73
 #, php-format
@@ -3891,29 +2683,14 @@ msgid " tagged %s"
 msgstr ""
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s וחברים"
+msgstr ""
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "הזנת הודעות של %s"
-
-#: actions/showstream.php:129
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr "הזנת הודעות של %s"
-
-#: actions/showstream.php:136
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr "הזנת הודעות של %s"
-
-#: actions/showstream.php:143
-#, fuzzy, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr "הזנת הודעות של %s"
+msgstr ""
 
 #: actions/showstream.php:148
 #, php-format
@@ -3955,19 +2732,13 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "תגובת עבור %s"
-
 #: actions/silence.php:65 actions/unsilence.php:65
 msgid "You cannot silence users on this site."
 msgstr ""
 
 #: actions/silence.php:72
-#, fuzzy
 msgid "User is already silenced."
-msgstr "למשתמש אין פרופיל."
+msgstr ""
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
@@ -3998,11 +2769,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "הודעה חדשה"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4027,11 +2793,6 @@ msgstr ""
 msgid "Contact email address for your site"
 msgstr ""
 
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "מיקום"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4069,43 +2830,21 @@ msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "הודעה חדשה"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "הודעה חדשה"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "בעיה בשמירת ההודעה."
+msgstr "הודעות"
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "הודעה חדשה"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "הודעה חדשה"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "×\94×\92×\93ר×\95ת ×\9eסר×\99×\9d ×\9e×\99×\93×\99×\99×\9d"
+msgstr "×\94×\92×\93ר×\95ת ×\94פר×\95פ×\99×\9c"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4116,15 +2855,8 @@ msgstr ""
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לקבל"
-
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "כתובת מסרים מידיים"
+msgstr ""
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4136,38 +2868,20 @@ msgstr ""
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-msgid "Confirmation code"
-msgstr ""
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "אשר"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
 msgstr ""
 
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr ""
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "העדפות"
+msgstr "העדפות נשמרו."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4176,62 +2890,24 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "העדפות נשמרו."
-
-#. TRANS: Message given saving SMS phone number without having provided one.
-#: actions/smssettings.php:338
-msgid "No phone number."
-msgstr ""
-
 #. TRANS: Message given saving SMS phone number without having selected a carrier.
 #: actions/smssettings.php:344
 msgid "No carrier selected."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-msgid "That is already your phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-msgid "That phone number already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
-msgstr "קוד האישור הזה אינו מיועד לך!"
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-msgid "That is the wrong confirmation number."
 msgstr ""
+"קוד אישור נשלח אל כתובת המסרים המידיים שהוספת. עליך לאשר את %s לשליחת מסרים "
+"מידיים אליך."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "האישור בוטל."
-
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-msgid "That is not your phone number."
-msgstr ""
-
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "הכתובת הוסרה."
+msgstr "אין קוד אישור."
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
@@ -4252,26 +2928,12 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-msgid "No code entered"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
 msgid "Snapshots"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:65
-#, fuzzy
-msgid "Manage snapshot configuration"
-msgstr "הרשמות"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
@@ -4312,50 +2974,23 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "הגדרות"
-
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "×\99צ×\99רת ×\94×\9e× ×\95×\99 נכשלה."
+msgstr "×\94×\9bנסת ×\9e× ×\95×\99 ×\97×\93ש נכשלה."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "אין הודעה כזו."
-
 #: actions/subscribe.php:117
-#, fuzzy
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#: actions/subscribe.php:145
-#, fuzzy
-msgid "Subscribed"
-msgstr "הירשם כמנוי"
-
-#: actions/subscribers.php:50
-#, fuzzy, php-format
-msgid "%s subscribers"
-msgstr "מנויים"
+msgstr ""
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "כל המנויים"
+msgstr ""
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4384,16 +3019,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "כל המנויים"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "כל המנויים"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr "אלה האנשים שלהודעות שלהם אתה מאזין."
@@ -4413,55 +3038,34 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
-msgid "%s is not listening to anyone."
-msgstr "%1$s כעת מאזין להודעות שלך ב-%2$s"
-
-#: actions/subscriptions.php:208
-#, fuzzy
-msgid "Jabber"
-msgstr "אין זיהוי Jabber כזה."
-
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
 msgstr "סמס"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "מיקרובלוג מאת %s"
+msgstr ""
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "הזנת הודעות של %s"
+msgstr ""
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "הזנת הודעות של %s"
-
-#: actions/tag.php:99
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr "הזנת הודעות של %s"
+msgstr ""
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "אין מסמך כזה."
+msgstr ""
 
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
 msgstr ""
 
-#: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
-msgid "User profile"
-msgstr "למשתמש אין פרופיל."
-
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
@@ -4483,43 +3087,16 @@ msgid ""
 msgstr ""
 
 #: actions/tagother.php:200
-#, fuzzy
 msgid "Could not save tags."
-msgstr "ש×\9e×\99רת ×\9e×\99×\93×¢ ×\94ת×\9e×\95× ×\94 × ×\9bש×\9c"
+msgstr "ש×\9e×\99רת ×\94פר×\95פ×\99×\9c × ×\9bש×\9c×\94."
 
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
 
-#: actions/tagrss.php:35
-#, fuzzy
-msgid "No such tag."
-msgstr "אין הודעה כזו."
-
-#: actions/unblock.php:59
-#, fuzzy
-msgid "You haven't blocked that user."
-msgstr "כבר נכנסת למערכת!"
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "למשתמש אין פרופיל."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "למשתמש אין פרופיל."
-
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "השרת לא החזיר כתובת פרופיל"
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "בטל מנוי"
+msgstr "לא התבקש אישור!"
 
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
@@ -4527,13 +3104,6 @@ msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "מתשמש"
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr ""
@@ -4566,32 +3136,16 @@ msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
 #: actions/useradminpanel.php:231
-#, fuzzy
 msgid "New users"
-msgstr "מחק"
-
-#: actions/useradminpanel.php:235
-msgid "New user welcome"
-msgstr ""
+msgstr "הודעה חדשה"
 
 #: actions/useradminpanel.php:236
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "כל המנויים"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "ההרשמה אושרה"
-
 #: actions/useradminpanel.php:251
-#, fuzzy
 msgid "Invitations"
-msgstr "מיקום"
+msgstr ""
 
 #: actions/useradminpanel.php:256
 msgid "Invitations enabled"
@@ -4606,14 +3160,11 @@ msgid "Authorize subscription"
 msgstr "אשר מנוי"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"בדוק את הפרטים כדי לוודא שברצונך להירשם כמנוי להודעות משתמש זה. אם אינך רוצה "
-"להירשם, לחץ \"בטל\"."
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4625,18 +3176,16 @@ msgstr "קבל"
 
 #: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
-#, fuzzy
 msgid "Subscribe to this user"
-msgstr "×\94×\94רש×\9e×\94 ×\90×\95שרה"
+msgstr "×\9c×\90 ×©×\9c×\97× ×\95 ×\90×\9c×\99× ×\95 ×\90ת ×\94פר×\95פ×\99×\9c ×\94×\96ה"
 
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "דחה"
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "×\9b×\9c ×\94×\9e× ×\95×\99×\99×\9d"
+msgstr "×\90שר ×\9e× ×\95×\99"
 
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
@@ -4647,28 +3196,22 @@ msgid "Subscription authorized"
 msgstr "ההרשמה אושרה"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"המנוי אושר, אבל לא התקבלה כתובת אליה ניתן לחזור. בדוק את הוראות האתר וחפש "
-"כיצד לאשר מנוי. אסימון המנוי שלך הוא:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "ההרשמה נדחתה"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"המנוי נדחה, אבל לא התקבלה כתובת לחזרה. בדוק את הוראות האתר וחפש כיצד להשלים "
-"דחיית מנוי."
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4696,19 +3239,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "לא ניתן לקרוא את ה-URL '%s' של התמונה"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "סוג התמונה של '%s' אינו מתאים"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "הגדרות הפרופיל"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4722,19 +3260,14 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "כל המנויים"
+msgstr ""
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4751,11 +3284,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr ""
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "סטטיסטיקה"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4794,12 +3322,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "אישי"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4838,43 +3360,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "גודל לא חוקי."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "אין הודעה כזו."
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "עידכון המשתמש נכשל."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "אין הודעה כזו."
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "עידכון המשתמש נכשל."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "שמירת מידע התמונה נכשל"
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
@@ -4885,16 +3370,6 @@ msgstr ""
 msgid "You are banned from sending direct messages."
 msgstr ""
 
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-msgid "Could not insert message."
-msgstr ""
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4903,61 +3378,43 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "שגיאת מסד נתונים בהכנסת התגובה: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "בעיה בשמירת ההודעה."
-
-#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-#, fuzzy
-msgid "Problem saving notice. Unknown user."
-msgstr "בעיה בשמירת ההודעה."
+msgstr "שגיאה בהכנסת התמונה."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "בעיה בשמירת ההודעה."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "בעיה בשמירת ההודעה."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -4976,57 +3433,25 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "למשתמש אין פרופיל."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "בעיה בשמירת ההודעה."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
-
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-#, fuzzy
-msgid "User has blocked you."
-msgstr "למשתמש אין פרופיל."
-
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "לא מנוי!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "×\9e×\97×\99קת ×\94×\9e× ×\95×\99 ×\9c×\90 ×\94צ×\9c×\99×\97ה."
+msgstr "×\94×\9bנסת ×\9e× ×\95×\99 ×\97×\93ש × ×\9bש×\9cה."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "×\9e×\97×\99קת ×\94×\9e× ×\95×\99 ×\9c×\90 ×\94צ×\9c×\99×\97ה."
+msgstr "×\94×\9bנסת ×\9e× ×\95×\99 ×\97×\93ש × ×\9bש×\9cה."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "×\9e×\97×\99קת ×\94×\9e× ×\95×\99 ×\9c×\90 ×\94צ×\9c×\99×\97ה."
+msgstr "×\94×\9bנסת ×\9e× ×\95×\99 ×\97×\93ש × ×\9bש×\9cה."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5037,71 +3462,34 @@ msgstr ""
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
-#, fuzzy
 msgid "Could not create group."
-msgstr "ש×\9e×\99רת ×\9e×\99×\93×¢ ×\94ת×\9e×\95× ×\94 × ×\9bש×\9c"
+msgstr "×¢×\99×\93×\9b×\95×\9f ×\94×\9eשת×\9eש × ×\9bש×\9c."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "×\99צ×\99רת ×\94×\9e× ×\95×\99 נכשלה."
+msgstr "ש×\9e×\99רת ×\94פר×\95פ×\99×\9c נכשלה."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "×\99צ×\99רת ×\94×\9e× ×\95×\99 × ×\9bש×\9c×\94."
+msgstr "×¢×\99×\93×\9b×\95×\9f ×\94×\9eשת×\9eש × ×\9bש×\9c."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "יצירת המנוי נכשלה."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:109
-msgid "Change your profile settings"
-msgstr ""
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "עדכון התמונה נכשל."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:123
-msgid "Change your password"
-msgstr ""
+msgstr "שמירת הפרופיל נכשלה."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "למשתמש אין פרופיל."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-msgid "Other options"
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
 msgstr ""
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "הסטטוס של %1$s ב-%2$s "
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5118,39 +3506,23 @@ msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "אישי"
-
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "שנה סיסמה"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "נכשלה ההפניה לשרת: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "התחבר"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "הרשמות"
-
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
 msgctxt "MENU"
@@ -5166,10 +3538,9 @@ msgstr ""
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
-#, fuzzy
 msgctxt "MENU"
 msgid "Invite"
-msgstr "גודל לא חוקי."
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
@@ -5177,26 +3548,11 @@ msgctxt "TOOLTIP"
 msgid "Logout from the site"
 msgstr ""
 
-#. TRANS: Main menu option when logged in to log out the current user
-#: lib/action.php:477
-#, fuzzy
-msgctxt "MENU"
-msgid "Logout"
-msgstr "צא"
-
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "צור חשבון חדש"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "הירשם"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
@@ -5204,60 +3560,21 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "היכנס"
-
-#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:494
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Help me!"
-msgstr "עזרה"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
-msgstr "עזרה"
-
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
 msgstr ""
 
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "חיפוש"
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "הודעה חדשה"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "הודעה חדשה"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "הרשמות"
+msgstr ""
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5305,13 +3622,11 @@ msgstr ""
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** הוא שרות ביקרובלוג הניתן על ידי [%%site.broughtby%%](%%"
-"site.broughtbyurl%%)."
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5331,12 +3646,6 @@ msgstr ""
 "s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/"
 "licensing/licenses/agpl-3.0.html)"
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "הודעה חדשה"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5370,16 +3679,14 @@ msgstr ""
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
-#, fuzzy
 msgid "After"
-msgstr "<< אחרי"
+msgstr ""
 
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: past than the currently displayed information.
 #: lib/action.php:1213
-#, fuzzy
 msgid "Before"
-msgstr "לפני >>"
+msgstr ""
 
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
@@ -5424,110 +3731,58 @@ msgstr ""
 msgid "Unable to delete design setting."
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "הרשמות"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
-#, fuzzy
 msgctxt "MENU"
 msgid "Site"
-msgstr "הודעה חדשה"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-msgid "Design configuration"
 msgstr ""
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
 msgid "Design"
-msgstr "אישי"
+msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
-#, fuzzy
 msgid "User configuration"
-msgstr "×\94רש×\9e×\95ת"
+msgstr "×\90×\99×\9f ×§×\95×\93 ×\90×\99ש×\95ר."
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "מתשמש"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "הרשמות"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
-#, fuzzy
 msgid "Paths configuration"
-msgstr "הרשמות"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "הרשמות"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "הודעה חדשה"
+msgstr "אין קוד אישור."
 
 #. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "הרשמות"
+#: lib/adminpanelaction.php:390
+msgid "Sessions configuration"
+msgstr "אין קוד אישור."
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
-#, fuzzy, php-format
+#, php-format
 msgid "Describe your application in %d characters"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:224
-#, fuzzy
 msgid "URL of the homepage of this application"
-msgstr "הכתובת של אתר הבית שלך, בלוג, או פרופיל באתר אחר "
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "מקור"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
@@ -5536,9 +3791,8 @@ msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
-#, fuzzy
 msgid "URL for the homepage of the organization"
-msgstr "הכתובת של אתר הבית שלך, בלוג, או פרופיל באתר אחר "
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5598,47 +3852,21 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "הסר"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
+msgstr "שיחזור"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
 msgstr ""
 
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:279
-#, fuzzy
-msgid "Provider"
-msgstr "פרופיל"
-
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "הסיסמה נשמרה."
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "הסיסמה נשמרה."
-
-#: lib/channel.php:157 lib/channel.php:177
-msgid "Command results"
 msgstr ""
 
 #: lib/channel.php:229 lib/mailhandler.php:142
@@ -5649,46 +3877,33 @@ msgstr ""
 msgid "Command failed"
 msgstr ""
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "אין פרופיל תואם לפרופיל המרוחק "
-
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "למשתמש אין פרופיל."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "עידכון המשתמש נכשל."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "עידכון המשתמש נכשל."
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
+msgstr ""
 
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "תגובת עבור %s"
+#: lib/command.php:240
+#, php-format
+msgid "Nudge sent to %s."
+msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5696,56 +3911,26 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "כבר נכנסת למערכת!"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "נכשלה ההפניה לשרת: %s"
-
-#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: Message given having added a user to a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "נכשלה יצירת OpenID מתוך: %s"
-
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "שם מלא"
-
-#. TRANS: Whois output. %s is the location of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, php-format
-msgid "Location: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the homepage of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:360
 #, php-format
-msgid "Homepage: %s"
+msgid "%1$s joined group %2$s."
 msgstr ""
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "אודות: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5754,150 +3939,102 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr ""
-
-#: lib/command.php:494
-msgid "Error sending direct message."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "לא ניתן להירשם ללא הסכמה לרשיון"
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "כבר נכנסת למערכת!"
-
 #. TRANS: Message given having repeated a notice from another user.
 #. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "הודעות"
-
-#: lib/command.php:531
-#, fuzzy
-msgid "Error repeating notice."
-msgstr "בעיה בשמירת ההודעה."
-
-#: lib/command.php:562
+#: lib/command.php:554
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "תגובת עבור %s"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "בעיה בשמירת ההודעה."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+msgid "Notice from %s repeated."
 msgstr ""
 
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "×\9c×\90 ×©×\9c×\97× ×\95 ×\90×\9c×\99× ×\95 ×\90ת ×\94פר×\95פ×\99×\9c ×\94×\96×\94"
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
+msgid "Error repeating notice."
+msgstr "ש×\92×\99×\90×\94 ×\91×\99צ×\99רת ×©×\9d ×\94×\9eשת×\9eש."
 
-#: lib/command.php:634
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Subscribed to %s"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
+msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
-msgid "Command not yet implemented."
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:685
-msgid "Notification off."
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
+msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
-msgstr ""
-
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr ""
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "בטל מנוי"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "לא שלחנו אלינו את הפרופיל הזה"
 msgstr[1] "לא שלחנו אלינו את הפרופיל הזה"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "הרשמה מרוחקת"
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "הרשמה מרוחקת"
 msgstr[1] "הרשמה מרוחקת"
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "לא שלחנו אלינו את הפרופיל הזה"
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "לא שלחנו אלינו את הפרופיל הזה"
 msgstr[1] "לא שלחנו אלינו את הפרופיל הזה"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5939,11 +4076,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "אין קוד אישור."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5968,30 +4100,10 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "התחבר"
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "ההעלה"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "זה ארוך מידי. אורך מירבי להודעה הוא 140 אותיות."
-
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
@@ -6000,15 +4112,6 @@ msgstr ""
 msgid "Disfavor this notice"
 msgstr ""
 
-#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
-msgid "Favor this notice"
-msgstr "אין הודעה כזו."
-
-#: lib/favorform.php:140
-msgid "Favor"
-msgstr ""
-
 #: lib/feed.php:85
 msgid "RSS 1.0"
 msgstr ""
@@ -6058,45 +4161,28 @@ msgstr ""
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr "הכתובת של אתר הבית שלך, בלוג, או פרופיל באתר אחר "
-
 #: lib/groupeditform.php:168
-#, fuzzy
 msgid "Describe the group or topic"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
+msgstr ""
 
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "תאר את עצמך ואת נושאי העניין שלך ב-140 אותיות"
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "מיקומך, למשל \"עיר, מדינה או מחוז, ארץ\""
+msgstr ""
 
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
 msgstr ""
 
-#: lib/groupnav.php:85
-msgid "Group"
-msgstr ""
-
 #: lib/groupnav.php:101
-#, fuzzy
 msgid "Blocked"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: lib/groupnav.php:102
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked users"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: lib/groupnav.php:108
 #, php-format
@@ -6104,9 +4190,8 @@ msgid "Edit %s group properties"
 msgstr ""
 
 #: lib/groupnav.php:113
-#, fuzzy
 msgid "Logo"
-msgstr "צ×\90"
+msgstr "×\94×\99×\9bנס"
 
 #: lib/groupnav.php:114
 #, php-format
@@ -6140,11 +4225,6 @@ msgstr "עמוד זה אינו זמין בסוג מדיה שאתה יכול לק
 msgid "Unsupported image file format."
 msgstr "פורמט התמונה אינו נתמך."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "זה ארוך מידי. אורך מירבי להודעה הוא 140 אותיות."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "העלאה חלקית."
@@ -6157,11 +4237,6 @@ msgstr "שגיאת מערכת בהעלאת הקובץ."
 msgid "Not an image or corrupt file."
 msgstr "זהו לא קובץ תמונה, או שחל בו שיבוש."
 
-#: lib/imagefile.php:122
-#, fuzzy
-msgid "Lost our file."
-msgstr "אין הודעה כזו."
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr ""
@@ -6184,29 +4259,8 @@ msgstr ""
 msgid "Unknown inbox source %d."
 msgstr ""
 
-#: lib/joinform.php:114
-#, fuzzy
-msgid "Join"
-msgstr "היכנס"
-
-#: lib/leaveform.php:114
-#, fuzzy
-msgid "Leave"
-msgstr "שמור"
-
-#: lib/logingroupnav.php:80
-#, fuzzy
-msgid "Login with a username and password"
-msgstr "שם המשתמש או הסיסמה לא חוקיים"
-
 #: lib/logingroupnav.php:86
-#, fuzzy
 msgid "Sign up for a new account"
-msgstr "צור חשבון חדש"
-
-#. TRANS: Subject for address confirmation email
-#: lib/mail.php:174
-msgid "Email address confirmation"
 msgstr ""
 
 #. TRANS: Body for address confirmation email.
@@ -6242,7 +4296,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6255,17 +4309,6 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1$s מאזין כעת להודעות שלך ב %2$s. \n"
-"\n"
-"\t%3$s\n"
-" שלך,\n"
-" %4$s.\n"
-
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "אודות: %s"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6287,17 +4330,6 @@ msgid ""
 "%4$s"
 msgstr ""
 
-#. TRANS: Subject line for SMS-by-email notification messages
-#: lib/mail.php:433
-#, php-format
-msgid "%s status"
-msgstr ""
-
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-msgid "SMS confirmation"
-msgstr ""
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6355,9 +4387,9 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%1$s כעת מאזין להודעות שלך ב-%2$s"
+msgstr ""
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6433,31 +4465,14 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr ""
 
-#: lib/mailhandler.php:37
-msgid "Could not parse message."
-msgstr ""
-
-#: lib/mailhandler.php:42
-msgid "Not a registered user."
-msgstr ""
-
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
 #: lib/mailhandler.php:50
 msgid "Sorry, no incoming email allowed."
 msgstr ""
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "פורמט התמונה אינו נתמך."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6497,9 +4512,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "עידכון המשתמש נכשל."
+msgstr ""
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6519,46 +4533,29 @@ msgstr ""
 msgid "To"
 msgstr "אל"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "לפחות 6 אותיות"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "שלח"
-
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "הודעה חדשה"
+msgstr ""
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "מה המצב %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "שמירת הפרופיל נכשלה."
-
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "שמירת הפרופיל נכשלה."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6566,9 +4563,8 @@ msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of north
 #: lib/noticelist.php:436
-#, fuzzy
 msgid "N"
-msgstr "לא"
+msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
@@ -6594,42 +4590,22 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "אין תוכן!"
-
-#: lib/noticelist.php:602
-#, fuzzy
-msgid "Repeated by"
-msgstr "צור"
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr ""
 
-#: lib/noticelist.php:630
-#, fuzzy
+#: lib/noticelist.php:631
 msgid "Reply"
-msgstr "הגב"
-
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "הודעות"
-
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
+msgstr "תגובות"
 
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "שגיאה בהכנסת הפרופיל"
@@ -6646,11 +4622,6 @@ msgstr "שגיאה בעדכון פרופיל מרוחק"
 msgid "Error inserting remote profile"
 msgstr "שגיאה בהכנסת פרופיל מרוחק"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "הודעה חדשה"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "הכנסת מנוי חדש נכשלה."
@@ -6679,10 +4650,6 @@ msgstr ""
 msgid "Outbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:131
-msgid "Your sent messages"
-msgstr ""
-
 #: lib/personaltagcloudsection.php:56
 #, php-format
 msgid "Tags in %s's notices"
@@ -6704,16 +4671,6 @@ msgstr "כל המנויים"
 msgid "Subscribers"
 msgstr "מנויים"
 
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "מנויים"
-
-#: lib/profileaction.php:191
-#, fuzzy
-msgid "User ID"
-msgstr "מתשמש"
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "חבר מאז"
@@ -6723,10 +4680,6 @@ msgstr "חבר מאז"
 msgid "Daily average"
 msgstr ""
 
-#: lib/profileaction.php:264
-msgid "All groups"
-msgstr ""
-
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
 msgstr ""
@@ -6743,38 +4696,18 @@ msgstr ""
 msgid "Recent tags"
 msgstr ""
 
-#: lib/publicgroupnav.php:88
-msgid "Featured"
-msgstr ""
-
-#: lib/publicgroupnav.php:92
-#, fuzzy
-msgid "Popular"
-msgstr "אנשים"
-
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "אין מסמך כזה."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "אין הודעה כזו."
+msgstr ""
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "כן"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "אין הודעה כזו."
-
 #: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr "אין משתמש כזה."
+msgstr ""
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
@@ -6784,16 +4717,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr ""
 
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "אין משתמש כזה."
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "חיפוש"
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr ""
@@ -6802,11 +4725,6 @@ msgstr ""
 msgid "Search"
 msgstr "חיפוש"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "חיפוש"
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "אנשים"
@@ -6832,24 +4750,8 @@ msgid "More..."
 msgstr ""
 
 #: lib/silenceform.php:67
-#, fuzzy
 msgid "Silence"
-msgstr "הודעה חדשה"
-
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "אין משתמש כזה."
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "הרשמה מרוחקת"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "הרשמה מרוחקת"
+msgstr ""
 
 #: lib/subgroupnav.php:99
 #, php-format
@@ -6876,9 +4778,8 @@ msgid "People Tagcloud as tagged"
 msgstr ""
 
 #: lib/tagcloudsection.php:56
-#, fuzzy
 msgid "None"
-msgstr "לא"
+msgstr ""
 
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
@@ -6888,13 +4789,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "עדכון התמונה נכשל."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6919,11 +4813,6 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "שגיאה בעדכון פרופיל מרוחק"
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
@@ -6932,51 +4821,18 @@ msgstr ""
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "אין משתמש כזה."
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "אין משתמש כזה."
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-msgid "Unsubscribe from this user"
-msgstr ""
-
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr "בטל מנוי"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "למשתמש אין פרופיל."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "תמונה"
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-msgid "User actions"
-msgstr ""
-
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "הגדרות הפרופיל"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
@@ -6985,20 +4841,10 @@ msgstr ""
 msgid "Send a direct message to this user"
 msgstr ""
 
-#: lib/userprofile.php:288
-#, fuzzy
-msgid "Message"
-msgstr "הודעה חדשה"
-
 #: lib/userprofile.php:326
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "למשתמש אין פרופיל."
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -7010,70 +4856,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "לפני מספר שניות"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "לפני כדקה"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "לפני כ-%d דקות"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "לפני כשעה"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "לפני כ-%d שעות"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "לפני כיום"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "לפני כ-%d ימים"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "לפני כחודש"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "לפני כ-%d חודשים"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "לפני כשנה"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "לאתר הבית יש כתובת לא חוקית."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 860efa66ece1420a41ca98a32f7db95f23b5b12f..4b6a15f7c72a3e32b6f4515d21c8cdd79b5a4300 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:33+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:21+0000\n"
 "Language-Team: Dutch\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: hsb\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +91,7 @@ msgstr "Składować"
 msgid "No such page."
 msgstr "Strona njeeksistuje."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +111,7 @@ msgstr "Strona njeeksistuje."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Wužiwar njeeksistuje"
@@ -266,16 +267,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-msgid "Unable to save your design settings."
-msgstr ""
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:187
 #: actions/apiaccountupdateprofilecolors.php:142
 msgid "Could not update your design."
@@ -341,7 +332,8 @@ msgstr "Status z tym ID njenamakany."
 msgid "This status is already a favorite."
 msgstr "Tutón status je hižo faworit."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Faworit njeda so wutworić."
 
@@ -357,15 +349,6 @@ msgstr "Faworit njeda so zhašeć."
 msgid "Could not follow user: profile not found."
 msgstr "Njebě móžno wužiwarja słědować: profil njenamakany."
 
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:109
-msgid "Could not unfollow user: User not found."
-msgstr ""
-
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
 msgstr "Njemóžeš slědowanje swójskich aktiwitow blokować."
@@ -454,15 +437,19 @@ msgstr "Alias njemóže samsny kaž přimjeno być."
 msgid "Group not found."
 msgstr "Skupina njenamakana."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Sy hižo čłon teje skupiny."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Administratora tuteje skupiny je će zablokował."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Njebě móžno wužiwarja %1$s skupinje %2%s přidać."
@@ -471,7 +458,10 @@ msgstr "Njebě móžno wužiwarja %1$s skupinje %2%s přidać."
 msgid "You are not a member of this group."
 msgstr "Njejsy čłon tuteje skupiny."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Njebě móžno wužiwarja %1$s ze skupiny %2$s wotstronić."
@@ -626,11 +616,13 @@ msgstr "Njemóžeš status druheho wužiwarja zničić."
 msgid "No such notice."
 msgstr "Zdźělenka njeeksistuje."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Njemóžno twoju zdźělenku wospjetować."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Tuta zdźělenka bu hižo wospjetowana."
 
@@ -646,7 +638,7 @@ msgstr "Žadyn status z tym ID namakany."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -656,7 +648,7 @@ msgstr "To je předołho. Maksimalna wulkosć zdźělenki je %d znamješkow."
 msgid "Not found."
 msgstr "Njenamakany."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -665,11 +657,6 @@ msgstr ""
 msgid "Unsupported format."
 msgstr "Njepodpěrany format."
 
-#: actions/apitimelinefavorites.php:110
-#, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr ""
-
 #: actions/apitimelinefavorites.php:119
 #, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
@@ -695,11 +682,6 @@ msgstr ""
 msgid "%s updates from everyone!"
 msgstr "%s aktualizacijow wote wšěch!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, php-format
-msgid "Repeated to %s"
-msgstr ""
-
 #: actions/apitimelineretweetsofme.php:114
 #, php-format
 msgid "Repeats of %s"
@@ -710,15 +692,6 @@ msgstr ""
 msgid "Notices tagged with %s"
 msgstr ""
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr ""
-
-#: actions/apitrends.php:87
-msgid "API method under construction."
-msgstr ""
-
 #: actions/attachment.php:73
 msgid "No such attachment."
 msgstr "Přiwěšk njeeksistuje."
@@ -772,7 +745,7 @@ msgid "Preview"
 msgstr "Přehlad"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Zničić"
 
@@ -782,7 +755,7 @@ msgstr "Nahrać"
 
 #: actions/avatarsettings.php:231 actions/grouplogo.php:289
 msgid "Crop"
-msgstr ""
+msgstr "Přirězać"
 
 #: actions/avatarsettings.php:305
 msgid "No file uploaded."
@@ -858,10 +831,8 @@ msgstr "Haj"
 msgid "Block this user"
 msgstr "Tutoho wužiwarja blokować"
 
-#: actions/block.php:187
-msgid "Failed to save block information."
-msgstr ""
-
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -871,8 +842,8 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Skupina njeeksistuje."
 
@@ -886,10 +857,6 @@ msgstr "%s je profile zablokował"
 msgid "%1$s blocked profiles, page %2$d"
 msgstr "%1$s zablokowa profile, stronu %2$d"
 
-#: actions/blockedfromgroup.php:115
-msgid "A list of the users blocked from joining this group."
-msgstr ""
-
 #: actions/blockedfromgroup.php:288
 msgid "Unblock user from group"
 msgstr "Wužiwarja za skupinu wotblokować"
@@ -1045,7 +1012,7 @@ msgid "Do not delete this notice"
 msgstr "Tutu zdźělenku njewušmórnyć"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Tutu zdźělenku wušmórnyć"
 
@@ -1147,14 +1114,6 @@ msgstr "Zapinjeny"
 msgid "Off"
 msgstr "Wupinjeny"
 
-#: actions/designadminpanel.php:545 lib/designsettings.php:156
-msgid "Turn background image on or off."
-msgstr ""
-
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-msgid "Tile background image"
-msgstr ""
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "Barby změnić"
@@ -1276,14 +1235,6 @@ msgstr "Mjeno organizacije je předołho (maks. 255 znamješkow)."
 msgid "Organization homepage is required."
 msgstr "Startowa strona organizacije je trěbna."
 
-#: actions/editapplication.php:218 actions/newapplication.php:206
-msgid "Callback is too long."
-msgstr ""
-
-#: actions/editapplication.php:225 actions/newapplication.php:215
-msgid "Callback URL is not valid."
-msgstr ""
-
 #: actions/editapplication.php:258
 msgid "Could not update application."
 msgstr "Aplikacija njeda so aktualizować."
@@ -1429,21 +1380,11 @@ msgstr "E-mejlowe nastajenja"
 msgid "Send me notices of new subscriptions through email."
 msgstr ""
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:186
-msgid "Send me email when someone adds my notice as a favorite."
-msgstr ""
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:193
 msgid "Send me email when someone sends me a private message."
 msgstr "E-mejl pósłać, hdyž něchtó priwatnu powěsć sćele."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:199
-msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr ""
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
@@ -1472,7 +1413,7 @@ msgstr "Žana e-mejlowa adresa."
 #. TRANS: Message given saving e-mail address that cannot be normalised.
 #: actions/emailsettings.php:361
 msgid "Cannot normalize that email address"
-msgstr ""
+msgstr "Tuta e-mejlowa adresa njehodźi so normalizować"
 
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
@@ -1496,7 +1437,7 @@ msgstr "Ta e-mejlowa adresa hižo słuša k druhemu wužiwarjej."
 #: actions/emailsettings.php:391 actions/imsettings.php:348
 #: actions/smssettings.php:373
 msgid "Couldn't insert confirmation code."
-msgstr ""
+msgstr "Wobkrućenski kod njehodźi so zasunyć."
 
 #. TRANS: Message given saving valid e-mail address that is to be confirmed.
 #: actions/emailsettings.php:398
@@ -1505,14 +1446,6 @@ msgid ""
 "inbox (and spam box!) for the code and instructions on how to use it."
 msgstr ""
 
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-msgid "No pending confirmation to cancel."
-msgstr ""
-
 #. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
 #: actions/emailsettings.php:424
 msgid "That is the wrong email address."
@@ -1559,10 +1492,6 @@ msgstr "Nowa adresa za dochadźace e-mejle přidata."
 msgid "This notice is already a favorite!"
 msgstr "Tuta zdźělenka je hižo faworit!"
 
-#: actions/favor.php:92 lib/disfavorform.php:140
-msgid "Disfavor favorite"
-msgstr ""
-
 #: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
@@ -1594,17 +1523,6 @@ msgid ""
 "notice to your favorites!"
 msgstr ""
 
-#: actions/favoritesrss.php:111 actions/showfavorites.php:77
-#: lib/personalgroupnav.php:115
-#, php-format
-msgid "%s's favorite notices"
-msgstr ""
-
-#: actions/favoritesrss.php:115
-#, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr ""
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1768,7 +1686,7 @@ msgstr ""
 #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
 #: lib/designsettings.php:391 lib/designsettings.php:413
 msgid "Couldn't update your design."
-msgstr ""
+msgstr "Twój design njeda so aktualizować."
 
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
 msgid "Design preferences saved."
@@ -1941,10 +1859,6 @@ msgstr "IM k dispoziciji njesteji."
 msgid "IM address"
 msgstr "IM-adresa"
 
-#: actions/imsettings.php:113
-msgid "Current confirmed Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Form note in IM settings form.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:124
@@ -1983,11 +1897,6 @@ msgstr ""
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
 msgstr ""
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -1998,11 +1907,6 @@ msgstr "Nastajenja składowane."
 msgid "No Jabber ID."
 msgstr "Žadyn ID Jabber."
 
-#. TRANS: Message given saving IM address that cannot be normalised.
-#: actions/imsettings.php:317
-msgid "Cannot normalize that Jabber ID"
-msgstr ""
-
 #. TRANS: Message given saving IM address that not valid.
 #: actions/imsettings.php:322
 msgid "Not a valid Jabber ID"
@@ -2013,11 +1917,6 @@ msgstr "Njepłaćiwy ID Jabber"
 msgid "That is already your Jabber ID."
 msgstr "To je hižo twój ID Jabber."
 
-#. TRANS: Message given saving IM address that is already set for another user.
-#: actions/imsettings.php:330
-msgid "Jabber ID already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid IM address that is to be confirmed.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:358
@@ -2098,7 +1997,7 @@ msgstr "Sy tutych wužiwarjow hižo abonował:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2193,9 +2092,7 @@ msgstr "Dyrbiš přizjewjeny być, zo by do skupiny zastupił."
 msgid "No nickname or ID."
 msgstr "Žane přimjeno abo žadyn ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s je do %2$s zastupił"
@@ -2204,13 +2101,12 @@ msgstr "%1$s je do %2$s zastupił"
 msgid "You must be logged in to leave a group."
 msgstr "Dyrbiš přizjewjeny być, zo by skupinu wopušćił."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Njejsy čłon teje skupiny."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s je skupinu %2$s wopušćił"
@@ -2321,12 +2217,15 @@ msgstr "Wužij tutón formular, zo by nowu skupinu wutworił."
 msgid "New message"
 msgstr "Nowa powěsć"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Žadyn wobsah!"
 
@@ -2334,7 +2233,8 @@ msgstr "Žadyn wobsah!"
 msgid "No recipient specified."
 msgstr "Žadyn přijimowar podaty."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2343,12 +2243,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Powěsć pósłana"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Direktna powěsć do %s pósłana."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Zmylk Ajax"
 
@@ -2356,7 +2258,7 @@ msgstr "Zmylk Ajax"
 msgid "New notice"
 msgstr "Nowa zdźělenka"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Zdźělenka wotpósłana"
 
@@ -2395,24 +2297,11 @@ msgstr ""
 msgid "Updates with \"%s\""
 msgstr "Aktualizacije z \"%s\""
 
-#: actions/noticesearchrss.php:98
-#, php-format
-msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr ""
-
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
 
-#: actions/nudge.php:94
-msgid "Nudge sent"
-msgstr ""
-
-#: actions/nudge.php:97
-msgid "Nudge sent!"
-msgstr ""
-
 #: actions/oauthappssettings.php:59
 msgid "You must be logged in to list your applications."
 msgstr "Dyrbiš přizjewjeny być, zo by swoje aplikacije nalistował."
@@ -2447,10 +2336,6 @@ msgstr "Njejsy wužiwar tuteje aplikacije."
 msgid "Unable to revoke access for app: %s."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:198
-msgid "You have not authorized any applications to use your account."
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
@@ -2459,11 +2344,6 @@ msgstr ""
 msgid "Notice has no profile."
 msgstr "Zdźělenka nima profil."
 
-#: actions/oembed.php:87 actions/shownotice.php:175
-#, php-format
-msgid "%1$s's status on %2$s"
-msgstr ""
-
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
 #, php-format
@@ -2477,8 +2357,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Njeje podpěrany datowy format."
 
@@ -2504,24 +2384,16 @@ msgstr " (swobodna słužba)"
 
 #: actions/othersettings.php:116
 msgid "Shorten URLs with"
-msgstr ""
+msgstr "URL skrótšić z"
 
 #: actions/othersettings.php:117
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-msgid "View profile designs"
-msgstr ""
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr ""
-
 #: actions/otp.php:69
 msgid "No user ID specified."
 msgstr "Žadyn wužiwarski ID podaty."
@@ -2530,10 +2402,6 @@ msgstr "Žadyn wužiwarski ID podaty."
 msgid "No login token specified."
 msgstr "Žane přizjewjenske znamješko podate."
 
-#: actions/otp.php:90
-msgid "No login token requested."
-msgstr ""
-
 #: actions/otp.php:95
 msgid "Invalid login token specified."
 msgstr "Njepłaćiwe přizjewjenske znamješko podate."
@@ -2552,10 +2420,6 @@ msgstr "Wuchadny póst za %1$s - strona %2$d"
 msgid "Outbox for %s"
 msgstr "Wuchadny póst za %s"
 
-#: actions/outbox.php:116
-msgid "This is your outbox, which lists private messages you have sent."
-msgstr ""
-
 #: actions/passwordsettings.php:58
 msgid "Change password"
 msgstr "Hesło změnić"
@@ -2641,11 +2505,6 @@ msgstr "Do awataroweho zapisa njeda so pisać: %s."
 msgid "Background directory not writable: %s."
 msgstr "Do pozadkoweho zapisa njeda so pisać: %s."
 
-#: actions/pathsadminpanel.php:177
-#, php-format
-msgid "Locales directory not readable: %s."
-msgstr ""
-
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
@@ -2815,10 +2674,6 @@ msgstr ""
 msgid "Profile information"
 msgstr "Profilowe informacije"
 
-#: actions/profilesettings.php:108 lib/groupeditform.php:154
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
-msgstr ""
-
 #: actions/profilesettings.php:111 actions/register.php:455
 #: actions/showgroup.php:256 actions/tagother.php:104
 #: lib/groupeditform.php:157 lib/userprofile.php:150
@@ -2908,15 +2763,6 @@ msgstr "Časowe pasmo njeje wubrane."
 msgid "Language is too long (max 50 chars)."
 msgstr "Mjeno rěče je předołhe (maks. 50 znamješkow)."
 
-#: actions/profilesettings.php:253 actions/tagother.php:178
-#, php-format
-msgid "Invalid tag: \"%s\""
-msgstr ""
-
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
 #: actions/profilesettings.php:363
 msgid "Couldn't save location prefs."
 msgstr "Nastajenja městna njedachu so składować."
@@ -2925,10 +2771,6 @@ msgstr "Nastajenja městna njedachu so składować."
 msgid "Couldn't save profile."
 msgstr "Profil njeda so składować."
 
-#: actions/profilesettings.php:383
-msgid "Couldn't save tags."
-msgstr ""
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -2939,15 +2781,6 @@ msgstr "Nastajenja składowane."
 msgid "Beyond the page limit (%s)."
 msgstr "Limit stronow (%s) překročeny."
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
-#: actions/public.php:130
-#, php-format
-msgid "Public timeline, page %d"
-msgstr ""
-
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
 msgstr ""
@@ -3023,22 +2856,10 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:134
-msgid "Tag cloud"
-msgstr ""
-
 #: actions/recoverpassword.php:36
 msgid "You are already logged in!"
 msgstr "Sy hižo přizjewjeny!"
 
-#: actions/recoverpassword.php:62
-msgid "No such recovery code."
-msgstr ""
-
-#: actions/recoverpassword.php:66
-msgid "Not a recovery code."
-msgstr ""
-
 #: actions/recoverpassword.php:73
 msgid "Recovery code for unknown user."
 msgstr ""
@@ -3051,10 +2872,6 @@ msgstr "Zmylk z wobkrućenskim kodom."
 msgid "This confirmation code is too old. Please start again."
 msgstr "Tutón wobkrućenski kod je přestary. Prošu započń hišće raz."
 
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
 #: actions/recoverpassword.php:152
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
@@ -3129,10 +2946,6 @@ msgid ""
 "address registered to your account."
 msgstr ""
 
-#: actions/recoverpassword.php:357
-msgid "Unexpected password reset."
-msgstr ""
-
 #: actions/recoverpassword.php:365
 msgid "Password must be 6 chars or more."
 msgstr "Hesło dyrbi 6 znamješkow abo wjace měć."
@@ -3320,10 +3133,6 @@ msgstr "To je lokalny profil! Přizjew so, zo by abonował."
 msgid "Couldn’t get a request token."
 msgstr ""
 
-#: actions/repeat.php:57
-msgid "Only logged-in users can repeat notices."
-msgstr ""
-
 #: actions/repeat.php:64 actions/repeat.php:71
 msgid "No notice specified."
 msgstr "Žana zdźělenka podata."
@@ -3336,7 +3145,7 @@ msgstr "Njemóžeš swójsku zdźělenku wospjetować."
 msgid "You already repeated that notice."
 msgstr "Sy tutu zdźělenku hižo wospjetował."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Wospjetowany"
 
@@ -3344,32 +3153,6 @@ msgstr "Wospjetowany"
 msgid "Repeated!"
 msgstr "Wospjetowany!"
 
-#: actions/replies.php:126 actions/repliesrss.php:68
-#: lib/personalgroupnav.php:105
-#, php-format
-msgid "Replies to %s"
-msgstr ""
-
-#: actions/replies.php:128
-#, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr ""
-
-#: actions/replies.php:145
-#, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/replies.php:152
-#, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr ""
-
-#: actions/replies.php:159
-#, php-format
-msgid "Replies feed for %s (Atom)"
-msgstr ""
-
 #: actions/replies.php:199
 #, php-format
 msgid ""
@@ -3391,11 +3174,6 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr ""
-
 #: actions/revokerole.php:75
 msgid "You cannot revoke user roles on this site."
 msgstr "Njemóžeš wužiwarske róle na tutym sydle wotwołać."
@@ -3408,14 +3186,6 @@ msgstr "Wužiwar nima tutu rólu."
 msgid "StatusNet"
 msgstr "StatusNet"
 
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-msgid "You cannot sandbox users on this site."
-msgstr ""
-
-#: actions/sandbox.php:72
-msgid "User is already sandboxed."
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
@@ -3534,25 +3304,6 @@ msgstr "Chceš woprawdźe swój přetrjebowarski kluč a potajny kod wróćo sta
 msgid "%1$s's favorite notices, page %2$d"
 msgstr "Preferowane zdźělenki wot %1$s, strona %2$d"
 
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
-msgstr ""
-
-#: actions/showfavorites.php:171
-#, php-format
-msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr ""
-
-#: actions/showfavorites.php:178
-#, php-format
-msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr ""
-
-#: actions/showfavorites.php:185
-#, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr ""
-
 #: actions/showfavorites.php:206
 msgid ""
 "You haven't chosen any favorite notices yet. Click the fave button on "
@@ -3597,11 +3348,6 @@ msgstr "Skupinski profil"
 msgid "URL"
 msgstr "URL"
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-msgid "Note"
-msgstr ""
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr "Aliasy"
@@ -3610,26 +3356,6 @@ msgstr "Aliasy"
 msgid "Group actions"
 msgstr "Skupinske akcije"
 
-#: actions/showgroup.php:338
-#, php-format
-msgid "Notice feed for %s group (RSS 1.0)"
-msgstr ""
-
-#: actions/showgroup.php:344
-#, php-format
-msgid "Notice feed for %s group (RSS 2.0)"
-msgstr ""
-
-#: actions/showgroup.php:350
-#, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr ""
-
-#: actions/showgroup.php:355
-#, php-format
-msgid "FOAF for %s group"
-msgstr ""
-
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
 msgstr "Čłonojo"
@@ -3675,10 +3401,6 @@ msgstr "Administratorojo"
 msgid "No such message."
 msgstr "Powěsć njeeksistuje."
 
-#: actions/showmessage.php:98
-msgid "Only the sender and recipient may read this message."
-msgstr ""
-
 #: actions/showmessage.php:108
 #, php-format
 msgid "Message to %1$s on %2$s"
@@ -3708,21 +3430,6 @@ msgstr "%1$s, strona %2$d"
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
 msgstr "Powěsćowy kanal za %1$s je %2$s (RSS 1.0) markěrował"
 
-#: actions/showstream.php:129
-#, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/showstream.php:136
-#, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr ""
-
-#: actions/showstream.php:143
-#, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr ""
-
 #: actions/showstream.php:148
 #, php-format
 msgid "FOAF for %s"
@@ -3763,19 +3470,6 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, php-format
-msgid "Repeat of %s"
-msgstr ""
-
-#: actions/silence.php:65 actions/unsilence.php:65
-msgid "You cannot silence users on this site."
-msgstr ""
-
-#: actions/silence.php:72
-msgid "User is already silenced."
-msgstr ""
-
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
 msgstr "Zakładne nastajenja za tute sydło StatusNet."
@@ -3829,10 +3523,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-msgid "Contact email address for your site"
-msgstr ""
-
 #: actions/siteadminpanel.php:245
 msgid "Local"
 msgstr "Lokalny"
@@ -3865,10 +3555,6 @@ msgstr "Tekstowy limit"
 msgid "Maximum number of characters for notices."
 msgstr "Maksimalna ličba znamješkow za zdźělenki."
 
-#: actions/siteadminpanel.php:278
-msgid "Dupe limit"
-msgstr ""
-
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
@@ -3923,16 +3609,6 @@ msgstr "SMS k dispoziciji njesteji."
 msgid "SMS address"
 msgstr "SMS-adresa"
 
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-msgid "Current confirmed SMS-enabled phone number."
-msgstr ""
-
-#. TRANS: Form guide in IM settings form.
-#: actions/smssettings.php:133
-msgid "Awaiting confirmation on this phone number."
-msgstr ""
-
 #. TRANS: Field label for SMS address input in SMS settings form.
 #: actions/smssettings.php:142
 msgid "Confirmation code"
@@ -3981,11 +3657,6 @@ msgstr "SMS-nastajenja składowane."
 msgid "No phone number."
 msgstr "Žane telefonowe čisło."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
 #. TRANS: Message given saving SMS phone number that is already set.
 #: actions/smssettings.php:352
 msgid "That is already your phone number."
@@ -4058,18 +3729,10 @@ msgstr ""
 msgid "Manage snapshot configuration"
 msgstr "Konfiguraciju wobrazowkoweho fota zrjadować"
 
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-msgid "Invalid snapshot report URL."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4078,10 +3741,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-msgid "Data snapshots"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4094,10 +3753,6 @@ msgstr "Frekwenca"
 msgid "Snapshots will be sent once every N web hits"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:226
-msgid "Report URL"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:227
 msgid "Snapshots will be sent to this URL"
 msgstr ""
@@ -4161,13 +3816,6 @@ msgstr ""
 msgid "%s has no subscribers. Want to be the first?"
 msgstr "%s abonentow nima. Chceš prěni być?"
 
-#: actions/subscribers.php:114
-#, php-format
-msgid ""
-"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
-"%) and be the first?"
-msgstr ""
-
 #: actions/subscriptions.php:52
 #, php-format
 msgid "%s subscriptions"
@@ -4197,11 +3845,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, php-format
-msgid "%s is not listening to anyone."
-msgstr ""
-
 #: actions/subscriptions.php:208
 msgid "Jabber"
 msgstr "Jabber"
@@ -4210,26 +3853,6 @@ msgstr "Jabber"
 msgid "SMS"
 msgstr "SMS"
 
-#: actions/tag.php:69
-#, php-format
-msgid "Notices tagged with %1$s, page %2$d"
-msgstr ""
-
-#: actions/tag.php:87
-#, php-format
-msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr ""
-
-#: actions/tag.php:93
-#, php-format
-msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr ""
-
-#: actions/tag.php:99
-#, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr ""
-
 #: actions/tagother.php:39
 msgid "No ID argument."
 msgstr "Žadyn argument ID."
@@ -4263,30 +3886,10 @@ msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
 msgstr ""
 
-#: actions/tagother.php:200
-msgid "Could not save tags."
-msgstr ""
-
-#: actions/tagother.php:236
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr ""
-
-#: actions/tagrss.php:35
-msgid "No such tag."
-msgstr ""
-
 #: actions/unblock.php:59
 msgid "You haven't blocked that user."
 msgstr "Njejsy toho wužiwarja zablokował."
 
-#: actions/unsandbox.php:72
-msgid "User is not sandboxed."
-msgstr ""
-
-#: actions/unsilence.php:72
-msgid "User is not silenced."
-msgstr ""
-
 #: actions/unsubscribe.php:77
 msgid "No profile ID in request."
 msgstr "Žadyn profilowy ID w naprašowanju."
@@ -4330,10 +3933,6 @@ msgstr "Njepłaćiwy standardny abonement: '%1$s' wužiwar njeje."
 msgid "Profile"
 msgstr "Profil"
 
-#: actions/useradminpanel.php:222
-msgid "Bio Limit"
-msgstr ""
-
 #: actions/useradminpanel.php:223
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
@@ -4354,10 +3953,6 @@ msgstr "Powitanski tekst za nowych wužiwarjow (maks. 255 znamješkow)."
 msgid "Default subscription"
 msgstr "Standardny abonement"
 
-#: actions/useradminpanel.php:242
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-
 #: actions/useradminpanel.php:251
 msgid "Invitations"
 msgstr "Přeprošenja"
@@ -4428,45 +4023,21 @@ msgid ""
 "subscription."
 msgstr ""
 
-#: actions/userauthorization.php:303
-#, php-format
-msgid "Listener URI ‘%s’ not found here."
-msgstr ""
-
-#: actions/userauthorization.php:308
-#, php-format
-msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
-
 #: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
 msgstr ""
 
-#: actions/userauthorization.php:329
-#, php-format
-msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
-
 #: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
 msgstr "URL awatara '%s' njeje płaćiwy"
 
-#: actions/userauthorization.php:350
-#, php-format
-msgid "Can’t read avatar URL ‘%s’."
-msgstr ""
-
 #: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
 msgstr "Wopačny wobrazowy typ za awatarowy URL '%s'."
 
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-msgid "Profile design"
-msgstr ""
-
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
 "Customize the way your profile looks with a background image and a colour "
@@ -4631,21 +4202,11 @@ msgstr "Njeje móžno było, přizjewjenske znamješko za %s wutworić"
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-msgid "You are banned from sending direct messages."
-msgstr ""
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
 msgstr "Powěsć njeda so zasunyć."
 
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4654,61 +4215,40 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Zmylk datoweje banki při zasunjenju hašeje taflički: %s"
 
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-msgid "Problem saving notice. Too long."
-msgstr ""
-
-#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-msgid "Problem saving notice. Unknown user."
-msgstr ""
-
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-msgid "You are banned from posting notices on this site."
-msgstr ""
-
-#. TRANS: Server exception thrown when a notice cannot be saved.
-#. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
-msgid "Problem saving notice."
-msgstr ""
-
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
-msgstr ""
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -4734,11 +4274,6 @@ msgstr "Falowacy profil."
 msgid "Unable to save tag."
 msgstr "Njeje móžno, tafličku składować."
 
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-msgid "You have been banned from subscribing."
-msgstr ""
-
 #. TRANS: Exception thrown when trying to subscribe while already subscribed.
 #: classes/Subscription.php:80
 msgid "Already subscribed!"
@@ -4816,11 +4351,6 @@ msgstr "Twoje hesło změnić"
 msgid "Change email handling"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-msgid "Design your profile"
-msgstr ""
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -4842,11 +4372,6 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr "Strona bjez titula"
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-msgid "Primary site navigation"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -4958,27 +4483,6 @@ msgctxt "MENU"
 msgid "Search"
 msgstr "Pytać"
 
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-msgid "Site notice"
-msgstr ""
-
-#. TRANS: DT element for local views block. String is hidden in default CSS.
-#: lib/action.php:592
-msgid "Local views"
-msgstr ""
-
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-msgid "Page notice"
-msgstr ""
-
-#. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
-#: lib/action.php:762
-msgid "Secondary site navigation"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
 msgid "Help"
@@ -5046,11 +4550,6 @@ msgid ""
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-msgid "Site content license"
-msgstr ""
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5076,11 +4575,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5130,12 +4624,6 @@ msgstr "showForm() njeimplementowany."
 msgid "saveSettings() not implemented."
 msgstr "saveSettings() njeimplementowany."
 
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-msgid "Unable to delete design setting."
-msgstr ""
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
 msgid "Basic site configuration"
@@ -5147,11 +4635,6 @@ msgctxt "MENU"
 msgid "Site"
 msgstr "Sydło"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-msgid "Design configuration"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
 msgctxt "MENU"
@@ -5173,11 +4656,6 @@ msgstr "Wužiwar"
 msgid "Access configuration"
 msgstr "Přistupna konfiguracija"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-msgid "Paths configuration"
-msgstr ""
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:390
 msgid "Sessions configuration"
@@ -5219,11 +4697,6 @@ msgstr "Wopisaj swoju aplikaciju z %d znamješkami"
 msgid "Describe your application"
 msgstr "Wopisaj swoju aplikaciju"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-msgid "URL of the homepage of this application"
-msgstr ""
-
 #. TRANS: Form input field label.
 #: lib/applicationeditform.php:226
 msgid "Source URL"
@@ -5320,10 +4793,6 @@ msgstr "Poskićowar"
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
 msgid "Password changing failed"
 msgstr "Změnjenje hesła je so njeporadźiło"
@@ -5338,50 +4807,34 @@ msgstr "Přikazowe wuslědki"
 
 #: lib/channel.php:229 lib/mailhandler.php:142
 msgid "Command complete"
-msgstr ""
+msgstr "Přikaz wuwjedźeny"
 
 #: lib/channel.php:240
 msgid "Command failed"
 msgstr "Přikaz je so njeporadźił"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Zdźělenka z tym ID njeeksistuje"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Wužiwar nima poslednju powěsć"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Wužiwar z přimjenom %s njeda so namakać"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Lokalny wužiwar z přimjenom %s njeda so namakać"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Tutón přikaz hišće njeje implementowany."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
+#: lib/command.php:240
 #, php-format
-msgid "Nudge sent to %s"
+msgid "Nudge sent to %s."
 msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5389,55 +4842,34 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
-msgid "Notice marked as fave."
-msgstr ""
-
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Sy hižo čłon teje skupiny"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Njebě móžno wužiwarja %1$s skupinje %2%s přidać."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Njebě móžno, wužiwarja %1$s ze skupiny %2$s wotstronić"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Dospołne mjeno: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Městno: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Startowa strona: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Wo: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5446,117 +4878,75 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
-"Powěsć předołho - maksimalna wulkosć je %1$d znamješkow, ty sy %2$d pósłał"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Direktna powěsć do %s pósłana"
+"Powěsć je předołho - maksimalna wulkosć je %1$d znamješkow, ty sy %2$d "
+"pósłał."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Zmylk při słanju direktneje powěsće,"
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Njemóžeš swójsku powěsć wospjetować"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Tuta zdźělenka bu hižo wospjetowana"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Zdźělenka wot %s wospjetowana"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Zmylk při wospjetowanju zdźělenki"
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Wotmołwa na %s pósłana"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
-msgstr ""
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Podaj mjeno wužiwarja, kotrehož chceš abonować"
+msgstr "Zmylk při składowanju powěsće"
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "OMB-profile njedadźa so přez přikaz abonować."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "%s abonowany"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Podaj mjeno wužiwarja, kotrehož chceš wotskazać"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "%s wotskazany"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Přikaz hišće njeimplementowany."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
-msgstr ""
+msgstr "Zdźělenje znjemóžnjene."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
-msgstr ""
+msgstr "Zdźělenje njeda so znjemóžnić."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
-msgstr ""
+msgstr "Zdźělenje zmóžnjene."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
-msgstr ""
+msgstr "Zdźělenje njeda so zmóžnić."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Přizjewjenski přikaz je znjemóžnjeny"
-
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "%s wotskazany"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Njejsy nikoho abonował."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Sy tutu wosobu abonował:"
@@ -5564,11 +4954,16 @@ msgstr[1] "Sy tutej wosobje abonował:"
 msgstr[2] "Sy tute wosoby abonował:"
 msgstr[3] "Sy tute wosoby abonował:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Nichtó njeje će abonował."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Tuta wosoba je će abonowała:"
@@ -5576,11 +4971,16 @@ msgstr[1] "Tutej wosobje stej će abonowałoj:"
 msgstr[2] "Tute wosoby su će abonowali:"
 msgstr[3] "Tute wosoby su će abonowali:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Njejsy čłon w žanej skupinje."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Sy čłon tuteje skupiny:"
@@ -5588,7 +4988,7 @@ msgstr[1] "Sy čłon tuteju skupinow:"
 msgstr[2] "Sy čłon tutych skupinow:"
 msgstr[3] "Sy čłon tutych skupinow:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5681,22 +5081,6 @@ msgstr ""
 "Móžeš swój wosobinski pozadkowy wobraz nahrać. Maksimalna datajowa wulkosć "
 "je 2 MB."
 
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-msgid "Disfavor this notice"
-msgstr ""
-
-#: lib/favorform.php:114 lib/favorform.php:140
-msgid "Favor this notice"
-msgstr ""
-
-#: lib/favorform.php:140
-msgid "Favor"
-msgstr ""
-
 #: lib/feed.php:85
 msgid "RSS 1.0"
 msgstr "RSS 1.0"
@@ -5746,10 +5130,6 @@ msgstr "Start"
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-msgid "URL of the homepage or blog of the group or topic"
-msgstr ""
-
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
 msgstr "Skupinu abo temu wopisać"
@@ -5779,11 +5159,6 @@ msgstr "Skupina"
 msgid "Blocked"
 msgstr "Blokowany"
 
-#: lib/groupnav.php:102
-#, php-format
-msgid "%s blocked users"
-msgstr ""
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -5811,11 +5186,6 @@ msgstr "Skupiny z najwjace čłonami"
 msgid "Groups with most posts"
 msgstr "Skupiny z njawjace powěsćemi"
 
-#: lib/grouptagcloudsection.php:56
-#, php-format
-msgid "Tags in %s group's notices"
-msgstr ""
-
 #. TRANS: Client exception 406
 #: lib/htmloutputter.php:104
 msgid "This page is not available in a media type you accept"
@@ -5944,12 +5314,6 @@ msgstr ""
 msgid "Bio: %s"
 msgstr "Biografija: %s"
 
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, php-format
-msgid "New email address for posting to %s"
-msgstr ""
-
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
 #, php-format
@@ -6070,11 +5434,6 @@ msgstr ""
 "\n"
 "%s"
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6113,7 +5472,7 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "wot"
 
@@ -6200,11 +5559,11 @@ msgstr "Direktnu zdźělenku pósłać"
 msgid "To"
 msgstr "Komu"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "K dispoziciji stejace znamješka"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Pósłać"
@@ -6213,28 +5572,28 @@ msgstr "Pósłać"
 msgid "Send a notice"
 msgstr "Zdźělenku pósłać"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Što je, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Připowěsnyć"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Dataju připowěsnyć"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Městno dźělić"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Njedźěl moje městno"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6267,40 +5626,36 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 
 #: lib/noticelist.php:453
 msgid "at"
+msgstr "w"
+
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "w konteksće"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Wospjetowany wot"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Na tutu zdźělenku wotmołwić"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Wotmołwić"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Zdźělenka wospjetowana"
 
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
-
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "Zmylk při zasunjenju noweho profila"
@@ -6353,11 +5708,6 @@ msgstr "Wuchadny póst"
 msgid "Your sent messages"
 msgstr "Twoje pósłane powěsće"
 
-#: lib/personaltagcloudsection.php:56
-#, php-format
-msgid "Tags in %s's notices"
-msgstr ""
-
 #: lib/plugin.php:115
 msgid "Unknown"
 msgstr "Njeznaty"
@@ -6411,10 +5761,6 @@ msgstr "Wužiwarske skupiny"
 msgid "Recent tags"
 msgstr ""
 
-#: lib/publicgroupnav.php:88
-msgid "Featured"
-msgstr ""
-
 #: lib/publicgroupnav.php:92
 msgid "Popular"
 msgstr "Woblubowany"
@@ -6444,14 +5790,6 @@ msgstr "Rólu \"%s\" tutoho wužiwarja wotwołać"
 msgid "No single user defined for single-user mode."
 msgstr "Žadyn jednotliwy wužiwar za modus jednotliweho wužiwarja definowany."
 
-#: lib/sandboxform.php:67
-msgid "Sandbox"
-msgstr ""
-
-#: lib/sandboxform.php:78
-msgid "Sandbox this user"
-msgstr ""
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr "Pytanske sydło"
@@ -6492,14 +5830,6 @@ msgstr "Wotrězk bjez titula"
 msgid "More..."
 msgstr "Wjace..."
 
-#: lib/silenceform.php:67
-msgid "Silence"
-msgstr ""
-
-#: lib/silenceform.php:78
-msgid "Silence this user"
-msgstr ""
-
 #: lib/subgroupnav.php:83
 #, php-format
 msgid "People %s subscribes to"
@@ -6519,11 +5849,6 @@ msgstr "Skupiny, w kotrychž %s je čłon"
 msgid "Invite"
 msgstr "Přeprosyć"
 
-#: lib/subgroupnav.php:106
-#, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -6588,18 +5913,10 @@ msgstr ""
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-msgid "Unsandbox this user"
-msgstr ""
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-msgid "Unsilence this user"
-msgstr ""
-
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr "Tutoho wužiwarja wotskazać"
@@ -6608,11 +5925,6 @@ msgstr "Tutoho wužiwarja wotskazać"
 msgid "Unsubscribe"
 msgstr "Wotskazać"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Wužiwar %s (%d) nima profil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Awatar wobdźěłać"
@@ -6660,56 +5972,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "před něšto sekundami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "před něhdźe jednej mjeńšinu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "před %d mjeńšinami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "před něhdźe jednej hodźinu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "před něhdźe %d hodźinami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "před něhdźe jednym dnjom"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "před něhdźe %d dnjemi"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "před něhdźe jednym měsacom"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "před něhdźe %d měsacami"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "před něhdźe jednym lětom"
 
@@ -6724,10 +6036,3 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
 "%s płaćiwa barba njeje! Wužij 3 heksadecimalne znamješka abo 6 "
 "heksadecimalnych znamješkow."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Powěsć je předołho - maksimalna wulkosć je %1$d znamješkow, ty sy %2$d "
-"pósłał."
index ccde993d4a0e13b604332813dcd22ee9daee8eef..877d1c1b22f87f269405638243d547fda0235b28 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:12:24+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:30+0000\n"
 "Language-Team: Interlingua\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ia\n"
 "X-Message-Group: out-statusnet\n"
@@ -88,6 +88,7 @@ msgstr "Salveguardar"
 msgid "No such page."
 msgstr "Pagina non existe."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -107,7 +108,7 @@ msgstr "Pagina non existe."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Usator non existe."
@@ -348,7 +349,8 @@ msgstr "Nulle stato trovate con iste ID."
 msgid "This status is already a favorite."
 msgstr "Iste stato es ja favorite."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Non poteva crear le favorite."
 
@@ -460,15 +462,19 @@ msgstr "Le alias non pote esser identic al pseudonymo."
 msgid "Group not found."
 msgstr "Gruppo non trovate."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Tu es ja membro de iste gruppo."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Le administrator te ha blocate de iste gruppo."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
@@ -477,7 +483,10 @@ msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
 msgid "You are not a member of this group."
 msgstr "Tu non es membro de iste gruppo."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Non poteva remover le usator %1$s del gruppo %2$s."
@@ -640,11 +649,13 @@ msgstr "Tu non pote deler le stato de un altere usator."
 msgid "No such notice."
 msgstr "Nota non trovate."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Non pote repeter tu proprie nota."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Iste nota ha ja essite repetite."
 
@@ -660,7 +671,7 @@ msgstr "Nulle stato trovate con iste ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Le cliente debe fornir un parametro 'status' con un valor."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -671,7 +682,7 @@ msgstr ""
 msgid "Not found."
 msgstr "Non trovate."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -883,6 +894,8 @@ msgstr "Blocar iste usator"
 msgid "Failed to save block information."
 msgstr "Falleva de salveguardar le information del blocada."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -892,8 +905,8 @@ msgstr "Falleva de salveguardar le information del blocada."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Gruppo non existe."
 
@@ -2164,7 +2177,7 @@ msgstr "Tu es a subscribite a iste usatores:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2288,9 +2301,7 @@ msgstr "Tu debe aperir un session pro facer te membro de un gruppo."
 msgid "No nickname or ID."
 msgstr "Nulle pseudonymo o ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s es ora membro del gruppo %2$s"
@@ -2299,13 +2310,12 @@ msgstr "%1$s es ora membro del gruppo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Tu debe aperir un session pro quitar un gruppo."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Tu non es membro de iste gruppo."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s quitava le gruppo %2$s"
@@ -2419,12 +2429,15 @@ msgstr "Usa iste formulario pro crear un nove gruppo."
 msgid "New message"
 msgstr "Nove message"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Tu non pote inviar un message a iste usator."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Nulle contento!"
 
@@ -2432,7 +2445,8 @@ msgstr "Nulle contento!"
 msgid "No recipient specified."
 msgstr "Nulle destinatario specificate."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2443,12 +2457,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Message inviate"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Message directe a %s inviate."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Error de Ajax"
 
@@ -2456,7 +2472,7 @@ msgstr "Error de Ajax"
 msgid "New notice"
 msgstr "Nove nota"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Nota publicate"
 
@@ -2588,8 +2604,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Solmente le URLs %s es permittite super HTTP simple."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Formato de datos non supportate."
 
@@ -4909,23 +4925,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Nulle profilo (%1$d) trovate pro le nota (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Error in base de datos durante insertion del marca (hashtag): %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problema salveguardar nota. Troppo longe."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problema salveguardar nota. Usator incognite."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4933,7 +4949,7 @@ msgstr ""
 "alcun minutas."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4942,29 +4958,29 @@ msgstr ""
 "novo post alcun minutas."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Il te es prohibite publicar notas in iste sito."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problema salveguardar nota."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Mal typo fornite a saveKnownGroups"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problema salveguardar le cassa de entrata del gruppo."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5617,44 +5633,21 @@ msgstr "Commando complete"
 msgid "Command failed"
 msgstr "Commando fallite"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Non existe un nota con iste ID"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Usator non ha ultime nota"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Non poteva trovar un usator con pseudonymo %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Non poteva trovar un usator local con pseudonymo %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Pardono, iste commando non es ancora implementate."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Non ha multe senso pulsar te mesme!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Pulsata inviate a %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5665,55 +5658,39 @@ msgstr ""
 "Subscriptores: %2$s\n"
 "Notas: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Nota marcate como favorite."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Tu es ja membro de iste gruppo"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Non poteva inscriber le usator %1$s in le gruppo %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Non poteva remover le usator %1$s del gruppo %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nomine complete: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Loco: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Pagina personal: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "A proposito: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5724,144 +5701,102 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Message directe a %s inviate"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Error durante le invio del message directe."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Non pote repeter tu proprie nota"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Iste nota ha ja essite repetite"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Nota de %s repetite"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Error durante le repetition del nota."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Nota troppo longe - maximo es %d characteres, tu inviava %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Responsa a %s inviate"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Errur durante le salveguarda del nota."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Specifica le nomine del usator al qual subscriber te"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Impossibile subscriber se a profilos OMB per medio de un commando."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Subscribite a %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Specifica le nomine del usator al qual cancellar le subscription"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Subscription a %s cancellate"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Commando non ancora implementate."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notification disactivate."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Non pote disactivar notification."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notification activate."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Non pote activar notification."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Le commando de apertura de session es disactivate"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Iste ligamine pote esser usate solmente un vice, e es valide durante "
-"solmente 2 minutas: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Subscription de %s cancellate"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Tu non es subscribite a alcuno."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Tu es subscribite a iste persona:"
 msgstr[1] "Tu es subscribite a iste personas:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Necuno es subscribite a te."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Iste persona es subscribite a te:"
 msgstr[1] "Iste personas es subscribite a te:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Tu non es membro de alcun gruppo."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Tu es membro de iste gruppo:"
 msgstr[1] "Tu es membro de iste gruppos:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6524,7 +6459,7 @@ msgstr ""
 
 #: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr "de"
+msgstr "via"
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6611,11 +6546,11 @@ msgstr "Inviar un nota directe"
 msgid "To"
 msgstr "A"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Characteres disponibile"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Inviar"
@@ -6624,28 +6559,28 @@ msgstr "Inviar"
 msgid "Send a notice"
 msgstr "Inviar un nota"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Como sta, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Annexar"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Annexar un file"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Divulgar mi loco"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Non divulgar mi loco"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6680,7 +6615,11 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 
 #: lib/noticelist.php:453
 msgid "at"
-msgstr "a"
+msgstr "in"
+
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
 
 #: lib/noticelist.php:568
 msgid "in context"
@@ -7028,11 +6967,6 @@ msgstr "Cancellar subscription a iste usator"
 msgid "Unsubscribe"
 msgstr "Cancellar subscription"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Le usator %s (%d) non ha un profilo."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Modificar avatar"
@@ -7080,56 +7014,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "alcun secundas retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "circa un minuta retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "circa %d minutas retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "circa un hora retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "circa %d horas retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "circa un die retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "circa %d dies retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "circa un mense retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "circa %d menses retro"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "circa un anno retro"
 
@@ -7142,8 +7076,3 @@ msgstr "%s non es un color valide!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s non es un color valide! Usa 3 o 6 characteres hexadecimal."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d."
index 701d0f1d4581bf677749b64c20a0e299c59658b6..1efb2192fea0f08d0d5658fb806a5539d35df469 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:37+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:32+0000\n"
 "Language-Team: Icelandic\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: is\n"
 "X-Message-Group: out-statusnet\n"
@@ -21,48 +21,16 @@ msgstr ""
 "= 31 && n % 100 != 41 && n % 100 != 51 && n % 100 != 61 && n % 100 != 71 && "
 "n % 100 != 81 && n % 100 != 91);\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "Samþykkja"
-
-#. TRANS: Page notice
-#: actions/accessadminpanel.php:67
-#, fuzzy
-msgid "Site access settings"
-msgstr "Stillingar fyrir mynd"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "Nýskrá"
-
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "Friðhelgi"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
 msgstr ""
 
-#. TRANS: Checkbox label for configuring site as invite only.
-#: actions/accessadminpanel.php:176
-#, fuzzy
-msgid "Invite only"
-msgstr "Bjóða"
-
 #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
 #: actions/accessadminpanel.php:183
 msgid "Disable new registrations."
@@ -73,31 +41,7 @@ msgstr ""
 msgid "Closed"
 msgstr ""
 
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Stillingar fyrir mynd"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Vista"
-
-#. TRANS: Server error when page not found (404)
-#: actions/all.php:68 actions/public.php:98 actions/replies.php:93
-#: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
-msgid "No such page."
-msgstr "Ekkert þannig merki."
-
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -117,16 +61,16 @@ msgstr "Ekkert þannig merki."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Enginn svoleiðis notandi."
 
 #. TRANS: Page title. %1$s is user nickname, %2$d is page number
 #: actions/all.php:90
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s and friends, page %2$d"
-msgstr "%s og vinirnir, síða %d"
+msgstr "%s og vinirnir"
 
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
@@ -150,12 +94,6 @@ msgstr ""
 msgid "Feed for friends of %s (RSS 2.0)"
 msgstr ""
 
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr ""
-
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
 #, php-format
@@ -185,11 +123,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-msgid "You and friends"
-msgstr ""
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -198,32 +131,6 @@ msgstr ""
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr "Færslur frá %1$s og vinum á %2$s!"
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Aðferð í forritsskilum fannst ekki!"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -244,11 +151,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Gat ekki uppfært notanda."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -259,11 +161,6 @@ msgstr "Gat ekki uppfært notanda."
 msgid "User has no profile."
 msgstr "Notandi hefur enga persónulega síðu."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Gat ekki vistað persónulega síðu."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -276,27 +173,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-msgid "Unable to save your design settings."
-msgstr ""
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Gat ekki uppfært hóp."
-
-#: actions/apiblockcreate.php:105
-#, fuzzy
-msgid "You cannot block yourself!"
-msgstr "Gat ekki uppfært notanda."
-
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
 msgstr "Mistókst að loka á notanda."
@@ -305,11 +181,6 @@ msgstr "Mistókst að loka á notanda."
 msgid "Unblock user failed."
 msgstr "Mistókst að opna fyrir notanda."
 
-#: actions/apidirectmessage.php:89
-#, fuzzy, php-format
-msgid "Direct messages from %s"
-msgstr "Bein skilaboð til %s"
-
 #: actions/apidirectmessage.php:93
 #, php-format
 msgid "All the direct messages sent from %s"
@@ -330,9 +201,9 @@ msgid "No message text!"
 msgstr "Enginn texti í skilaboðum!"
 
 #: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max message size is %d chars."
-msgstr "Þetta er of langt. Hámarkslengd skilaboða er 140 tákn."
+msgstr "Þetta er of langt. Hámarkslengd babls er %d tákn."
 
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
@@ -347,28 +218,19 @@ msgstr "Gat ekki sent bein skilaboð til notenda sem eru ekki vinir þínir."
 msgid "No status found with that ID."
 msgstr "Engin staða fundin með þessu kenni."
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Þetta babl er nú þegar í uppáhaldi!"
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Gat ekki búið til uppáhald."
 
-#: actions/apifavoritedestroy.php:123
-#, fuzzy
-msgid "That status is not a favorite."
-msgstr "Þetta babl er ekki í uppáhaldi!"
-
 #: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
 msgid "Could not delete favorite."
 msgstr "Gat ekki eytt uppáhaldi."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Get ekki fylgst með notanda: Notandinn finnst ekki."
+msgstr ""
+"Get ekki fylgst með notanda: %s. Þessi notandi er nú þegar í listanum þínum."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -377,26 +239,12 @@ msgstr ""
 "Get ekki fylgst með notanda: %s. Þessi notandi er nú þegar í listanum þínum."
 
 #: actions/apifriendshipsdestroy.php:109
-#, fuzzy
 msgid "Could not unfollow user: User not found."
-msgstr "Get ekki fylgst með notanda: Notandinn finnst ekki."
-
-#: actions/apifriendshipsdestroy.php:120
-#, fuzzy
-msgid "You cannot unfollow yourself."
-msgstr "Gat ekki uppfært notanda."
+msgstr ""
+"Get ekki fylgst með notanda: %s. Þessi notandi er nú þegar í listanum þínum."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Tvo notendakenni eða skjáarnöfn verða að vera uppgefin."
-
-#: actions/apifriendshipsshow.php:134
-msgid "Could not determine source user."
-msgstr ""
-
-#: actions/apifriendshipsshow.php:142
-msgid "Could not find target user."
 msgstr ""
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
@@ -432,9 +280,9 @@ msgstr "Fullt nafn er of langt (í mesta lagi 255 stafir)."
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "Lýsing er of löng (í mesta lagi 140 tákn)."
+msgstr "Staðsetning er of löng (í mesta lagi %d stafir)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -448,17 +296,6 @@ msgstr "Staðsetning er of löng (í mesta lagi 255 stafir)."
 msgid "Too many aliases! Maximum %d."
 msgstr ""
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "Ógilt merki: \"%s\""
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr ""
-
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
@@ -467,45 +304,23 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "Aðferð í forritsskilum fannst ekki!"
-
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
-msgid "You are already a member of that group."
-msgstr "Þú ert nú þegar meðlimur í þessum hópi"
-
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "Fannst ekki."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
+#, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "Gat ekki bætt notandanum %s í hópinn %s"
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "Þú ert ekki meðlimur í þessum hópi."
+msgstr "Gat ekki skráð hópmeðlimi."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
-
-#. TRANS: %s is a user name
-#: actions/apigrouplist.php:98
-#, fuzzy, php-format
-msgid "%s's groups"
-msgstr "Hópar %s"
-
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Hópar sem %s er meðlimur í"
+msgstr "Gat ekki búið til hóp."
 
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
@@ -514,25 +329,10 @@ msgstr "Hópar sem %s er meðlimur í"
 msgid "%s groups"
 msgstr "Hópar %s"
 
-#: actions/apigrouplistall.php:96
-#, fuzzy, php-format
-msgid "groups on %s"
-msgstr "Hópsaðgerðir"
-
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Misheppnuð skipun"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Ótæk stærð."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -551,21 +351,6 @@ msgstr "Ótæk stærð."
 msgid "There was a problem with your session token. Try again, please."
 msgstr "Það kom upp vandamál með setutókann þinn. Vinsamlegast reyndu aftur."
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Ótækt notendanafn eða lykilorð."
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Villa kom upp í stillingu notanda."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -629,11 +414,6 @@ msgstr "Lykilorð"
 msgid "Deny"
 msgstr ""
 
-#: actions/apioauthauthorize.php:334
-#, fuzzy
-msgid "Allow"
-msgstr "Allt"
-
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
 msgstr ""
@@ -651,15 +431,10 @@ msgstr "Þú getur ekki eytt stöðu annars notanda."
 msgid "No such notice."
 msgstr "Ekkert svoleiðis babl."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "Get ekki kveikt á tilkynningum."
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "Eyða þessu babli"
+msgstr "Get ekki eytt þessu babli."
 
 #: actions/apistatusesshow.php:139
 msgid "Status deleted."
@@ -673,40 +448,24 @@ msgstr "Engin staða með þessu kenni fannst."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, fuzzy, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Fannst ekki."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "Skráarsnið myndar ekki stutt."
-
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Uppáhaldsbabl frá %s"
+msgstr "Staða %1$s á %2$s"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s."
-
-#: actions/apitimelinementions.php:118
 #, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr ""
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s færslur sem svara færslum frá %2$s / %3$s."
 
 #: actions/apitimelinementions.php:131
 #, php-format
@@ -723,34 +482,15 @@ msgstr "Almenningsrás %s"
 msgid "%s updates from everyone!"
 msgstr "%s færslur frá öllum!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "Svör við %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "Svör við %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr "Babl merkt með %s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr ""
-
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "Aðferð í forritsskilum er í þróun."
 
-#: actions/attachment.php:73
-msgid "No such attachment."
-msgstr ""
-
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
 #: actions/grouplogo.php:86 actions/groupmembers.php:76
@@ -772,17 +512,11 @@ msgstr "Ótæk stærð."
 msgid "Avatar"
 msgstr "Mynd"
 
-#: actions/avatarsettings.php:78
-#, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
-
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "Notandi með enga persónulega síðu sem passar við"
+msgstr "Notandi hefur enga persónulega síðu."
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
@@ -800,7 +534,7 @@ msgid "Preview"
 msgstr "Forsýn"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Eyða"
 
@@ -812,11 +546,6 @@ msgstr "Hlaða upp"
 msgid "Crop"
 msgstr "Skera af"
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Engin persónuleg síða tilgreind"
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
@@ -834,14 +563,9 @@ msgstr "Mynd hefur verið uppfærð."
 msgid "Failed updating avatar."
 msgstr "Mistókst að uppfæra mynd"
 
-#: actions/avatarsettings.php:397
-msgid "Avatar deleted."
-msgstr ""
-
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Þú hefur nú þegar lokað á þennan notanda."
+msgstr "Þú ert nú þegar í áskrift að þessum notendum:"
 
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
 msgid "Block user"
@@ -862,30 +586,9 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Nei"
-
-#. TRANS: Submit button title for 'No' when blocking a user.
-#. TRANS: Submit button title for 'No' when deleting a user.
-#: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
-msgid "Do not block this user"
-msgstr "Opna á þennan notanda"
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Já"
+msgstr "Athugasemd"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
@@ -896,6 +599,8 @@ msgstr "Loka á þennan notanda"
 msgid "Failed to save block information."
 msgstr "Mistókst að vista upplýsingar um notendalokun"
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -905,29 +610,11 @@ msgstr "Mistókst að vista upplýsingar um notendalokun"
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Enginn þannig hópur."
 
-#: actions/blockedfromgroup.php:97
-#, php-format
-msgid "%s blocked profiles"
-msgstr ""
-
-#: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
-msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s og vinirnir, síða %d"
-
-#: actions/blockedfromgroup.php:115
-msgid "A list of the users blocked from joining this group."
-msgstr ""
-
-#: actions/blockedfromgroup.php:288
-msgid "Unblock user from group"
-msgstr ""
-
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr "Opna"
@@ -938,9 +625,9 @@ msgstr "Opna á þennan notanda"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "Ljósmynd"
+msgstr "Svör við %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -956,9 +643,9 @@ msgstr "Þessi staðfestingarlykill er ekki fyrir þig!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Óþekkt gerð tölvupóstfangs %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -987,9 +674,8 @@ msgid "Couldn't delete email confirmation."
 msgstr "Gat ekki eytt tölvupóstsstaðfestingu."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Staðfesta tölvupóstfang"
+msgstr "Núverandi staðfesta tölvupóstfangið."
 
 #: actions/confirmaddress.php:161
 #, php-format
@@ -997,30 +683,18 @@ msgid "The address \"%s\" has been confirmed for your account."
 msgstr ""
 "Þetta tölvupóstfang, \"%s\", hefur verið staðfest fyrir aðganginn þinn."
 
-#: actions/conversation.php:99
-msgid "Conversation"
-msgstr ""
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "Babl"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
+msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Babl hefur enga persónulega síðu"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Þú ert ekki meðlimur í þessum hópi."
+msgstr "Staðfestingarlykill fannst ekki."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1028,11 +702,6 @@ msgstr "Þú ert ekki meðlimur í þessum hópi."
 msgid "There was a problem with your session token."
 msgstr "Það komu upp vandamál varðandi setutókann þinn."
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Ekkert svoleiðis babl."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1042,15 +711,8 @@ msgstr ""
 
 #. TRANS: Submit button title for 'No' when deleting an application.
 #: actions/deleteapplication.php:158
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "Gat ekki uppfært hóp."
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "Eyða þessu babli"
+msgstr "Get ekki eytt þessu babli."
 
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -1081,43 +743,17 @@ msgstr "Eyða babli"
 msgid "Are you sure you want to delete this notice?"
 msgstr "Ertu viss um að þú viljir eyða þessu babli?"
 
-#. TRANS: Submit button title for 'No' when deleting a notice.
-#: actions/deletenotice.php:151
-msgid "Do not delete this notice"
-msgstr ""
-
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Eyða þessu babli"
 
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Gat ekki uppfært notanda."
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "Þú getur ekki eytt stöðu annars notanda."
-
-#: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
-msgid "Delete user"
-msgstr "Eyða"
-
 #: actions/deleteuser.php:136
 msgid ""
 "Are you sure you want to delete this user? This will clear all data about "
 "the user from the database, without a backup."
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when deleting a user.
-#: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
-msgid "Delete this user"
-msgstr "Eyða þessu babli"
-
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
@@ -1129,45 +765,18 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Ótæk stærð."
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Þessi síða er ekki aðgengileg í "
-
-#: actions/designadminpanel.php:426
-#, fuzzy
-msgid "Change logo"
-msgstr "Breyta"
+msgstr ""
 
 #: actions/designadminpanel.php:431
-#, fuzzy
 msgid "Site logo"
-msgstr "Bjóða"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
-msgstr "Breyta"
-
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
 msgstr "Babl vefsíðunnar"
 
-#: actions/designadminpanel.php:461
-#, fuzzy
-msgid "Theme for the site."
-msgstr "Skrá þig út af síðunni"
-
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Babl vefsíðunnar"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1182,13 +791,6 @@ msgstr ""
 msgid "Background"
 msgstr ""
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1207,26 +809,10 @@ msgstr ""
 msgid "Tile background image"
 msgstr ""
 
-#: actions/designadminpanel.php:564 lib/designsettings.php:170
-msgid "Change colours"
-msgstr ""
-
-#: actions/designadminpanel.php:587 lib/designsettings.php:191
-msgid "Content"
-msgstr ""
-
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-msgid "Sidebar"
-msgstr ""
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "Texti"
 
-#: actions/designadminpanel.php:626 lib/designsettings.php:230
-msgid "Links"
-msgstr ""
-
 #: actions/designadminpanel.php:651
 msgid "Advanced"
 msgstr ""
@@ -1271,69 +857,22 @@ msgid "Add to favorites"
 msgstr "Bæta við sem uppáhaldsbabli"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Ekkert svoleiðis skjal."
+msgstr "Ekkert svoleiðis babl."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Aðrir valkostir"
-
-#: actions/editapplication.php:66
-#, fuzzy
-msgid "You must be logged in to edit an application."
-msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Ekkert svoleiðis babl."
-
-#: actions/editapplication.php:161
-#, fuzzy
-msgid "Use this form to edit your application."
-msgstr "Notaðu þetta eyðublað til að breyta hópnum."
-
-#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
-msgid "Name is required."
-msgstr "Sama og lykilorðið hér fyrir ofan. Nauðsynlegt."
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Fullt nafn er of langt (í mesta lagi 255 stafir)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Stuttnefni nú þegar í notkun. Prófaðu eitthvað annað."
-
-#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
-msgid "Description is required."
-msgstr "Lýsing"
+msgstr ""
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Heimasíða er ekki gild vefslóð."
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr ""
 
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Staðsetning er of löng (í mesta lagi 255 stafir)."
-
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
 msgstr ""
@@ -1346,11 +885,6 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Gat ekki uppfært hóp."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
@@ -1362,42 +896,30 @@ msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
 
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
 msgid "You must be an admin to edit the group."
-msgstr "Þú verður að vera stjórnandi til að geta breytt hópnum"
+msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
 
 #: actions/editgroup.php:158
 msgid "Use this form to edit the group."
 msgstr "Notaðu þetta eyðublað til að breyta hópnum."
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
-msgid "description is too long (max %d chars)."
-msgstr "Lýsing er of löng (í mesta lagi 140 tákn)."
-
-#: actions/editgroup.php:228 actions/newgroup.php:168
 #, php-format
-msgid "Invalid alias: \"%s\""
-msgstr ""
+msgid "description is too long (max %d chars)."
+msgstr "Staðsetning er of löng (í mesta lagi 255 stafir)."
 
 #: actions/editgroup.php:258
 msgid "Could not update group."
 msgstr "Gat ekki uppfært hóp."
 
-#. TRANS: Server exception thrown when creating group aliases failed.
-#: actions/editgroup.php:264 classes/User_group.php:514
-msgid "Could not create aliases."
-msgstr ""
-
 #: actions/editgroup.php:280
 msgid "Options saved."
 msgstr "Valmöguleikar vistaðir."
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Tölvupóstsstillingar"
+msgstr "Stillingar persónulegrar síðu"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1406,13 +928,6 @@ msgstr "Tölvupóstsstillingar"
 msgid "Manage how you get email from %%site.name%%."
 msgstr "Stilla það hvernig þú færð tölvupóst frá %%site.name%%."
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Tölvupóstföng"
-
 #. TRANS: Form note in e-mail settings form.
 #: actions/emailsettings.php:112
 msgid "Current confirmed email address."
@@ -1426,10 +941,9 @@ msgstr "Núverandi staðfesta tölvupóstfangið."
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "Fjarlægja"
+msgstr "Endurheimta"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1439,17 +953,6 @@ msgstr ""
 "Býð eftir staðfestingu frá þessu netfangi. Athugaðu innhólfið þitt (og "
 "ruslpóstinn þinn!). Þar ættu að vera skilaboð með ítarlegri leiðbeiningum."
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Hætta við"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1460,10 +963,9 @@ msgstr "Tölvupóstfang eins og \"notandi@example.org\""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Bæta við"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1486,16 +988,14 @@ msgstr "Búa til nýtt tölvupóstfang til að senda til. Skrifar yfir það gam
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Nýtt"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "Stillingar"
+msgstr "Tölvupóstföng"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1512,11 +1012,6 @@ msgstr "Senda mér tölvupóst þegar einhver setur babl í mér í uppáhald hj
 msgid "Send me email when someone sends me a private message."
 msgstr "Senda mér tölvupóst þegar einhver sendir mér persónuleg skilaboð."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:199
-msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr ""
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
@@ -1532,12 +1027,6 @@ msgstr "Ég vil babla í gegnum tölvupóst."
 msgid "Publish a MicroID for my email address."
 msgstr "Birta MicroID fyrir tölvupóstfangið mitt."
 
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Stillingar vistaðar."
-
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
@@ -1590,17 +1079,10 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Engin staðfesting í bið sem þarf að hætta við."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Þetta er rangt snarskilaboðafang."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Hætt við staðfestingu."
+msgstr "Engin staðfesting í bið sem þarf að hætta við."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1610,9 +1092,8 @@ msgstr "Þetta er ekki tölvupóstfangið þitt."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Tölvupóstfangið hefur verið fjarlægt."
+msgstr "Móttökutölvupóstfang fjarlægt."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1680,11 +1161,6 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "Uppáhaldsbabl %s"
 
-#: actions/favoritesrss.php:115
-#, fuzzy, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr "Færslur frá %1$s á %2$s!"
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1696,24 +1172,13 @@ msgid "Featured users, page %d"
 msgstr "Notendur í sviðsljósinu, síða %d"
 
 #: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "A selection of some great users on %s"
-msgstr "Úrval nokkurra frábærra notenda á %s"
-
-#: actions/file.php:34
-#, fuzzy
-msgid "No notice ID."
-msgstr "Ekkert svoleiðis babl."
-
-#: actions/file.php:38
-#, fuzzy
-msgid "No notice."
-msgstr "Ekkert svoleiðis babl."
+msgstr ""
 
 #: actions/file.php:42
-#, fuzzy
 msgid "No attachments."
-msgstr "Ekkert svoleiðis skjal."
+msgstr ""
 
 #: actions/file.php:51
 msgid "No uploaded attachments."
@@ -1724,9 +1189,8 @@ msgid "Not expecting this response!"
 msgstr "Bjóst ekki við þessu svari!"
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "Notandi sem verið er að hlusta á er ekki til."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1737,53 +1201,24 @@ msgid "That user has blocked you from subscribing."
 msgstr "Þessi notandi hefur bannað þér að gerast áskrifandi"
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Engin heimild."
+msgstr "Þú ert ekki áskrifandi."
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Gat ekki breytt beiðnistókum í aðgangstóka."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Óþekkt útgáfa OMB samskiptamátans."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Villa kom upp í uppfærslu persónulegrar fjarsíðu"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "Ekkert svoleiðis babl."
-
-#: actions/getfile.php:83
-#, fuzzy
-msgid "Cannot read file."
-msgstr "Týndum skránni okkar"
-
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Ótæk stærð."
+msgstr ""
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Þú getur ekki sent þessum notanda skilaboð."
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "Notandi hefur enga persónulega síðu."
+msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1797,27 +1232,10 @@ msgstr "Engin persónuleg síða tilgreind"
 msgid "No profile with that ID."
 msgstr "Engin persónulega síða með þessu einkenni"
 
-#: actions/groupblock.php:81 actions/groupunblock.php:81
-#: actions/makeadmin.php:81
-msgid "No group specified."
-msgstr ""
-
 #: actions/groupblock.php:91
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-msgid "User is already blocked from group."
-msgstr ""
-
-#: actions/groupblock.php:100
-msgid "User is not a member of group."
-msgstr ""
-
-#: actions/groupblock.php:134 actions/groupmembers.php:360
-msgid "Block user from group"
-msgstr ""
-
 #: actions/groupblock.php:160
 #, php-format
 msgid ""
@@ -1826,32 +1244,13 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-msgid "Do not block this user from this group"
-msgstr ""
-
-#. TRANS: Submit button title for 'Yes' when blocking a user from a group.
-#: actions/groupblock.php:189
-msgid "Block this user from this group"
-msgstr ""
-
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Ekkert einkenni"
-
-#: actions/groupdesignsettings.php:68
-msgid "You must be logged in to edit a group."
-msgstr ""
-
-#: actions/groupdesignsettings.php:144
-msgid "Group design"
-msgstr ""
+msgstr "Ekkert Jabber-kenni"
 
 #: actions/groupdesignsettings.php:155
 msgid ""
@@ -1859,29 +1258,10 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-msgid "Couldn't update your design."
-msgstr ""
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-msgid "Design preferences saved."
-msgstr ""
-
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
 msgstr "Einkennismynd hópsins"
 
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
-
-#: actions/grouplogo.php:365
-msgid "Pick a square area of the image to be the logo."
-msgstr ""
-
 #: actions/grouplogo.php:399
 msgid "Logo updated."
 msgstr "Einkennismynd uppfærð."
@@ -1896,9 +1276,9 @@ msgid "%s group members"
 msgstr "Hópmeðlimir %s"
 
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "Hópmeðlimir %s, síða %d"
+msgstr "Hópmeðlimir %s"
 
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
@@ -1912,14 +1292,6 @@ msgstr "Stjórnandi"
 msgid "Block"
 msgstr "Loka"
 
-#: actions/groupmembers.php:487
-msgid "Make user an admin of the group"
-msgstr ""
-
-#: actions/groupmembers.php:519
-msgid "Make Admin"
-msgstr ""
-
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
 msgstr ""
@@ -1933,12 +1305,6 @@ msgstr ""
 msgid "%s timeline"
 msgstr "Rás %s"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "Færslur frá %1$s á %2$s!"
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
@@ -1963,22 +1329,10 @@ msgstr ""
 msgid "Create a new group"
 msgstr "Búa til nýjan hóp"
 
-#: actions/groupsearch.php:52
-#, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
-msgstr ""
-
 #: actions/groupsearch.php:58
 msgid "Group search"
 msgstr "Hópleit"
 
-#: actions/groupsearch.php:79 actions/noticesearch.php:117
-#: actions/peoplesearch.php:83
-msgid "No results."
-msgstr ""
-
 #: actions/groupsearch.php:82
 #, php-format
 msgid ""
@@ -1997,19 +1351,14 @@ msgstr ""
 msgid "Only an admin can unblock group members."
 msgstr ""
 
-#: actions/groupunblock.php:95
-msgid "User is not blocked from group."
-msgstr ""
-
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
 msgstr "Vill kom upp við að aflétta notendalokun."
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "Snarskilaboðastillingar"
+msgstr "Stillingar fyrir mynd"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2026,16 +1375,14 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Þessi síða er ekki aðgengileg í "
+msgstr ""
 
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "Snarskilaboðafang"
+msgstr "Tölvupóstföng"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2067,9 +1414,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Stillingar"
+msgstr "Stillingar vistaðar."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2138,17 +1484,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Þetta er rangt snarskilaboðafang."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Gat ekki eytt tölvupóstsstaðfestingu."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Hætt við staðfestingu."
+msgstr "Enginn staðfestingarlykill."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2158,14 +1497,8 @@ msgstr "Þetta er ekki Jabber-kennið þitt."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "Tölvupóstfangið hefur verið fjarlægt."
-
-#: actions/inbox.php:59
-#, fuzzy, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr "Innhólf %s"
+msgstr "Móttökutölvupóstfang fjarlægt."
 
 #: actions/inbox.php:62
 #, php-format
@@ -2182,9 +1515,9 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "Þú verður að vera innskráð(ur) til að geta boðið öðrum að nota %s"
+msgstr "Þú verður að hafa skráð þig inn til að bæta þér í hóp."
 
 #: actions/invite.php:72
 #, php-format
@@ -2205,7 +1538,7 @@ msgstr "Þú ert nú þegar í áskrift að þessum notendum:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2253,10 +1586,9 @@ msgstr "Bættu persónulegum skilaboðum við boðskortið ef þú vilt."
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Senda"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2326,32 +1658,19 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "Þú verður að hafa skráð þig inn til að bæta þér í hóp."
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Ekkert stuttnefni."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, fuzzy, php-format
-msgid "%1$s joined group %2$s"
-msgstr "%s bætti sér í hópinn %s"
-
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
 msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Þú ert ekki meðlimur í þessum hópi."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%s gekk úr hópnum %s"
+msgstr "Staða %1$s á %2$s"
 
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
@@ -2361,11 +1680,6 @@ msgstr "Þú hefur nú þegar skráð þig inn."
 msgid "Incorrect username or password."
 msgstr "Rangt notendanafn eða lykilorð."
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Engin heimild."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Innskráning"
@@ -2396,68 +1710,29 @@ msgstr ""
 "Af öryggisástæðum, vinsamlegast sláðu aftur inn notendanafnið þitt og "
 "lykilorð áður en þú breytir stillingunum þínum."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Skráðu þig inn með notendanafni og lykilorði"
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Skráðu þig inn með notendanafninu þínu og lykilorði. Ertu ekki með "
-"notendanafn? [Nýskráðu þig](%%action.register%%) eða prófaðu [OpenID](%%"
-"action.openidlogin%%). "
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr ""
-
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
-
-#: actions/makeadmin.php:146
-#, fuzzy, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
+msgstr ""
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "Engin núverandi staða"
-
-#: actions/newapplication.php:52
-#, fuzzy
-msgid "New Application"
-msgstr "Ekkert svoleiðis babl."
-
-#: actions/newapplication.php:64
-#, fuzzy
-msgid "You must be logged in to register an application."
-msgstr "Þú verður að hafa skráð þig inn til að búa til hóp."
-
-#: actions/newapplication.php:143
-#, fuzzy
-msgid "Use this form to register a new application."
-msgstr "Notaðu þetta eyðublað til að búa til nýjan hóp."
+msgstr ""
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
 msgstr ""
 
-#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
-msgid "Could not create application."
-msgstr "Gat ekki búið til uppáhald."
-
 #: actions/newgroup.php:53
 msgid "New group"
 msgstr "Nýr hópur"
@@ -2470,12 +1745,15 @@ msgstr "Notaðu þetta eyðublað til að búa til nýjan hóp."
 msgid "New message"
 msgstr "Ný skilaboð"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Þú getur ekki sent þessum notanda skilaboð."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Ekkert innihald!"
 
@@ -2483,23 +1761,15 @@ msgstr "Ekkert innihald!"
 msgid "No recipient specified."
 msgstr "Enginn móttökuaðili tilgreindur."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 "Ekki senda þér skilaboð. Þú getur sagt þetta í hljóði við sjálfa(n) þig í "
 "staðinn."
 
-#: actions/newmessage.php:181
-msgid "Message sent"
-msgstr ""
-
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Bein skilaboð send til %s"
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax villa"
 
@@ -2507,7 +1777,7 @@ msgstr "Ajax villa"
 msgid "New notice"
 msgstr "Nýtt babl"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Babl sent inn"
 
@@ -2524,11 +1794,6 @@ msgstr ""
 msgid "Text search"
 msgstr "Textaleit"
 
-#: actions/noticesearch.php:91
-#, fuzzy, php-format
-msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Skilaboð frá %1$s á %2$s"
-
 #: actions/noticesearch.php:121
 #, php-format
 msgid ""
@@ -2549,17 +1814,14 @@ msgid "Updates with \"%s\""
 msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Allar færslur sem passa við \"%s\""
+msgstr "Færslur frá %1$s á %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Þessi notandi leyfir ekki að ýta við sér eða hefur ekki staðfest eða skráð "
-"tölvupóstinn sinn."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2569,38 +1831,14 @@ msgstr "Ýtt við notanda"
 msgid "Nudge sent!"
 msgstr "Ýtt við notanda!"
 
-#: actions/oauthappssettings.php:59
-#, fuzzy
-msgid "You must be logged in to list your applications."
-msgstr "Þú verður að hafa skráð þig inn til að bæta þér í hóp."
-
-#: actions/oauthappssettings.php:74
-#, fuzzy
-msgid "OAuth applications"
-msgstr "Aðrir valkostir"
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Þú ert ekki meðlimur í þessum hópi."
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2615,9 +1853,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Babl hefur enga persónulega síðu"
+msgstr "Notandi hefur enga persónulega síðu."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2637,8 +1874,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Enginn stuðningur við gagnasnið."
 
@@ -2651,9 +1888,8 @@ msgid "Notice Search"
 msgstr "Leit í babli"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Aðrar stillingar"
+msgstr "Stillingar fyrir mynd"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2671,10 +1907,6 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr "Þjónusta sem sér um sjálfkrafa styttingu."
 
-#: actions/othersettings.php:122
-msgid "View profile designs"
-msgstr ""
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
@@ -2684,35 +1916,9 @@ msgid "URL shortening service is too long (max 50 chars)."
 msgstr ""
 "Þjónusta sjálfvirkrar vefslóðastyttingar er of löng (í mesta lagi 50 stafir)."
 
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "Engin persónuleg síða tilgreind"
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Engin persónuleg síða tilgreind"
-
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "Ekkert einkenni persónulegrar síðu í beiðni."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Ótækt bablinnihald"
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "Skrá þig inn á síðuna"
-
-#: actions/outbox.php:58
-#, fuzzy, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr "Úthólf %s"
+msgstr "Engin heimildarbeiðni!"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2795,39 +2001,29 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Þessi síða er ekki aðgengileg í "
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Þessi síða er ekki aðgengileg í "
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Þessi síða er ekki aðgengileg í "
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Þessi síða er ekki aðgengileg í "
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
-msgid "Site"
-msgstr "Bjóða"
-
-#: actions/pathsadminpanel.php:238
-#, fuzzy
-msgid "Server"
-msgstr "Endurheimta"
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2836,11 +2032,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Babl vefsíðunnar"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2873,21 +2064,6 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Mynd"
-
-#: actions/pathsadminpanel.php:284
-#, fuzzy
-msgid "Avatar server"
-msgstr "Stillingar fyrir mynd"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Mynd hefur verið uppfærð."
-
 #: actions/pathsadminpanel.php:292
 msgid "Avatar directory"
 msgstr ""
@@ -2908,21 +2084,6 @@ msgstr ""
 msgid "Background directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:320
-#, fuzzy
-msgid "SSL"
-msgstr "SMS"
-
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "Endurheimta"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Babl"
-
 #: actions/pathsadminpanel.php:325
 msgid "Always"
 msgstr ""
@@ -2936,18 +2097,16 @@ msgid "When to use SSL"
 msgstr ""
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
-msgstr "Endurheimta"
+msgstr ""
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Babl vefsíðunnar"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2963,19 +2122,13 @@ msgid "People search"
 msgstr "Leit að fólki"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "Ekki gilt persónumerki: %s"
-
-#: actions/peopletag.php:142
-#, fuzzy, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Notendur sjálfmerktir með %s - síða %d"
+msgstr "Ekki tækt tölvupóstfang."
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Ótækt bablinnihald"
+msgstr "Ótæk stærð."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3020,14 +2173,13 @@ msgstr ""
 "vefsvæði"
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Lýstu þér og áhugamálum þínum í 140 táknum"
+msgstr ""
 
 #: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
 msgid "Describe yourself and your interests"
-msgstr "Lýstu þér og þínum "
+msgstr ""
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3085,9 +2237,9 @@ msgstr ""
 "(best fyrir ómannlega notendur)"
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "Lýsingin er of löng (í mesta lagi 140 tákn)."
+msgstr "Staðsetning er of löng (í mesta lagi %d stafir)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
@@ -3106,11 +2258,6 @@ msgstr "Ógilt merki: \"%s\""
 msgid "Couldn't update user for autosubscribe."
 msgstr "Gat ekki uppfært notanda í sjálfvirka áskrift."
 
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Gat ekki vistað merki."
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Gat ekki vistað persónulega síðu."
@@ -3247,24 +2394,10 @@ msgstr ""
 msgid "Could not update user with confirmed email address."
 msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi."
 
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "Stuttnefnið þitt á þessum vefþjóni eða skráða tölvupóstfangið."
@@ -3345,10 +2478,6 @@ msgstr "Tókst að vista nýtt lykilorð. Þú ert núna innskráð(ur)"
 msgid "Sorry, only invited people can register."
 msgstr "Afsakið en aðeins fólki sem er boðið getur nýskráð sig."
 
-#: actions/register.php:99
-msgid "Sorry, invalid invitation code."
-msgstr ""
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "Nýskráning tókst"
@@ -3437,7 +2566,7 @@ msgid ""
 msgstr ""
 
 #: actions/register.php:583
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
@@ -3454,20 +2583,6 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Til hamingju %s! Frábært að þú skulir hafa skráð þig á %%%%site.name%%%%. "
-"Héðan vilt þú kannski...\n"
-"\n"
-"* Fara á [persónulegu síðuna þína](%s) senda inn þitt fyrsta babl.\n"
-"* Bæta við [Jabber/GTalk snarskilaboðafangi](%%%%action.imsettings%%%%) svo "
-"þú getir sent inn babl í snarskilaboðum.\n"
-"* [Leita að fólki](%%%%action.peoplesearch%%%%) sem þú þekkir eða hefur sömu "
-"áhugamál og þú. \n"
-"* Uppfæra [persónulegu síðuna](%%%%action.profilesettings%%%%) þína til þess "
-"að leyfa öðrum að kynnast þér betur.\n"
-"* Lesa [vefleiðbeiningarnar](%%%%doc.help%%%%) til þess að læra að babla "
-"betur.\n"
-"\n"
-"Takk fyrir að skrá þig og við vonum að þú njótir þjónustunnar."
 
 #: actions/register.php:607
 msgid ""
@@ -3493,10 +2608,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "Fara í fjaráskrift"
 
-#: actions/remotesubscribe.php:124
-msgid "Subscribe to a remote user"
-msgstr ""
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "Stuttnefni notanda"
@@ -3523,46 +2634,16 @@ msgid "Invalid profile URL (bad format)"
 msgstr "Ótækt veffang persónulegrar síðu (vitlaust snið)"
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Ekki tækt veffang á persónulega síðu (ekkert YADIS skjal)."
+msgstr ""
 
 #: actions/remotesubscribe.php:176
-#, fuzzy
 msgid "That’s a local profile! Login to subscribe."
 msgstr ""
-"Þetta er staðbundinn persónuaðgangur! Skráðu þig inn til að gerast "
-"áskrifandi."
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Gat ekki komist yfir beiðnistóka."
-
-#: actions/repeat.php:57
-#, fuzzy
-msgid "Only logged-in users can repeat notices."
-msgstr "Aðeins notandinn getur lesið hans eigin pósthólf."
-
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Engin persónuleg síða tilgreind"
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Þú getur ekki nýskráð þig nema þú samþykkir leyfið."
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "Þú hefur nú þegar lokað á þennan notanda."
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
-msgid "Repeated"
-msgstr "Í sviðsljósinu"
+msgstr ""
 
 #: actions/repeat.php:119
 msgid "Repeated!"
@@ -3575,24 +2656,14 @@ msgid "Replies to %s"
 msgstr "Svör við %s"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "Skilaboð til %1$s á %2$s"
-
-#: actions/replies.php:145
-#, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/replies.php:152
 #, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr ""
+msgid "Replies to %1$s, page %2$d"
+msgstr "Svör við %s"
 
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Bablveita fyrir hópinn %s"
+msgstr "Svör við %s"
 
 #: actions/replies.php:199
 #, php-format
@@ -3615,30 +2686,9 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "Skilaboð til %1$s á %2$s"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Þú getur ekki sent þessum notanda skilaboð."
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "Notandi með enga persónulega síðu sem passar við"
-
-#: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
-msgid "StatusNet"
-msgstr "Tölfræði"
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Þú getur ekki sent þessum notanda skilaboð."
+msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
 
 #: actions/sandbox.php:72
 msgid "User is already sandboxed."
@@ -3670,40 +2720,11 @@ msgstr ""
 msgid "Turn on debugging output for sessions."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/useradminpanel.php:294
-#, fuzzy
-msgid "Save site settings"
-msgstr "Stillingar fyrir mynd"
-
-#: actions/showapplication.php:82
-#, fuzzy
-msgid "You must be logged in to view an application."
-msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Babl hefur enga persónulega síðu"
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Stuttnefni"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
-msgid "Organization"
-msgstr "Uppröðun"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
 #: lib/applicationeditform.php:216 lib/groupeditform.php:172
@@ -3720,18 +2741,10 @@ msgstr "Tölfræði"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3758,34 +2771,19 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Ertu viss um að þú viljir eyða þessu babli?"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "Uppáhaldsbabl %s"
-
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
 msgstr "Gat ekki sótt uppáhaldsbabl."
 
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Bablveita uppáhaldsbabls %s"
+msgstr ""
 
 #: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Bablveita uppáhaldsbabls %s"
-
-#: actions/showfavorites.php:185
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr "Bablveita uppáhaldsbabls %s"
+msgstr ""
 
 #: actions/showfavorites.php:206
 msgid ""
@@ -3818,9 +2816,9 @@ msgid "%s group"
 msgstr "%s hópurinn"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Hópmeðlimir %s, síða %d"
+msgstr "Hópar, síða %d"
 
 #: actions/showgroup.php:227
 msgid "Group profile"
@@ -3854,16 +2852,6 @@ msgstr ""
 msgid "Notice feed for %s group (RSS 2.0)"
 msgstr ""
 
-#: actions/showgroup.php:350
-#, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr ""
-
-#: actions/showgroup.php:355
-#, fuzzy, php-format
-msgid "FOAF for %s group"
-msgstr "%s hópurinn"
-
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
 msgid "Members"
 msgstr "Meðlimir"
@@ -3878,10 +2866,6 @@ msgstr "(Ekkert)"
 msgid "All members"
 msgstr "Allir meðlimir"
 
-#: actions/showgroup.php:439
-msgid "Created"
-msgstr ""
-
 #: actions/showgroup.php:455
 #, php-format
 msgid ""
@@ -3901,10 +2885,6 @@ msgid ""
 "their life and interests. "
 msgstr ""
 
-#: actions/showgroup.php:489
-msgid "Admins"
-msgstr ""
-
 #: actions/showmessage.php:81
 msgid "No such message."
 msgstr "Engin þannig skilaboð."
@@ -3923,44 +2903,14 @@ msgstr "Skilaboð til %1$s á %2$s"
 msgid "Message from %1$s on %2$s"
 msgstr "Skilaboð frá %1$s á %2$s"
 
-#: actions/shownotice.php:90
-#, fuzzy
-msgid "Notice deleted."
-msgstr "Babl sent inn"
-
-#: actions/showstream.php:73
-#, php-format
-msgid " tagged %s"
-msgstr ""
-
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s og vinirnir, síða %d"
+msgstr "Hópar, síða %d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
-msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Bablveita fyrir %s"
-
-#: actions/showstream.php:129
 #, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr ""
-
-#: actions/showstream.php:136
-#, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr ""
-
-#: actions/showstream.php:143
-#, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr ""
-
-#: actions/showstream.php:148
-#, php-format
-msgid "FOAF for %s"
+msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
 msgstr ""
 
 #: actions/showstream.php:200
@@ -3998,16 +2948,6 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "Svör við %s"
-
-#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
-msgid "You cannot silence users on this site."
-msgstr "Þú getur ekki sent þessum notanda skilaboð."
-
 #: actions/silence.php:72
 msgid "User is already silenced."
 msgstr ""
@@ -4021,9 +2961,8 @@ msgid "Site name must have non-zero length."
 msgstr ""
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Ekki tækt tölvupóstfang"
+msgstr "Ekki tækt tölvupóstfang."
 
 #: actions/siteadminpanel.php:159
 #, php-format
@@ -4042,11 +2981,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Babl vefsíðunnar"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4067,16 +3001,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Nýtt tölvupóstfang til að senda á %s"
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Staðbundin sýn"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4085,11 +3009,6 @@ msgstr ""
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
-#: actions/siteadminpanel.php:262
-#, fuzzy
-msgid "Default language"
-msgstr "Tungumál (ákjósanlegt)"
-
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
 msgstr ""
@@ -4114,44 +3033,18 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "Babl vefsíðunnar"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Ný skilaboð"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Vandamál komu upp við að vista babl."
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Babl vefsíðunnar"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "Babl vefsíðunnar"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "SMS stillingar"
+msgstr "Stillingar fyrir mynd"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4162,15 +3055,13 @@ msgstr "Þú getur fengið SMS í gegnum tölvupóst frá %%site.name%%."
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Þessi síða er ekki aðgengileg í "
+msgstr ""
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "Snarskilaboðafang"
+msgstr "Tölvupóstföng"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4192,18 +3083,10 @@ msgstr "Staðfestingarlykill"
 msgid "Enter the code you received on your phone."
 msgstr "Sláðu inn lykilinn sem þú fékkst í símann þinn."
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Staðfesta"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
-msgstr "SMS símanúmer"
+msgstr "Ekkert símanúmer."
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
@@ -4212,9 +3095,8 @@ msgstr "Símanúmer, með svæðisnúmeri ef við á, án greinarmerkja eða bil
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Stillingar"
+msgstr "Stillingar vistaðar."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4225,12 +3107,6 @@ msgstr ""
 "Sendu mér babl í gegnum SMS. Ég veit að það er möguleiki að "
 "farsímafyrirtækið rukki fyrir móttöku á SMSunum."
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Stillingar vistaðar."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
@@ -4251,13 +3127,6 @@ msgstr "Þetta er nú þegar símanúmerið þitt."
 msgid "That phone number already belongs to another user."
 msgstr "Þetta símanúmer tilheyri nú þegar öðrum notanda."
 
-#. TRANS: Message given saving valid SMS phone number that is to be confirmed.
-#: actions/smssettings.php:384
-msgid ""
-"A confirmation code was sent to the phone number you added. Check your phone "
-"for the code and instructions on how to use it."
-msgstr ""
-
 #. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
 #: actions/smssettings.php:413
 msgid "That is the wrong confirmation number."
@@ -4265,9 +3134,8 @@ msgstr "Þetta er rangur staðfestingarlykill."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Hætt við staðfestingu."
+msgstr "SMS staðfesting"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4275,12 +3143,6 @@ msgstr "Hætt við staðfestingu."
 msgid "That is not your phone number."
 msgstr "Þetta er ekki símanúmerið þitt."
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "SMS símanúmer"
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
@@ -4315,13 +3177,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Stikl aðalsíðu"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Staðfesting tölvupóstfangs"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4363,11 +3220,6 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Stillingar fyrir mynd"
-
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
 msgstr "Þú ert ekki áskrifandi."
@@ -4381,16 +3233,6 @@ msgstr "Gat ekki vistað áskrift."
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Ekkert svoleiðis babl."
-
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Þú ert ekki áskrifandi."
-
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "Þú ert nú í áskrift"
@@ -4401,9 +3243,9 @@ msgid "%s subscribers"
 msgstr "%s áskrifendur"
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "%s áskrifendur, síða %d"
+msgstr "%s áskrifendur"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4438,9 +3280,9 @@ msgid "%s subscriptions"
 msgstr "%s áskriftir"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "%s áskriftir, síða %d"
+msgstr "%s áskriftir"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
@@ -4461,11 +3303,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, php-format
-msgid "%s is not listening to anyone."
-msgstr ""
-
 #: actions/subscriptions.php:208
 msgid "Jabber"
 msgstr "Jabber snarskilaboðaþjónusta"
@@ -4475,9 +3312,9 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Notendur sjálfmerktir með %s - síða %d"
+msgstr "Babl merkt með %s"
 
 #: actions/tag.php:87
 #, php-format
@@ -4485,19 +3322,13 @@ msgid "Notice feed for tag %s (RSS 1.0)"
 msgstr ""
 
 #: actions/tag.php:93
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Bablveita fyrir %s"
-
-#: actions/tag.php:99
 #, php-format
-msgid "Notice feed for tag %s (Atom)"
+msgid "Notice feed for tag %s (RSS 2.0)"
 msgstr ""
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Ekkert einkenni gefið upp."
+msgstr ""
 
 #: actions/tagother.php:65
 #, php-format
@@ -4547,24 +3378,12 @@ msgid "No such tag."
 msgstr "Ekkert þannig merki."
 
 #: actions/unblock.php:59
-#, fuzzy
 msgid "You haven't blocked that user."
-msgstr "Þú hefur nú þegar lokað á þennan notanda."
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Notandi hefur ekkert nýtt babl"
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Notandi hefur enga persónulega síðu."
+msgstr "Þú ert ekki áskrifandi."
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Ekkert einkenni persónulegrar síðu í beiðni."
+msgstr "Engin persónulega síða með þessu einkenni"
 
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
@@ -4576,13 +3395,6 @@ msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "Notandi"
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr ""
@@ -4614,11 +3426,6 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-#, fuzzy
-msgid "New users"
-msgstr "Bjóða nýjum notendum að vera með"
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
@@ -4627,28 +3434,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Allar áskriftir"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Gerast sjálfkrafa áskrifandi að hverjum þeim sem gerist áskrifandi að þér "
-"(best fyrir ómannlega notendur)"
-
-#: actions/useradminpanel.php:251
-#, fuzzy
-msgid "Invitations"
-msgstr "Boðskort hefur verið sent út"
-
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "Boðskort hefur verið sent út"
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4658,15 +3443,11 @@ msgid "Authorize subscription"
 msgstr "Heimila áskriftir"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Vinsamlegast athugaðu þessi atriði til þess að vera viss um að þú viljir "
-"gerast áskrifandi að babli þessa notanda. Ef þú baðst ekki um að gerast "
-"áskrifandi að babli, smelltu þá á \"Hætta við\"."
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4685,10 +3466,6 @@ msgstr "Gerast áskrifandi að þessum notanda"
 msgid "Reject"
 msgstr "Hafna"
 
-#: actions/userauthorization.php:220
-msgid "Reject this subscription"
-msgstr ""
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Engin heimildarbeiðni!"
@@ -4698,29 +3475,22 @@ msgid "Subscription authorized"
 msgstr "Áskrift heimiluð"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"Áskriftin hefur verið heimiluð en afturkallsveffang var ekki sent. Athugaðu "
-"leiðbeiningar síðunnar um það hvernig á að heimila áskrift. Áskriftartókinn "
-"þinn er;"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Áskrift hafnað"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"Áskriftinni hefur verið hafnað en afturkallsveffang var ekki sent. Athugaðu "
-"leiðbeiningar síðunnar um það hvernig á að hafna áskrift alveg."
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4748,17 +3518,13 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Get ekki lesið slóðina fyrir myndina '%s'"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Röng gerð myndar fyrir '%s'"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-msgid "Profile design"
 msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
@@ -4773,19 +3539,14 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Hópmeðlimir %s, síða %d"
+msgstr "Hópar, síða %d"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, php-format
-msgid "%s is not a member of any group."
-msgstr ""
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4802,11 +3563,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr "Færslur frá %1$s á %2$s!"
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "Tölfræði"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4845,12 +3601,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Persónulegt"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4889,54 +3639,11 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Ótæk stærð."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Hópssíðan"
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Gat ekki uppfært hóp."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Hópssíðan"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Gat ekki uppfært hóp."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Gat ekki búið til uppáhald."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "Villa kom upp við að senda bein skilaboð"
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -4955,64 +3662,46 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-msgid "Problem saving notice. Too long."
-msgstr ""
+msgstr "Villa kom upp við að setja inn mynd"
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Gat ekki vistað babl. Óþekktur notandi."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "Of mikið babl í einu; slakaðu aðeins á og haltu svo áfram eftir nokkrar "
 "mínútur."
 
-#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-msgid ""
-"Too many duplicate messages too quickly; take a breather and post again in a "
-"few minutes."
-msgstr ""
-
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Vandamál komu upp við að vista babl."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Vandamál komu upp við að vista babl."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5028,64 +3717,30 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Notandi hefur enga persónulega síðu."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "Vandamál komu upp við að vista babl."
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Þessi notandi hefur bannað þér að gerast áskrifandi"
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
+msgstr "Gat ekki vistað merki."
 
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "Notandinn hefur lokað á þig."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ekki í áskrift!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Gat ekki eytt áskrift."
+msgstr "Gat ekki vistað áskrift."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Gat ekki eytt áskrift."
+msgstr "Gat ekki vistað áskrift."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Gat ekki eytt áskrift."
-
-#. TRANS: Notice given on user registration.
-#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
-#: classes/User.php:365
-#, php-format
-msgid "Welcome to %1$s, @%2$s!"
-msgstr ""
+msgstr "Gat ekki vistað áskrift."
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
@@ -5094,21 +3749,14 @@ msgstr "Gat ekki búið til hóp."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Gat ekki skráð hópmeðlimi."
+msgstr "Gat ekki búið til hóp."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
 msgid "Could not set group membership."
 msgstr "Gat ekki skráð hópmeðlimi."
 
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "Gat ekki vistað áskrift."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
@@ -5129,11 +3777,6 @@ msgstr "Breyta lykilorðinu þínu"
 msgid "Change email handling"
 msgstr "Breyta tölvupóstumsjón"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-msgid "Design your profile"
-msgstr ""
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -5144,12 +3787,6 @@ msgstr "Aðrir valkostir"
 msgid "Other"
 msgstr "Annað"
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5162,133 +3799,56 @@ msgstr "Stikl aðalsíðu"
 
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr "Persónuleg síða og vinarás"
-
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Persónulegt"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr ""
-"Breyttu tölvupóstinum þínum, einkennismyndinni þinni, lykilorðinu þínu, "
-"persónulegu síðunni þinni"
+msgstr "Breyta lykilorðinu þínu"
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Gat ekki framsent til vefþjóns: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "Tengjast"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Stikl aðalsíðu"
-
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "Stjórnandi"
-
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "Bjóða vinum og vandamönnum að slást í hópinn á %s"
-
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "Bjóða"
-
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
-msgstr "Skrá þig út af síðunni"
+msgstr "Skrá þig inn á síðuna"
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "Útskráning"
+msgstr "Einkennismerki"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Búa til aðgang"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Nýskrá"
-
-#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:488
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Login to the site"
-msgstr "Skrá þig inn á síðuna"
-
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Innskráning"
+msgstr "Búa til nýjan hóp"
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "Hjálp!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "Hjálp"
 
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr "Leita að fólki eða texta"
-
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Leita"
+msgstr ""
 
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
@@ -5346,10 +3906,6 @@ msgstr "Frumþula"
 msgid "Contact"
 msgstr "Tengiliður"
 
-#: lib/action.php:794
-msgid "Badge"
-msgstr ""
-
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
 msgid "StatusNet software license"
@@ -5357,13 +3913,11 @@ msgstr "Hugbúnaðarleyfi StatusNet"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** er örbloggsþjónusta í boði [%%site.broughtby%%](%%site."
-"broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5383,12 +3937,6 @@ msgstr ""
 "sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/"
 "licensing/licenses/agpl-3.0.html)."
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "Hugbúnaðarleyfi StatusNet"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5448,152 +3996,32 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Þú getur ekki sent þessum notanda skilaboð."
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Nýskráning ekki leyfð."
-
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-#, fuzzy
-msgid "showForm() not implemented."
-msgstr "Skipun hefur ekki verið fullbúin"
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-#, fuzzy
-msgid "saveSettings() not implemented."
-msgstr "Skipun hefur ekki verið fullbúin"
-
 #. TRANS: Client error message thrown if design settings could not be deleted in
 #. TRANS: the admin panel Design.
 #: lib/adminpanelaction.php:284
 msgid "Unable to delete design setting."
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Staðfesting tölvupóstfangs"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "Bjóða"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "SMS staðfesting"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
 msgid "Design"
-msgstr "Persónulegt"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "SMS staðfesting"
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "Notandi"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "SMS staðfesting"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "SMS staðfesting"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "SMS staðfesting"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Babl vefsíðunnar"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "SMS staðfesting"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, fuzzy, php-format
-msgid "Describe your application in %d characters"
-msgstr "Lýstu hópnum eða umfjöllunarefninu með 140 táknum"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Lýstu hópnum eða umfjöllunarefninu með 140 táknum"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Frumþula"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:242
-#, fuzzy
-msgid "URL for the homepage of the organization"
-msgstr "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
+msgstr "Lýsing"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5653,10 +4081,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "Fjarlægja"
+msgstr "Endurheimta"
 
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
@@ -5668,11 +4095,6 @@ msgstr ""
 msgid "Author"
 msgstr ""
 
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:279
-msgid "Provider"
-msgstr ""
-
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
@@ -5681,16 +4103,6 @@ msgstr ""
 msgid "Tags for this attachment"
 msgstr ""
 
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Lykilorðabreyting"
-
-#: lib/authenticationplugin.php:236
-#, fuzzy
-msgid "Password changing is not allowed"
-msgstr "Lykilorðabreyting"
-
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
 msgstr "Niðurstöður skipunar"
@@ -5703,45 +4115,21 @@ msgstr "Fullkláruð skipun"
 msgid "Command failed"
 msgstr "Misheppnuð skipun"
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Enginn persónuleg síða með þessu einkenni."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Notandi hefur ekkert nýtt babl"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Fyrirgefðu en þessi skipun hefur ekki enn verið útbúin."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Ýtt við notanda"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5749,55 +4137,39 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Babl gert að uppáhaldi."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Þú ert nú þegar meðlimur í þessum hópi"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Gat ekki bætt notandanum %s í hópinn %s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Fullt nafn: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Staðsetning: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Heimasíða: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Um: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5806,150 +4178,94 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Bein skilaboð send til %s"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Villa kom upp við að senda bein skilaboð"
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Get ekki kveikt á tilkynningum."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Eyða þessu babli"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Babl sent inn"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "Vandamál komu upp við að vista babl."
-
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Svara þessu babli"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Vandamál komu upp við að vista babl."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Tilgreindu nafn notandans sem þú vilt gerast áskrifandi að"
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Þú ert ekki áskrifandi."
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Nú ert þú áskrifandi að %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Tilgreindu nafn notandans sem þú vilt hætta sem áskrifandi að"
+msgstr "Villa kom upp í stillingu notanda."
 
-#: lib/command.php:664
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Unsubscribed from %s"
-msgstr "Nú ert þú ekki lengur áskrifandi að %s"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Skipun hefur ekki verið fullbúin"
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Tilkynningar af."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Get ekki slökkt á tilkynningum."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Tilkynningar á."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Get ekki kveikt á tilkynningum."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Nú ert þú ekki lengur áskrifandi að %s"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Þú ert ekki áskrifandi."
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Þú ert nú þegar í áskrift að þessum notendum:"
 msgstr[1] "Þú ert nú þegar í áskrift að þessum notendum:"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Gat ekki leyft öðrum að gerast áskrifandi að þér."
 msgstr[1] "Gat ekki leyft öðrum að gerast áskrifandi að þér."
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Þú ert ekki meðlimur í þessum hópi."
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Þú ert ekki meðlimur í þessum hópi."
 msgstr[1] "Þú ert ekki meðlimur í þessum hópi."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5991,11 +4307,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Enginn staðfestingarlykill."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -6005,9 +4316,8 @@ msgid "You may wish to run the installer to fix this."
 msgstr ""
 
 #: lib/common.php:139
-#, fuzzy
 msgid "Go to the installer."
-msgstr "Skrá þig inn á síðuna"
+msgstr ""
 
 #: lib/connectsettingsaction.php:110
 msgid "IM"
@@ -6021,11 +4331,6 @@ msgstr "Færslur sendar með snarskilaboðaþjónustu (instant messaging)"
 msgid "Updates by SMS"
 msgstr "Færslur sendar með SMS"
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Tengjast"
-
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
 msgstr ""
@@ -6034,16 +4339,6 @@ msgstr ""
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-msgid "Upload file"
-msgstr ""
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
@@ -6088,11 +4383,6 @@ msgstr "Sía merki"
 msgid "All"
 msgstr "Allt"
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "Veldu farsímafyrirtæki"
-
 #: lib/galleryaction.php:140
 msgid "Tag"
 msgstr "Merki"
@@ -6114,15 +4404,10 @@ msgstr ""
 msgid "URL of the homepage or blog of the group or topic"
 msgstr "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
 
-#: lib/groupeditform.php:168
-#, fuzzy
-msgid "Describe the group or topic"
-msgstr "Lýstu hópnum eða umfjöllunarefninu með 140 táknum"
-
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Lýstu hópnum eða umfjöllunarefninu með 140 táknum"
+msgstr ""
 
 #: lib/groupeditform.php:179
 msgid ""
@@ -6138,15 +4423,6 @@ msgstr ""
 msgid "Group"
 msgstr "Hópur"
 
-#: lib/groupnav.php:101
-msgid "Blocked"
-msgstr ""
-
-#: lib/groupnav.php:102
-#, php-format
-msgid "%s blocked users"
-msgstr ""
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -6161,11 +4437,6 @@ msgstr "Einkennismerki"
 msgid "Add or edit %s logo"
 msgstr "Bæta við eða breyta einkennismerki %s"
 
-#: lib/groupnav.php:120
-#, php-format
-msgid "Add or edit %s design"
-msgstr ""
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Hóparnir með flestu meðlimina"
@@ -6189,11 +4460,6 @@ msgstr ""
 msgid "Unsupported image file format."
 msgstr "Skráarsnið myndar ekki stutt."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Upphal að hluta til."
@@ -6302,11 +4568,9 @@ msgstr ""
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
-msgstr ""
-"Lýsing: %s\n"
-"\n"
+msgstr "Staðsetning: %s"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6347,12 +4611,6 @@ msgstr "Staða %s"
 msgid "SMS confirmation"
 msgstr "SMS staðfesting"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Býð eftir staðfestingu varðandi þetta símanúmer."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6404,9 +4662,9 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s heldur upp á babl frá þér"
+msgstr "Senda mér tölvupóst þegar einhver setur babl í mér í uppáhald hjá sér."
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6439,11 +4697,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6482,10 +4735,9 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
-#, fuzzy
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr "frá"
+msgstr ""
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6503,11 +4755,6 @@ msgstr "Afsakið en þetta er ekki móttökutölvupóstfangið þitt."
 msgid "Sorry, no incoming email allowed."
 msgstr "Því miður er móttökutölvupóstur ekki leyfður."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Skráarsnið myndar ekki stutt."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6546,11 +4793,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
-msgid "Could not determine file's MIME type."
-msgstr "Gat ekki eytt uppáhaldi."
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6569,55 +4811,42 @@ msgstr "Senda bein skilaboð"
 msgid "To"
 msgstr "Til"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Leyfileg tákn"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Senda"
+msgstr ""
 
 #: lib/noticeform.php:160
 msgid "Send a notice"
 msgstr "Senda babl"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Hvað er að frétta %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Gat ekki vistað merki."
-
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "Gat ekki vistað merki."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-#, fuzzy
-msgid "N"
-msgstr "Nei"
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6642,28 +4871,22 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-msgid "in context"
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/noticelist.php:602
-#, fuzzy
+#: lib/noticelist.php:603
 msgid "Repeated by"
-msgstr "Í sviðsljósinu"
+msgstr ""
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Svara þessu babli"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Svara"
 
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Babl sent inn"
-
 #: lib/nudgeform.php:116
 msgid "Nudge this user"
 msgstr "Ýta við þessum notanda"
@@ -6692,11 +4915,6 @@ msgstr "Villa kom upp í uppfærslu persónulegrar fjarsíðu"
 msgid "Error inserting remote profile"
 msgstr "Villa kom upp við að setja inn persónulega fjarsíðu"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Eyða babli"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Gat ekki sett inn nýja áskrift."
@@ -6734,11 +4952,6 @@ msgstr "Skilaboð sem þú hefur sent"
 msgid "Tags in %s's notices"
 msgstr "Merki í babli %s"
 
-#: lib/plugin.php:115
-#, fuzzy
-msgid "Unknown"
-msgstr "Óþekkt aðgerð"
-
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
 msgstr "Áskriftir"
@@ -6755,10 +4968,6 @@ msgstr "Áskrifendur"
 msgid "All subscribers"
 msgstr "Allir áskrifendur"
 
-#: lib/profileaction.php:191
-msgid "User ID"
-msgstr ""
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "Meðlimur síðan"
@@ -6797,24 +5006,13 @@ msgid "Popular"
 msgstr "Vinsælt"
 
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "Ekkert einkenni gefið upp."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Svara þessu babli"
+msgstr ""
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Já"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Svara þessu babli"
-
 #: lib/revokeroleform.php:91
 #, php-format
 msgid "Revoke the \"%s\" role from this user"
@@ -6824,20 +5022,6 @@ msgstr ""
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "Innhólf"
-
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Opna á þennan notanda"
-
-#: lib/searchaction.php:120
-msgid "Search site"
-msgstr ""
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr ""
@@ -6846,10 +5030,6 @@ msgstr ""
 msgid "Search"
 msgstr "Leita"
 
-#: lib/searchaction.php:162
-msgid "Search help"
-msgstr ""
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Fólk"
@@ -6874,16 +5054,6 @@ msgstr "Ónafngreindur hluti"
 msgid "More..."
 msgstr ""
 
-#: lib/silenceform.php:67
-#, fuzzy
-msgid "Silence"
-msgstr "Babl vefsíðunnar"
-
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "Loka á þennan notanda"
-
 #: lib/subgroupnav.php:83
 #, php-format
 msgid "People %s subscribes to"
@@ -6930,13 +5100,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Mistókst að uppfæra mynd"
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6962,9 +5125,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "Villa kom upp í uppfærslu persónulegrar fjarsíðu"
+msgstr "Vill kom upp við að aflétta notendalokun."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
@@ -6974,20 +5136,10 @@ msgstr "Aðalbablararnir"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Opna á þennan notanda"
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Opna á þennan notanda"
-
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr "Hætta sem áskrifandi að þessum notanda"
@@ -6996,15 +5148,6 @@ msgstr "Hætta sem áskrifandi að þessum notanda"
 msgid "Unsubscribe"
 msgstr "Fara úr áskrift"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Notandi hefur enga persónulega síðu."
-
-#: lib/userprofile.php:117
-msgid "Edit Avatar"
-msgstr ""
-
 #: lib/userprofile.php:234 lib/userprofile.php:248
 msgid "User actions"
 msgstr "Notandaaðgerðir"
@@ -7013,10 +5156,6 @@ msgstr "Notandaaðgerðir"
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-msgid "Edit profile settings"
-msgstr ""
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
@@ -7033,11 +5172,6 @@ msgstr "Skilaboð"
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Persónuleg síða notanda"
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -7049,70 +5183,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "fyrir nokkrum sekúndum"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "fyrir um einni mínútu síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "fyrir um %d mínútum síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "fyrir um einum klukkutíma síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "fyrir um %d klukkutímum síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "fyrir um einum degi síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "fyrir um %d dögum síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "fyrir um einum mánuði síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "fyrir um %d mánuðum síðan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "fyrir um einu ári síðan"
 
-#: lib/webcolor.php:82
-#, php-format
-msgid "%s is not a valid color!"
-msgstr ""
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
index 5bb079af7e6f0b57f0ff3eee4d8935ace72aa916..3a75d2c699472d0edd22c89eba1dbdb0c690ec0a 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:38+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:39+0000\n"
 "Language-Team: Italian\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: it\n"
 "X-Message-Group: out-statusnet\n"
@@ -92,6 +92,7 @@ msgstr "Salva"
 msgid "No such page."
 msgstr "Pagina inesistente."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -111,7 +112,7 @@ msgstr "Pagina inesistente."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Utente inesistente."
@@ -170,23 +171,20 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Puoi provare a [richiamare %1$s](../%2$s) dal suo profilo o [scrivere "
-"qualche cosa alla sua attenzione](%%%%action.newnotice%%%%?status_textarea=%3"
-"$s)."
+"[Scrivi qualche cosa](%%%%action.newnotice%%%%?status_textarea=%s) su questo "
+"argomento!"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
-msgstr ""
-"Perché non [crei un account](%%%%action.register%%%%) e richiami %s o scrivi "
-"un messaggio alla sua attenzione."
+msgstr "Perché non [crei un accout](%%action.register%%) e ne scrivi uno tu!"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -353,7 +351,8 @@ msgstr "Nessuno messaggio trovato con quel ID."
 msgid "This status is already a favorite."
 msgstr "Questo messaggio è già un preferito."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Impossibile creare un preferito."
 
@@ -366,9 +365,8 @@ msgid "Could not delete favorite."
 msgstr "Impossibile eliminare un preferito."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Impossibile seguire l'utente: utente non trovato."
+msgstr "Impossibile non seguire l'utente: utente non trovato."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -384,9 +382,8 @@ msgid "You cannot unfollow yourself."
 msgstr "Non puoi non seguirti."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Devono essere forniti due ID utente o nominativi."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -469,15 +466,19 @@ msgstr "L'alias non può essere lo stesso del soprannome."
 msgid "Group not found."
 msgstr "Gruppo non trovato."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Fai già parte di quel gruppo."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "L'amministratore ti ha bloccato l'accesso a quel gruppo."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s."
@@ -486,7 +487,10 @@ msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s."
 msgid "You are not a member of this group."
 msgstr "Non fai parte di questo gruppo."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Impossibile rimuovere l'utente %1$s dal gruppo %2$s."
@@ -515,11 +519,6 @@ msgstr "Gruppi di %s"
 msgid "groups on %s"
 msgstr "Gruppi su %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Carica file"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "Nessun parametro oauth_token fornito."
@@ -648,11 +647,13 @@ msgstr "Non puoi eliminare il messaggio di un altro utente."
 msgid "No such notice."
 msgstr "Nessun messaggio."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Non puoi ripetere un tuo messaggio."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Hai già ripetuto quel messaggio."
 
@@ -668,7 +669,7 @@ msgstr "Nessuno stato trovato con quel ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -678,7 +679,7 @@ msgstr "Troppo lungo. Lunghezza massima %d caratteri."
 msgid "Not found."
 msgstr "Non trovato."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -795,7 +796,7 @@ msgid "Preview"
 msgstr "Anteprima"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Elimina"
 
@@ -888,6 +889,8 @@ msgstr "Blocca questo utente"
 msgid "Failed to save block information."
 msgstr "Salvataggio delle informazioni per il blocco non riuscito."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -897,8 +900,8 @@ msgstr "Salvataggio delle informazioni per il blocco non riuscito."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Nessuna gruppo."
 
@@ -1075,7 +1078,7 @@ msgid "Do not delete this notice"
 msgstr "Non eliminare il messaggio"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Elimina questo messaggio"
 
@@ -2129,7 +2132,7 @@ msgstr "L'indirizzo di messaggistica è stato rimosso."
 #: actions/inbox.php:59
 #, php-format
 msgid "Inbox for %1$s - page %2$d"
-msgstr "Casella posta in arrivo di %s - pagina %2$d"
+msgstr "Casella posta in arrivo di %1$s - pagina %2$d"
 
 #: actions/inbox.php:62
 #, php-format
@@ -2170,7 +2173,7 @@ msgstr "Hai già un abbonamento a questi utenti:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2293,9 +2296,7 @@ msgstr "Devi eseguire l'accesso per iscriverti a un gruppo."
 msgid "No nickname or ID."
 msgstr "Nessun soprannome o ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s fa ora parte del gruppo %2$s"
@@ -2304,13 +2305,12 @@ msgstr "%1$s fa ora parte del gruppo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Devi eseguire l'accesso per lasciare un gruppo."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Non fai parte di quel gruppo."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s ha lasciato il gruppo %2$s"
@@ -2422,12 +2422,15 @@ msgstr "Usa questo modulo per creare un nuovo gruppo."
 msgid "New message"
 msgstr "Nuovo messaggio"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Non puoi inviare un messaggio a questo utente."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Nessun contenuto!"
 
@@ -2435,7 +2438,8 @@ msgstr "Nessun contenuto!"
 msgid "No recipient specified."
 msgstr "Nessun destinatario specificato."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Non inviarti un messaggio, piuttosto ripetilo a voce dolcemente."
@@ -2444,12 +2448,14 @@ msgstr "Non inviarti un messaggio, piuttosto ripetilo a voce dolcemente."
 msgid "Message sent"
 msgstr "Messaggio inviato"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Messaggio diretto a %s inviato."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Errore di Ajax"
 
@@ -2457,7 +2463,7 @@ msgstr "Errore di Ajax"
 msgid "New notice"
 msgstr "Nuovo messaggio"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Messaggio inviato"
 
@@ -2508,12 +2514,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
 msgstr "Messaggi che corrispondono al termine \"%1$s\" su %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Questo utente non consente i richiami oppure non ha confermato o impostato "
-"ancora il suo indirizzo email."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2589,8 +2592,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Solo URL %s attraverso HTTP semplice."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Non è un formato di dati supportato."
 
@@ -3502,7 +3505,7 @@ msgstr "Non puoi ripetere i tuoi stessi messaggi."
 msgid "You already repeated that notice."
 msgstr "Hai già ripetuto quel messaggio."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Ripetuti"
 
@@ -3537,13 +3540,11 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Feed delle risposte di %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr ""
-"Questa è l'attività delle risposte a %1$s, ma %2$s non ha ricevuto ancora "
-"alcun messaggio."
+msgstr "Questa è l'attività di %1$s, ma %2$s non ha ancora scritto nulla."
 
 #: actions/replies.php:204
 #, php-format
@@ -3555,13 +3556,13 @@ msgstr ""
 "[entrare in qualche gruppo](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Puoi provare a [richiamare %1$s](../%2$s) o [scrivere qualche cosa alla sua "
-"attenzione](%%%%action.newnotice%%%%?status_textarea=%s)."
+"[Scrivi qualche cosa](%%%%action.newnotice%%%%?status_textarea=%s) su questo "
+"argomento!"
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3735,25 +3736,15 @@ msgstr ""
 "Non hai ancora scelto alcun messaggio come preferito. Fai clic sul pulsate a "
 "forma di cuore per salvare i messaggi e rileggerli in un altro momento."
 
-#: actions/showfavorites.php:208
-#, fuzzy, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Post something interesting they "
-"would add to their favorites :)"
-msgstr ""
-"%s non ha aggiunto alcun messaggio tra i suoi preferiti. Scrivi qualche cosa "
-"di interessante in modo che lo inserisca tra i suoi preferiti. :)"
-
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s non ha aggiunto alcun messaggio tra i suoi preferiti. Perché non [crei un "
-"account](%%%%action.register%%%%) e quindi scrivi qualche cosa di "
-"interessante in modo che lo inserisca tra i suoi preferiti. :)"
+"Perché non [crei un account](%%action.register%%) e aggiungi un messaggio "
+"tra i tuoi preferiti!"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3932,13 +3923,13 @@ msgstr ""
 "potrebbe essere un buon momento per iniziare! :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Puoi provare a richiamare %1$s o [scrivere qualche cosa che attiri la sua "
-"attenzione](%%%%action.newnotice%%%%?status_textarea=%2$s)."
+"[Scrivi qualche cosa](%%%%action.newnotice%%%%?status_textarea=%s) su questo "
+"argomento!"
 
 #: actions/showstream.php:243
 #, php-format
@@ -4828,13 +4819,11 @@ msgstr ""
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
 #: classes/File.php:190
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
-"Nessun file può superare %d byte e il file inviato era di %d byte. Prova a "
-"caricarne una versione più piccola."
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
@@ -4852,12 +4841,6 @@ msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 "Un file di questa dimensione supererebbe la tua quota mensile di %d byte."
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Dimensione non valida."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4913,23 +4896,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Errore del database nell'inserire un hashtag: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problema nel salvare il messaggio. Troppo lungo."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problema nel salvare il messaggio. Utente sconosciuto."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4937,7 +4920,7 @@ msgstr ""
 "qualche minuto."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4946,29 +4929,29 @@ msgstr ""
 "nuovo tra qualche minuto."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Ti è proibito inviare messaggi su questo sito."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problema nel salvare il messaggio."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problema nel salvare la casella della posta del gruppo."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4987,18 +4970,6 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "L'utente non ha un profilo."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Impossibile salvare il messaggio del sito."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
@@ -5021,21 +4992,18 @@ msgstr "Non hai l'abbonamento!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Impossibile eliminare l'auto-abbonamento."
+msgstr "Impossibile salvare l'abbonamento."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Impossibile eliminare il token di abbonamento OMB."
+msgstr "Impossibile salvare l'abbonamento."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Impossibile eliminare l'abbonamento."
+msgstr "Impossibile salvare l'abbonamento."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5625,44 +5593,21 @@ msgstr "Comando completato"
 msgid "Command failed"
 msgstr "Comando non riuscito"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Un messaggio con quel ID non esiste"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "L'utente non ha un ultimo messaggio."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Impossibile trovare un utente col soprannome %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Impossibile trovare un utente locale col soprannome %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Questo comando non è ancora implementato."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Non ha molto senso se cerchi di richiamarti!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Richiamo inviato a %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5673,55 +5618,39 @@ msgstr ""
 "Abbonati: %2$s\n"
 "Messaggi: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Messaggio indicato come preferito."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Fai già parte di quel gruppo"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Impossibile rimuovere l'utente %1$s dal gruppo %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nome completo: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Posizione: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Pagina web: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Informazioni: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5732,144 +5661,102 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Messaggio troppo lungo: massimo %1$d caratteri, inviati %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Messaggio diretto a %s inviato."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Messaggio troppo lungo: massimo %1$d caratteri, inviati %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Errore nell'inviare il messaggio diretto."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Impossibile ripetere un proprio messaggio"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Hai già ripetuto quel messaggio"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Messaggio da %s ripetuto"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Errore nel ripetere il messaggio."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Messaggio troppo lungo: massimo %d caratteri, inviati %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Risposta a %s inviata"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Errore nel salvare il messaggio."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Specifica il nome dell'utente a cui abbonarti."
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Impossibile abbonarsi ai profili OMB attraverso un comando."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Abbonati a %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Specifica il nome dell'utente da cui annullare l'abbonamento."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Abbonamento a %s annullato"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Comando non ancora implementato."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notifiche disattivate."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Impossibile disattivare le notifiche."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notifiche attivate."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Impossibile attivare le notifiche."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Il comando di accesso è disabilitato"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Questo collegamento è utilizzabile una sola volta ed è valido solo per 2 "
-"minuti: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "%s ha annullato l'abbonamento"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Il tuo abbonamento è stato annullato."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Persona di cui hai già un abbonamento:"
 msgstr[1] "Persone di cui hai già un abbonamento:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Nessuno è abbonato ai tuoi messaggi."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Questa persona è abbonata ai tuoi messaggi:"
 msgstr[1] "Queste persone sono abbonate ai tuoi messaggi:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Non fai parte di alcun gruppo."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Non fai parte di questo gruppo:"
 msgstr[1] "Non fai parte di questi gruppi:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6536,7 +6423,7 @@ msgstr ""
 "iniziare una conversazione con altri utenti. Altre persone possono mandare "
 "messaggi riservati solamente a te."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "via"
 
@@ -6624,11 +6511,11 @@ msgstr "Invia un messaggio diretto"
 msgid "To"
 msgstr "A"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caratteri disponibili"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Invia"
@@ -6637,28 +6524,28 @@ msgstr "Invia"
 msgid "Send a notice"
 msgstr "Invia un messaggio"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Cosa succede, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Allega"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Allega un file"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Condividi la mia posizione"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Non condividere la mia posizione"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6695,23 +6582,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "presso"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "in una discussione"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Ripetuto da"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Rispondi a questo messaggio"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Rispondi"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Messaggio ripetuto"
 
@@ -7038,11 +6929,6 @@ msgstr "Annulla l'abbonamento da questo utente"
 msgid "Unsubscribe"
 msgstr "Disabbonati"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "L'utente %s (%d) non ha un profilo."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Modifica immagine"
@@ -7090,56 +6976,56 @@ msgid "Moderator"
 msgstr "Moderatore"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "pochi secondi fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "circa un minuto fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "circa %d minuti fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "circa un'ora fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "circa %d ore fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "circa un giorno fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "circa %d giorni fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "circa un mese fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "circa %d mesi fa"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "circa un anno fa"
 
@@ -7152,8 +7038,3 @@ msgstr "%s non è un colore valido."
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s non è un colore valido. Usa 3 o 6 caratteri esadecimali."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Messaggio troppo lungo: massimo %1$d caratteri, inviati %2$d."
index fab6b3d780b3e36a4c350bd73cafce8bcb021faf..c97923aa4f47e0ce3303ce026243212dc4bc9705 100644 (file)
@@ -11,12 +11,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:41+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:41+0000\n"
 "Language-Team: Japanese\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ja\n"
 "X-Message-Group: out-statusnet\n"
@@ -45,10 +45,9 @@ msgstr "匿名ユーザー(ログインしていません)がサイトを見る
 
 #. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
 #: actions/accessadminpanel.php:167
-#, fuzzy
 msgctxt "LABEL"
 msgid "Private"
-msgstr "ã\83\97ã\83©ã\82¤ã\83\99ã\83¼ã\83\88"
+msgstr "ã\83\97ã\83©ã\82¤ã\83\90ã\82·ã\83¼"
 
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
@@ -75,25 +74,13 @@ msgstr "閉じられた"
 msgid "Save access settings"
 msgstr "アクセス設定の保存"
 
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "保存"
-
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "ã\81\9dã\81®ã\82\88ã\81\86ã\81ªã\83\9aã\83¼ã\82¸はありません。"
+msgstr "ã\81\9dã\81®ã\82\88ã\81\86ã\81ªã\82¿ã\82°はありません。"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -113,7 +100,7 @@ msgstr "そのようなページはありません。"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "そのようなユーザはいません。"
@@ -170,22 +157,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"プロフィールから [%1$s さんに合図](../%2$s) したり、[知らせたいことについて投"
-"稿](%%%%action.newnotice%%%%?status_textarea=%3$s) したりできます。"
+"最初の [このトピック投稿](%%%%action.newnotice%%%%?status_textarea=%s) をして"
+"ください!"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"[アカウントを登録](%%%%action.register%%%%) して %s さんに合図したり、お知ら"
-"ã\81\9bã\82\92é\80\81ã\81£ã\81¦ã\81¿ã\81¾ã\81\9bã\82\93ã\81\8bã\80\82"
+"なぜ [アカウント登録](%%action.register%%) しないのですか。そして最初の投稿を"
+"ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84!"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -240,13 +227,10 @@ msgid "This method requires a POST."
 msgstr "このメソッドには POST が必要です。"
 
 #: actions/apiaccountupdatedeliverydevice.php:106
-#, fuzzy
 msgid ""
 "You must specify a parameter named 'device' with a value of one of: sms, im, "
 "none."
 msgstr ""
-"「device」という名前の引数を、次の中から値を選んで、指定する必要があります: "
-"sms, im, none"
 
 #: actions/apiaccountupdatedeliverydevice.php:133
 msgid "Could not update user."
@@ -353,7 +337,8 @@ msgstr "そのIDのステータスが見つかりません。"
 msgid "This status is already a favorite."
 msgstr "このステータスはすでにお気に入りです。"
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "お気に入りを作成できません。"
 
@@ -366,9 +351,8 @@ msgid "Could not delete favorite."
 msgstr "お気に入りを取り消すことができません。"
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "ã\83¦ã\83¼ã\82¶ã\82\92ã\83\95ã\82©ã\83­ã\83¼できませんでした: ユーザが見つかりません。"
+msgstr "ã\83¦ã\83¼ã\82¶ã\81®ã\83\95ã\82©ã\83­ã\83¼ã\82\92å\81\9cæ­¢できませんでした: ユーザが見つかりません。"
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -385,9 +369,8 @@ msgid "You cannot unfollow yourself."
 msgstr "自分自身をフォロー停止することはできません。"
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "ふたつのIDかスクリーンネームが必要です。"
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -434,7 +417,7 @@ msgstr "フルネームが長すぎます。(255字まで)"
 #: actions/newapplication.php:172
 #, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "記述が長すぎます。(最長140字)"
+msgstr "記述が長すぎます。(最長%d字)"
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -448,11 +431,6 @@ msgstr "場所が長すぎます。(255字まで)"
 msgid "Too many aliases! Maximum %d."
 msgstr "別名が多すぎます! 最大 %d。"
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "不正な別名: \"%s\""
-
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
 #, php-format
@@ -467,19 +445,22 @@ msgstr "別名はニックネームと同じではいけません。"
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "グループが見つかりません!"
+msgstr "見つかりません。"
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "すでにこのグループのメンバーです。"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "管理者によってこのグループからブロックされています。"
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "ユーザ %1$s はグループ %2$s に参加できません。"
@@ -488,7 +469,10 @@ msgstr "ユーザ %1$s はグループ %2$s に参加できません。"
 msgid "You are not a member of this group."
 msgstr "このグループのメンバーではありません。"
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "ユーザ %1$s をグループ %2$s から削除できません。"
@@ -499,12 +483,6 @@ msgstr "ユーザ %1$s をグループ %2$s から削除できません。"
 msgid "%s's groups"
 msgstr "%s のグループ"
 
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "グループ %s はメンバー"
-
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
@@ -517,11 +495,6 @@ msgstr "%s グループ"
 msgid "groups on %s"
 msgstr "%s 上のグループ"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "ファイルアップロード"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "oauth_token パラメータは提供されませんでした。"
@@ -646,11 +619,13 @@ msgstr "他のユーザのステータスを消すことはできません。"
 msgid "No such notice."
 msgstr "そのようなつぶやきはありません。"
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "あなたのつぶやきを繰り返せません。"
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "すでにつぶやきを繰り返しています。"
 
@@ -666,17 +641,17 @@ msgstr "そのIDでのステータスはありません。"
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
-msgstr "長すぎます。つぶやきは最大 140 字までです。"
+msgstr "長すぎます。つぶやきは最大 %d 字までです。"
 
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "見つかりません。"
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "つぶやきは URL を含めて最大 %d 字までです。"
@@ -791,7 +766,7 @@ msgid "Preview"
 msgstr "プレビュー"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "削除"
 
@@ -803,11 +778,6 @@ msgstr "アップロード"
 msgid "Crop"
 msgstr "切り取り"
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "プロファイル記述がありません。"
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr "あなたのアバターとなるイメージを正方形で指定"
@@ -836,17 +806,6 @@ msgstr "そのユーザはすでにブロック済みです。"
 msgid "Block user"
 msgstr "ユーザをブロック"
 
-#: actions/block.php:138
-#, fuzzy
-msgid ""
-"Are you sure you want to block this user? Afterwards, they will be "
-"unsubscribed from you, unable to subscribe to you in the future, and you "
-"will not be notified of any @-replies from them."
-msgstr ""
-"あなたはこのユーザをブロックしたいのを確信していますか? その後、それらはあな"
-"たからフォローを外されるでしょう、将来、あなたにフォローできないで、あなたは"
-"どんな @-返信 についてもそれらから通知されないでしょう。"
-
 #. TRANS: Button label on the user block form.
 #. TRANS: Button label on the delete application form.
 #. TRANS: Button label on the delete notice form.
@@ -855,10 +814,9 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "No"
+msgstr "ノート"
 
 #. TRANS: Submit button title for 'No' when blocking a user.
 #. TRANS: Submit button title for 'No' when deleting a user.
@@ -866,19 +824,6 @@ msgstr "No"
 msgid "Do not block this user"
 msgstr "このユーザをアンブロックする"
 
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Yes"
-
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
 msgid "Block this user"
@@ -888,6 +833,8 @@ msgstr "このユーザをブロックする"
 msgid "Failed to save block information."
 msgstr "ブロック情報の保存に失敗しました。"
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -897,8 +844,8 @@ msgstr "ブロック情報の保存に失敗しました。"
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "そのようなグループはありません。"
 
@@ -930,9 +877,9 @@ msgstr "このユーザをアンブロックする"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "投稿"
+msgstr "%s 上のグループ"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -948,9 +895,9 @@ msgstr "その確認コードはあなたのものではありません!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "不明なアドレスタイプ %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -1019,16 +966,6 @@ msgstr "あなたのセッショントークンに関する問題がありまし
 msgid "Delete application"
 msgstr "アプリケーション削除"
 
-#: actions/deleteapplication.php:149
-#, fuzzy
-msgid ""
-"Are you sure you want to delete this application? This will clear all data "
-"about the application from the database, including all existing user "
-"connections."
-msgstr ""
-"あなたは本当にこのユーザを削除したいですか? これはバックアップなしでデータ"
-"ベースからユーザに関するすべてのデータをクリアします。"
-
 #. TRANS: Submit button title for 'No' when deleting an application.
 #: actions/deleteapplication.php:158
 msgid "Do not delete this application"
@@ -1076,7 +1013,7 @@ msgid "Do not delete this notice"
 msgstr "このつぶやきを削除できません。"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "このつぶやきを削除"
 
@@ -1121,9 +1058,9 @@ msgid "Invalid logo URL."
 msgstr "不正なロゴ URL"
 
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "テーマが利用できません: %s"
+msgstr "IM が利用不可。"
 
 #: actions/designadminpanel.php:426
 msgid "Change logo"
@@ -1145,11 +1082,6 @@ msgstr "サイトテーマ"
 msgid "Theme for the site."
 msgstr "サイトのテーマ"
 
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "サイトテーマ"
-
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
@@ -1395,10 +1327,9 @@ msgstr "現在確認されているメールアドレス。"
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "å\89\8aé\99¤"
+msgstr "å\9b\9e復"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1408,17 +1339,6 @@ msgstr ""
 "このアドレスは承認待ちです。受信ボックス(とスパムボックス)に追加の指示が書"
 "かれたメッセージが届いていないか確認してください。"
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "中止"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1429,10 +1349,9 @@ msgstr "メールアドレス、\"UserName@example.org\" のような"
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "追加"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1455,16 +1374,14 @@ msgstr "投稿のための新しいEメールアドレスを作ります; 古い
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "New"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "設定"
+msgstr "メールアドレス"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1504,12 +1421,6 @@ msgstr "メールでつぶやきを投稿したい。"
 msgid "Publish a MicroID for my email address."
 msgstr "私のメールアドレスのためにMicroIDを発行してください。"
 
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "デザイン設定が保存されました。"
-
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
@@ -1562,17 +1473,10 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "承認待ちのものはありません。"
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "その IM アドレスは不正です。"
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "承認作業が中止されました。"
+msgstr "承認待ちのものはありません。"
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1582,9 +1486,8 @@ msgstr "これはあなたのメールアドレスではありません。"
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "アドレスは削除されました。"
+msgstr "入ってくるメールアドレスは削除されました。"
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1723,11 +1626,6 @@ msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 "リモートサービスは、不明なバージョンの OMB プロトコルを使用しています。"
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "リモートプロファイル更新エラー"
-
 #: actions/getfile.php:79
 msgid "No such file."
 msgstr "そのようなファイルはありません。"
@@ -1736,25 +1634,10 @@ msgstr "そのようなファイルはありません。"
 msgid "Cannot read file."
 msgstr "ファイルを読み込めません。"
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "不正なトークン。"
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
-#: actions/grantrole.php:75
-#, fuzzy
-msgid "You cannot grant user roles on this site."
-msgstr "あなたはこのサイトのサンドボックスユーザができません。"
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "ユーザは既に黙っています。"
-
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
 #: lib/profileformaction.php:79
@@ -2047,9 +1930,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "設定"
+msgstr "設定が保存されました。"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2119,17 +2001,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "その IM アドレスは不正です。"
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "メール承認を削除できません"
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "承認作業が中止されました。"
+msgstr "確認コードがありません。"
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2139,9 +2014,8 @@ msgstr "その Jabber ID はあなたのものではありません。"
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "アドレスは削除されました。"
+msgstr "入ってくるメールアドレスは削除されました。"
 
 #: actions/inbox.php:59
 #, php-format
@@ -2163,9 +2037,9 @@ msgid "Invites have been disabled."
 msgstr "招待は無効にされました。"
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "他のユーザが%sを使用するよう誘うためにはログインしなければなりません。"
+msgstr "グループを編集するにはログインしていなければなりません。"
 
 #: actions/invite.php:72
 #, php-format
@@ -2186,10 +2060,10 @@ msgstr "すでにこれらのユーザをフォローしています:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
-msgstr ""
+msgstr "%1$s (%2$s)"
 
 #: actions/invite.php:136
 msgid ""
@@ -2234,10 +2108,9 @@ msgstr "任意に招待にパーソナルメッセージを加えてください
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "投稿"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2307,14 +2180,7 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "グループに入るためにはログインしなければなりません。"
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "ニックネームがありません。"
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s はグループ %2$s に参加しました"
@@ -2323,13 +2189,12 @@ msgstr "%1$s はグループ %2$s に参加しました"
 msgid "You must be logged in to leave a group."
 msgstr "グループから離れるにはログインしていなければなりません。"
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "あなたはそのグループのメンバーではありません。"
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s はグループ %2$s に残りました。"
@@ -2374,18 +2239,11 @@ msgstr ""
 "セキュリティー上の理由により、設定を変更する前にユーザ名とパスワードを入力し"
 "て下さい。"
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "ユーザ名とパスワードでログイン"
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"ユーザ名とパスワードで、ログインしてください。 まだユーザ名を持っていません"
-"か? 新しいアカウントを [登録](%%action.register%%)。"
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
@@ -2407,9 +2265,8 @@ msgid "Can't make %1$s an admin for group %2$s."
 msgstr "%1$s をグループ %2$s の管理者にすることはできません"
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "ç\8f¾å\9c¨ã\81®ã\82¹ã\83\86ã\83¼ã\82¿ã\82¹ã\81¯ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93"
+msgstr "çµ\90æ\9e\9cã\81ªã\81\97ã\80\82"
 
 #: actions/newapplication.php:52
 msgid "New Application"
@@ -2443,12 +2300,15 @@ msgstr "このフォームを使って新しいグループを作成します。
 msgid "New message"
 msgstr "新しいメッセージ"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "このユーザにメッセージを送ることはできません。"
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "コンテンツがありません!"
 
@@ -2456,7 +2316,8 @@ msgstr "コンテンツがありません!"
 msgid "No recipient specified."
 msgstr "受取人が書かれていません。"
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2466,12 +2327,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "メッセージを送りました"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "ダイレクトメッセージを %s  に送りました"
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax エラー"
 
@@ -2479,7 +2342,7 @@ msgstr "Ajax エラー"
 msgid "New notice"
 msgstr "新しいつぶやき"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "つぶやきを投稿しました"
 
@@ -2529,12 +2392,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
 msgstr "\"%2$s\" 上の検索語 \"$1$s\" に一致するすべての更新"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"このユーザは、合図を許可していないか、確認されていた状態でないか、メール設定"
-"をしていません。"
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2574,9 +2434,9 @@ msgid "You are not a user of that application."
 msgstr "あなたはそのアプリケーションのユーザではありません。"
 
 #: actions/oauthconnectionssettings.php:186
-#, fuzzy, php-format
+#, php-format
 msgid "Unable to revoke access for app: %s."
-msgstr "アプリケーションのための取消しアクセスができません: "
+msgstr ""
 
 #: actions/oauthconnectionssettings.php:198
 msgid "You have not authorized any applications to use your account."
@@ -2589,9 +2449,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr "開発者は彼らのアプリケーションのために登録設定を編集できます "
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "ã\81¤ã\81¶ã\82\84ã\81\8dã\81«ã\81¯ã\83\97ã\83­ã\83\95ã\82¡ã\82¤ã\83«ã\81¯ã\81\82ã\82\8aません。"
+msgstr "ã\83¦ã\83¼ã\82¶ã\81¯ã\83\97ã\83­ã\83\95ã\82£ã\83¼ã\83«ã\82\92ã\82\82ã\81£ã\81¦ã\81\84ません。"
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2600,9 +2459,9 @@ msgstr "%2$s における %1$s のステータス"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "内容種別 "
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2611,8 +2470,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "サポートされていないデータ形式。"
 
@@ -2763,24 +2622,19 @@ msgid "Path and server settings for this StatusNet site."
 msgstr "パスと StatusNet サイトのサーバー設定"
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "テーマディレクトリが読み込めません: %s"
+msgstr "テーマディレクトリ"
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "アバターディレクトリに書き込みできません: %s"
+msgstr "アバターディレクトリ"
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "バックグラウンドディレクトリに書き込みできません : %s"
-
-#: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
-msgid "Locales directory not readable: %s."
-msgstr "場所ディレクトリが読み込めません: %s"
+msgstr "バックグラウンドディレクトリ"
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2920,9 +2774,9 @@ msgid "People search"
 msgstr "ピープルサーチ"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "æ­£ã\81\97ã\81\84ã\82¿ã\82°ã\81§ã\81¯ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ï¼\9a %s"
+msgstr "æ\9c\89å\8a¹ã\81ªã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\81§ã\81¯ã\81\82ã\82\8aã\81¾ã\81\9bã\82\93ã\80\82"
 
 #: actions/peopletag.php:142
 #, php-format
@@ -2930,9 +2784,8 @@ msgid "Users self-tagged with %1$s - page %2$d"
 msgstr "ユーザ自身がつけたタグ %1$s  - ページ %2$d"
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "ä¸\8dæ­£ã\81ªã\81¤ã\81¶ã\82\84ã\81\8då\86\85容"
+msgstr "ä¸\8dæ­£ã\81ªã\83\88ã\83¼ã\82¯ã\83³ã\80\82"
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3040,7 +2893,7 @@ msgstr "自分をフォローしている者を自動的にフォローする (B
 #: actions/profilesettings.php:228 actions/register.php:230
 #, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "自己紹介が長すぎます (最長140文字)。"
+msgstr "自己紹介が長すぎます (最長%d文字)。"
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
@@ -3077,9 +2930,9 @@ msgid "Settings saved."
 msgstr "設定が保存されました。"
 
 #: actions/public.php:83
-#, fuzzy, php-format
+#, php-format
 msgid "Beyond the page limit (%s)."
-msgstr "ページ制限を超えました (%s)"
+msgstr ""
 
 #: actions/public.php:92
 msgid "Could not retrieve public stream."
@@ -3339,13 +3192,10 @@ msgid "Invalid username or password."
 msgstr "不正なユーザ名またはパスワード。"
 
 #: actions/register.php:350
-#, fuzzy
 msgid ""
 "With this form you can create a new account. You can then post notices and "
 "link up to friends and colleagues. "
 msgstr ""
-"このフォームで新しいアカウントを作成できます。 次につぶやきを投稿して、友人や"
-"同僚にリンクできます。 "
 
 #: actions/register.php:432
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@@ -3397,11 +3247,11 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
-msgstr "個人情報を除く: パスワード、メールアドレス、IMアドレス、電話番号"
+msgstr ""
 
 #: actions/register.php:583
 #, php-format
@@ -3520,7 +3370,7 @@ msgstr "自分のつぶやきは繰り返せません。"
 msgid "You already repeated that notice."
 msgstr "すでにそのつぶやきを繰り返しています。"
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "繰り返された"
 
@@ -3555,13 +3405,11 @@ msgid "Replies feed for %s (Atom)"
 msgstr "%s の返信フィード (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr ""
-"これは %1$s への返信を表示したタイムラインです、しかし %2$s はまだつぶやきを"
-"受け取っていません。"
+msgstr "これは %1$s のタイムラインですが、%2$s はまだなにも投稿していません。"
 
 #: actions/replies.php:204
 #, php-format
@@ -3573,29 +3421,19 @@ msgstr ""
 "ループに加わる](%%action.groups%%)ことができます。"
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"あなたは [%1$s に合図](../%2$s) するか、[その人宛てに何かを投稿](%%%%action."
-"newnotice%%%%?status_textarea=%3$s)することができます。"
+"最初の [このトピック投稿](%%%%action.newnotice%%%%?status_textarea=%s) をして"
+"ください!"
 
 #: actions/repliesrss.php:72
 #, php-format
 msgid "Replies to %1$s on %2$s!"
 msgstr "%2$s 上の %1$s への返信!"
 
-#: actions/revokerole.php:75
-#, fuzzy
-msgid "You cannot revoke user roles on this site."
-msgstr "あなたはこのサイトでユーザを黙らせることができません。"
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "合っているプロフィールのないユーザ"
-
 #: actions/rsd.php:146 actions/version.php:159
 msgid "StatusNet"
 msgstr "StatusNet"
@@ -3719,11 +3557,6 @@ msgstr ""
 "注意: 私たちはHMAC-SHA1署名をサポートします。 私たちは平文署名メソッドをサ"
 "ポートしません。"
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "本当にこのつぶやきを削除しますか?"
-
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
@@ -3757,25 +3590,15 @@ msgstr ""
 "加するあなたがそれらがお気に入りのつぶやきのときにお気に入りボタンをクリック"
 "するか、またはそれらの上でスポットライトをはじいてください。"
 
-#: actions/showfavorites.php:208
-#, fuzzy, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Post something interesting they "
-"would add to their favorites :)"
-msgstr ""
-"%s はまだ彼のお気に入りに少しのつぶやきも加えていません。 彼らがお気に入りに"
-"加えることおもしろいものを投稿してください:)"
-
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s はまだお気に入りに少しのつぶやきも加えていません。 なぜ [アカウント登録](%"
-"%%%action.register%%%%) しないのですか。そして、彼らがお気に入りに加えるおも"
-"しろい何かを投稿しませんか:)"
+"なぜ [アカウント登録](%%action.register%%) しないのですか、そして、あなたのお"
+"気に入りにつぶやきを加える最初になりましょう!"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3954,13 +3777,13 @@ msgstr ""
 "いまは始める良い時でしょう:)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"あなたは、%1$s に合図するか、[またはその人宛に何かを投稿](%%%%action."
-"newnotice%%%%?status_textarea=%2$s) することができます。"
+"最初の [このトピック投稿](%%%%action.newnotice%%%%?status_textarea=%s) をして"
+"ください!"
 
 #: actions/showstream.php:243
 #, php-format
@@ -4001,9 +3824,8 @@ msgid "User is already silenced."
 msgstr "ユーザは既に黙っています。"
 
 #: actions/siteadminpanel.php:69
-#, fuzzy
 msgid "Basic settings for this StatusNet site"
-msgstr "この StatusNet サイトの基本設定。"
+msgstr "この StatusNet サイトのデザイン設定。"
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
@@ -4019,14 +3841,12 @@ msgid "Unknown language \"%s\"."
 msgstr "不明な言語 \"%s\""
 
 #: actions/siteadminpanel.php:165
-#, fuzzy
 msgid "Minimum text limit is 0 (unlimited)."
-msgstr "最小のテキスト制限は140字です。"
+msgstr ""
 
 #: actions/siteadminpanel.php:171
-#, fuzzy
 msgid "Dupe limit must be one or more seconds."
-msgstr "デュープ制限は1秒以上でなければなりません。"
+msgstr ""
 
 #: actions/siteadminpanel.php:221
 msgid "General"
@@ -4076,9 +3896,8 @@ msgid "Default timezone for the site; usually UTC."
 msgstr "サイトのデフォルトタイムゾーン; 通常UTC。"
 
 #: actions/siteadminpanel.php:262
-#, fuzzy
 msgid "Default language"
-msgstr "ã\83\87ã\83\95ã\82©ã\83«ã\83\88ã\82µã\82¤ã\83\88言語"
+msgstr "ã\81\94å¸\8cæ\9c\9bã\81®言語"
 
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
@@ -4106,39 +3925,14 @@ msgstr ""
 "どれくらい長い間(秒)、ユーザは、再び同じものを投稿するのを待たなければならな"
 "いか。"
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "サイトつぶやき"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "新しいメッセージ"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "あなたのデザイン設定を保存できません。"
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "サイトつぶやき"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "サイトつぶやき"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
 msgid "SMS settings"
@@ -4157,12 +3951,6 @@ msgstr ""
 msgid "SMS is not available."
 msgstr "SMS は利用できません。"
 
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "IMアドレス"
-
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
 msgid "Current confirmed SMS-enabled phone number."
@@ -4183,13 +3971,6 @@ msgstr "確認コード"
 msgid "Enter the code you received on your phone."
 msgstr "あなたがあなたの電話で受け取ったコードを入れてください。"
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "パスワード確認"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
@@ -4202,9 +3983,8 @@ msgstr "電話番号、句読点またはスペースがない、市街番号付
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "設定"
+msgstr "設定が保存されました。"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4215,12 +3995,6 @@ msgstr ""
 "SMSを通してつぶやきを私に送ってください; 私は、私のキャリアから法外な料金を被"
 "るかもしれないのを理解しています。"
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "設定が保存されました。"
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
@@ -4257,9 +4031,8 @@ msgstr "それは間違った確認番号です。"
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "承認作業が中止されました。"
+msgstr "SMS確認"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4267,12 +4040,6 @@ msgstr "承認作業が中止されました。"
 msgid "That is not your phone number."
 msgstr "それはあなたの電話番号ではありません。"
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "SMS 電話番号"
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
@@ -4307,9 +4074,8 @@ msgid "Snapshots"
 msgstr "スナップショット"
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "ã\82µã\82¤ã\83\88設å®\9aã\81®å¤\89æ\9b´"
+msgstr "ã\82»ã\83\83ã\82·ã\83§ã\83³è¨­å®\9a"
 
 #: actions/snapshotadminpanel.php:127
 msgid "Invalid snapshot run value."
@@ -4355,11 +4121,6 @@ msgstr "レポート URL"
 msgid "Snapshots will be sent to this URL"
 msgstr "このURLにスナップショットを送るでしょう"
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "サイト設定の保存"
-
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
 msgstr "あなたはそのプロファイルにフォローされていません。"
@@ -4373,16 +4134,6 @@ msgstr "フォローを保存できません。"
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "そのようなファイルはありません。"
-
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "あなたはそのプロファイルにフォローされていません。"
-
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "フォローしている"
@@ -4557,9 +4308,8 @@ msgid "User is not silenced."
 msgstr "ユーザはサイレンスではありません。"
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "ã\83ªã\82¯ã\82¨ã\82¹ã\83\88å\86\85ã\81«ã\83\97ã\83­ã\83\95ã\82¡ã\82¤ã\83«IDã\81\8cã\81\82ã\82\8aません。"
+msgstr "ã\83­ã\82°ã\82¤ã\83³ã\83\88ã\83¼ã\82¯ã\83³ã\81\8cè¦\81æ±\82ã\81\95ã\82\8cã\81¦ã\81\84ません。"
 
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
@@ -4573,13 +4323,6 @@ msgstr ""
 "リスニーストリームライセンス ‘%1$s’ は、サイトライセンス ‘%2$s’ と互換性があ"
 "りません。"
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "ユーザ"
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr "この StatusNet サイトのユーザ設定。"
@@ -4757,9 +4500,8 @@ msgstr ""
 "方法をカスタマイズしてください。"
 
 #: actions/userdesignsettings.php:282
-#, fuzzy
 msgid "Enjoy your hotdog!"
-msgstr "あなたのhotdogを楽しんでください!"
+msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
@@ -4860,14 +4602,11 @@ msgstr ""
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
 #: classes/File.php:190
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
-"どんなファイルも %d バイトより大きくてはいけません、そして、あなたが送った"
-"ファイルは %d バイトでした。より小さいバージョンをアップロードするようにして"
-"ください。"
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
@@ -4885,12 +4624,6 @@ msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 "これほど大きいファイルはあなたの%dバイトの毎月の割当てを超えているでしょう。"
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "不正なサイズ。"
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4906,12 +4639,6 @@ msgstr "グループの一部ではありません。"
 msgid "Group leave failed."
 msgstr "グループ脱退に失敗しました。"
 
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "グループを更新できません。"
-
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
@@ -4947,30 +4674,30 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "ハッシュタグ追加 DB エラー: %s"
+msgstr "OAuth アプリケーションユーザの追加時DBエラー。"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "つぶやきを保存する際に問題が発生しました。長すぎです。"
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "つぶやきを保存する際に問題が発生しました。不明なユーザです。"
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "多すぎるつぶやきが速すぎます; 数分間の休みを取ってから再投稿してください。"
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4979,33 +4706,26 @@ msgstr ""
 "い。"
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "あなたはこのサイトでつぶやきを投稿するのが禁止されています。"
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "つぶやきを保存する際に問題が発生しました。"
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "グループ受信箱を保存する際に問題が発生しました。"
 
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr ""
-
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
 #: classes/Profile.php:737
@@ -5020,17 +4740,10 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "ユーザはプロフィールをもっていません。"
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "ã\81\82ã\81ªã\81\9fã\81®ã\83\87ã\82¶ã\82¤ã\83³è¨­å®\9aを保存できません。"
+msgstr "ã\82¿ã\82°ã\82\92を保存できません。"
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
@@ -5054,21 +4767,18 @@ msgstr "フォローしていません!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "自己フォローを削除できません。"
+msgstr "フォローを保存できません。"
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "フォローを削除できません"
+msgstr "フォローを保存できません。"
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "フォローを削除できません"
+msgstr "フォローを保存できません。"
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5084,21 +4794,14 @@ msgstr "グループを作成できません。"
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "ã\82°ã\83«ã\83¼ã\83\97ã\83¡ã\83³ã\83\90ã\83¼ã\82·ã\83\83ã\83\97ã\82\92ã\82»ã\83\83ã\83\88できません。"
+msgstr "ã\82°ã\83«ã\83¼ã\83\97ã\82\92ä½\9cæ\88\90できません。"
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
 msgid "Could not set group membership."
 msgstr "グループメンバーシップをセットできません。"
 
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "フォローを保存できません。"
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
@@ -5152,31 +4855,21 @@ msgstr "プライマリサイトナビゲーション"
 
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr "パーソナルプロファイルと友人のタイムライン"
-
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "パーソナル"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "ã\83¡ã\83¼ã\83«ã\82¢ã\83\89ã\83¬ã\82¹ã\80\81ã\82¢ã\83\90ã\82¿ã\83¼ã\80\81ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\80\81ã\83\97ã\83­ã\83\91ã\83\86ã\82£の変更"
+msgstr "ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89の変更"
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "サービスへ接続"
+msgstr "接続"
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
@@ -5185,98 +4878,39 @@ msgstr "接続"
 
 #. TRANS: Tooltip for menu option "Admin"
 #: lib/action.php:458
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change site configuration"
-msgstr "サイト設定の変更"
-
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "管理者"
-
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "友人や同僚が %s で加わるよう誘ってください。"
-
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "招待"
+msgstr "基本サイト設定"
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
-msgstr "ã\82µã\82¤ã\83\88ã\81\8bã\82\89ã\83­ã\82°ã\82¢ã\82¦ã\83\88"
+msgstr "ã\82µã\82¤ã\83\88ã\81®ã\83\86ã\83¼ã\83\9e"
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "ã\83­ã\82°ã\82¢ã\82¦ã\83\88"
+msgstr "ã\83­ã\82´"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "アカウントを作成"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "登録"
-
-#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:488
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Login to the site"
-msgstr "サイトへログイン"
-
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "ログイン"
+msgstr "新しいグループを作成"
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "助けて!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "ヘルプ"
 
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr "人々かテキストを検索"
-
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "検索"
+msgstr "もっとグループを検索"
 
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
@@ -5345,13 +4979,11 @@ msgstr "StatusNet ソフトウェアライセンス"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** は [%%site.broughtby%%](%%site.broughtbyurl%%) が提供するマ"
-"イクロブログサービスです。 "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5466,25 +5098,11 @@ msgstr "デザイン設定を削除できません。"
 msgid "Basic site configuration"
 msgstr "基本サイト設定"
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "サイト"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:358
 msgid "Design configuration"
 msgstr "デザイン設定"
 
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:360
-#, fuzzy
-msgctxt "MENU"
-msgid "Design"
-msgstr "デザイン"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
 msgid "User configuration"
@@ -5510,18 +5128,6 @@ msgstr "パス設定"
 msgid "Sessions configuration"
 msgstr "セッション設定"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "サイトつぶやき"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "パス設定"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
@@ -5612,18 +5218,6 @@ msgstr ""
 msgid "Cancel"
 msgstr "中止"
 
-#. TRANS: Application access type
-#: lib/applicationlist.php:136
-#, fuzzy
-msgid "read-write"
-msgstr "リードライト"
-
-#. TRANS: Application access type
-#: lib/applicationlist.php:138
-#, fuzzy
-msgid "read-only"
-msgstr "リードオンリー"
-
 #. TRANS: Used in application list. %1$s is a modified date, %2$s is access type (read-write or read-only)
 #: lib/applicationlist.php:144
 #, php-format
@@ -5632,10 +5226,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "å\8f\96æ¶\88ã\81\97"
+msgstr "å\9b\9e復"
 
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
@@ -5680,44 +5273,21 @@ msgstr "コマンド完了"
 msgid "Command failed"
 msgstr "コマンド失敗"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "その ID によるつぶやきは存在していません"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "ユーザはまだつぶやいていません"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "ユーザを更新できません"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "ユーザを更新できません"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "すみません、このコマンドはまだ実装されていません。"
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "それは自分自身への合図で多くは意味がありません!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "%s へ合図を送りました"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5728,55 +5298,39 @@ msgstr ""
 "フォローされている: %2$s\n"
 "つぶやき: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "お気に入りにされているつぶやき。"
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "あなたは既にそのグループに参加しています。"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "ユーザ %1$s はグループ %2$s に参加できません。"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "ユーザ %1$s をグループ %2$s から削除できません。"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "フルネーム: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "場所: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "ホームページ: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "About: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5785,140 +5339,94 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "メッセージが長すぎます - 最大 %1$d 字、あなたが送ったのは %2$d。"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "ã\83\80ã\82¤ã\83¬ã\82¯ã\83\88ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\82\92 %s  ã\81«é\80\81ã\82\8aã\81¾ã\81\97ã\81\9f"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "ã\83¡ã\83\83ã\82»ã\83¼ã\82¸ã\81\8cé\95·ã\81\99ã\81\8eã\81¾ã\81\99 - æ\9c\80大 %1$d å­\97ã\80\81ã\81\82ã\81ªã\81\9fã\81\8cé\80\81ã\81£ã\81\9fã\81®ã\81¯ %2$dã\80\82"
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "ダイレクトメッセージ送信エラー。"
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "自分のつぶやきを繰り返すことはできません"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "すでにこのつぶやきは繰り返されています"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "%s からつぶやきが繰り返されています"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "つぶやき繰り返しエラー"
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "つぶやきが長すぎます - 最大 %d 字、あなたが送ったのは %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "%s へ返信を送りました"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "つぶやき保存エラー。"
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "フォローするユーザの名前を指定してください"
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "あなたはそのプロファイルにフォローされていません。"
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "%s をフォローしました"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "フォローをやめるユーザの名前を指定してください"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "%s のフォローをやめる"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "コマンドはまだ実装されていません。"
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "通知オフ。"
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "通知をオフできません。"
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "通知オン。"
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "通知をオンできません。"
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "ログインコマンドが無効になっています。"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr "このリンクは、かつてだけ使用可能であり、2分間だけ良いです: %s"
-
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "%s のフォローをやめる"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "あなたはだれにもフォローされていません。"
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "あなたはこの人にフォローされています:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "誰もフォローしていません。"
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "この人はあなたにフォローされている:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "あなたはどのグループのメンバーでもありません。"
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "あなたはこのグループのメンバーではありません:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6264,7 +5772,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6277,16 +5785,6 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1$s は %2$s であなたのつぶやきを聞いています。\n"
-"\n"
-"%3$s\n"
-"\n"
-"%4$s%5$s%6$s\n"
-"忠実である、あなたのもの、\n"
-"%7$s.\n"
-"\n"
-"----\n"
-"%8$s でメールアドレスか通知オプションを変えてください。\n"
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
@@ -6302,7 +5800,7 @@ msgstr "%s へ投稿のための新しいメールアドレス"
 
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You have a new posting address on %1$s.\n"
 "\n"
@@ -6313,14 +5811,6 @@ msgid ""
 "Faithfully yours,\n"
 "%4$s"
 msgstr ""
-"あなたは %1$s に関する新しい投稿アドレスを持っています。\n"
-"\n"
-"%2$s にメールを送って、新しいメッセージを投稿してください。\n"
-"\n"
-"%3$s でより多くのメール指示。\n"
-"\n"
-"忠実である、あなたのもの、\n"
-"%4$s"
 
 #. TRANS: Subject line for SMS-by-email notification messages
 #: lib/mail.php:433
@@ -6333,12 +5823,6 @@ msgstr "%s の状態"
 msgid "SMS confirmation"
 msgstr "SMS確認"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "この電話番号は確認待ちです。"
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6347,7 +5831,7 @@ msgstr "あなたは %s に合図されています"
 
 #. TRANS: Body for 'nudge' notification email
 #: lib/mail.php:489
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s (%2$s) is wondering what you are up to these days and is inviting you "
 "to post some news.\n"
@@ -6361,17 +5845,6 @@ msgid ""
 "With kind regards,\n"
 "%4$s\n"
 msgstr ""
-"%1$s ($2$s) は、最近まであなたが何であるかと思っていて、あなたが何らかの"
-"ニュースを投稿するよう誘っています。\n"
-"\n"
-"それで、あなたから、連絡をいただきましょう :)\n"
-"\n"
-"%3$s\n"
-"\n"
-"このメールに答えないでください。 それはそれらを始めないでしょう。\n"
-"\n"
-"敬具\n"
-"%4$s\n"
 
 #. TRANS: Subject for direct-message notification email
 #: lib/mail.php:536
@@ -6381,7 +5854,7 @@ msgstr "%s からの新しいプライベートメッセージ"
 
 #. TRANS: Body for direct-message notification email
 #: lib/mail.php:541
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s (%2$s) sent you a private message:\n"
 "\n"
@@ -6398,20 +5871,6 @@ msgid ""
 "With kind regards,\n"
 "%5$s\n"
 msgstr ""
-"%1$s (%2$s) はあなたにプライベートメッセージを送りました:\n"
-"\n"
-"------------------------------------------------------\n"
-"%3$s\n"
-"------------------------------------------------------\n"
-"\n"
-"あなたはここでそれらのメッセージに答えることができます:\n"
-"\n"
-"%4$s\n"
-"\n"
-"このメールに答えないでください。 それはそれらを始めないでしょう。\n"
-"\n"
-"敬具\n"
-"%5$s\n"
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
@@ -6421,7 +5880,7 @@ msgstr "%s (@%s) はお気に入りとしてあなたのつぶやきを加えま
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
 "\n"
@@ -6440,23 +5899,6 @@ msgid ""
 "Faithfully yours,\n"
 "%6$s\n"
 msgstr ""
-"%1$s (@%7$s) は彼らのお気に入りのひとりとして %2$s からあなたのつぶやきを加え"
-"ました。\n"
-"\n"
-"あなたのつぶやきのURL:\n"
-"\n"
-"%3$s\n"
-"\n"
-"あなたのつぶやきのテキスト:\n"
-"\n"
-"%4$s\n"
-"\n"
-"あなたはここで %1$s のお気に入りのリストを見ることができます:\n"
-"\n"
-"%5$s\n"
-"\n"
-"忠実である、あなたのもの、\n"
-"%6%s\n"
 
 #. TRANS: Line in @-reply notification e-mail. %s is conversation URL.
 #: lib/mail.php:651
@@ -6513,7 +5955,7 @@ msgstr ""
 "に引き込むプライベートメッセージを送ることができます。人々はあなただけへの"
 "メッセージを送ることができます。"
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "from"
 
@@ -6604,42 +6046,41 @@ msgstr "直接つぶやきを送る"
 msgid "To"
 msgstr "To"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "利用可能な文字"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "投稿"
+msgstr ""
 
 #: lib/noticeform.php:160
 msgid "Send a notice"
 msgstr "つぶやきを送る"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "最近どう %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "添付"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "ファイル添付"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "あなたの場所を共有する"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "あなたの場所を共有しない"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6647,29 +6088,20 @@ msgstr ""
 "すみません、あなたの位置を検索するのが予想より長くかかっています、後でもう一"
 "度試みてください"
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-#, fuzzy
-msgid "N"
-msgstr "北"
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
-#, fuzzy
 msgid "S"
-msgstr ""
+msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of east
 #: lib/noticelist.php:440
-#, fuzzy
 msgid "E"
-msgstr ""
+msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of west
 #: lib/noticelist.php:442
-#, fuzzy
 msgid "W"
-msgstr "西"
+msgstr ""
 
 #: lib/noticelist.php:444
 #, php-format
@@ -6680,23 +6112,27 @@ msgstr ""
 msgid "at"
 msgstr "at"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr ""
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr ""
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "このつぶやきへ返信"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "返信"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "つぶやきを繰り返しました"
 
@@ -6846,11 +6282,6 @@ msgstr "Yes"
 msgid "Repeat this notice"
 msgstr "このつぶやきを繰り返す"
 
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "このグループからこのユーザをブロック"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr "single-user モードのためのシングルユーザが定義されていません。"
@@ -6957,13 +6388,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "アバターの更新に失敗しました。"
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6989,9 +6413,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "ã\83ªã\83¢ã\83¼ã\83\88ã\83\97ã\83­ã\83\95ã\82¡ã\82¤ã\83«æ\9b´æ\96°エラー"
+msgstr "ã\83\96ã\83­ã\83\83ã\82¯ã\81®å\89\8aé\99¤エラー"
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
@@ -7021,11 +6444,6 @@ msgstr "この利用者からのフォローを解除する"
 msgid "Unsubscribe"
 msgstr "フォロー解除"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "ユーザはプロフィールをもっていません。"
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "アバターを編集する"
@@ -7055,78 +6473,65 @@ msgid "Message"
 msgstr "メッセージ"
 
 #: lib/userprofile.php:326
-#, fuzzy
 msgid "Moderate"
-msgstr "管理"
-
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "ユーザプロファイル"
-
-#: lib/userprofile.php:366
-#, fuzzy
-msgctxt "role"
-msgid "Administrator"
-msgstr "管理者"
+msgstr ""
 
 #: lib/userprofile.php:367
-#, fuzzy
 msgctxt "role"
 msgid "Moderator"
-msgstr "管理"
+msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "数秒前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "約 1 分前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "約 %d 分前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "約 1 時間前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "約 %d 時間前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "約 1 日前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "約 %d 日前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "約 1 ヵ月前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "約 %d ヵ月前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "約 1 年前"
 
@@ -7139,8 +6544,3 @@ msgstr "%sは有効な色ではありません!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s は有効な色ではありません! 3か6の16進数を使ってください。"
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "メッセージが長すぎます - 最大 %1$d 字、あなたが送ったのは %2$d。"
index 8ba2443a63fce6cc9bc2d1e220b9bc87c8ff0b6e..2c1429452c10d652eb84ecf5e27960eb5175bf65 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:12:37+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:53+0000\n"
 "Language-Team: Korean\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ko\n"
 "X-Message-Group: out-statusnet\n"
@@ -90,6 +90,7 @@ msgstr "저장"
 msgid "No such page."
 msgstr "해당하는 페이지 없음"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -109,7 +110,7 @@ msgstr "해당하는 페이지 없음"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "해당하는 이용자 없음"
@@ -342,7 +343,8 @@ msgstr "그 ID로 발견된 상태가 없습니다."
 msgid "This status is already a favorite."
 msgstr "이 소식은 이미 관심소식으로 등록되어 있습니다."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "관심소식을 생성할 수 없습니다."
 
@@ -355,7 +357,6 @@ msgid "Could not delete favorite."
 msgstr "관심소식을 삭제할 수 없습니다."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
 msgstr "언팔로우할 수 없습니다: 이용자 없음."
 
@@ -435,11 +436,6 @@ msgstr "위치가 너무 깁니다. (최대 255글자)"
 msgid "Too many aliases! Maximum %d."
 msgstr ""
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "사용할 수 없는 별명 : \"%s\""
-
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
 #, php-format
@@ -454,20 +450,22 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
 msgstr "찾을 수가 없습니다."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "당신은 이미 이 그룹의 멤버입니다."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-#, fuzzy
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
-msgstr "귀하는 구독이 금지되었습니다."
+msgstr "이미 차단된 이용자입니다."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
@@ -476,8 +474,11 @@ msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
 msgid "You are not a member of this group."
 msgstr "당신은 해당 그룹의 멤버가 아닙니다."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
 
@@ -506,7 +507,6 @@ msgid "groups on %s"
 msgstr "%s 사이트의 그룹"
 
 #: actions/apimediaupload.php:99
-#, fuzzy
 msgid "Upload failed."
 msgstr "실행 실패"
 
@@ -514,11 +514,6 @@ msgstr "실행 실패"
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "옳지 않은 크기"
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -537,11 +532,6 @@ msgstr "옳지 않은 크기"
 msgid "There was a problem with your session token. Try again, please."
 msgstr "세션토큰에 문제가 있습니다. 다시 시도해주십시오."
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "사용자 이름이나 비밀 번호가 틀렸습니다."
-
 #: actions/apioauthauthorize.php:159
 msgid "Database error deleting OAuth application user."
 msgstr "OAuth 응용프로그램 사용자 삭제 중 데이터베이스 오류"
@@ -637,11 +627,13 @@ msgstr "당신은 다른 사용자의 상태를 삭제하지 않아도 된다."
 msgid "No such notice."
 msgstr "그러한 통지는 없습니다."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "자기 자신의 소식은 재전송할 수 없습니다."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "이미 재전송된 소식입니다."
 
@@ -657,7 +649,7 @@ msgstr "발견된 ID의 상태가 없습니다."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -667,7 +659,7 @@ msgstr "너무 깁니다. 통지의 최대 길이는 %d 글자 입니다."
 msgid "Not found."
 msgstr "찾을 수가 없습니다."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "소식의 최대 길이는 첨부 URL을 포함하여 %d 글자입니다."
@@ -676,18 +668,13 @@ msgstr "소식의 최대 길이는 첨부 URL을 포함하여 %d 글자입니다
 msgid "Unsupported format."
 msgstr "지원하지 않는 형식입니다."
 
-#: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%1$s의 상태 (%2$s에서)"
-
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
 msgstr "%1$s님이 %2$s/%3$s의 업데이트에 답변했습니다."
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
 msgstr "%1$s의 상태 (%2$s에서)"
 
@@ -706,26 +693,11 @@ msgstr "%s 공개 타임라인"
 msgid "%s updates from everyone!"
 msgstr "모두로부터의 업데이트 %s개!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "%s에 답신"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "%s에 답신"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr "%s 태그된 통지"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr "%2$s에 있는 %1$s의 업데이트!"
-
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "API 메서드를 구성중 입니다."
@@ -763,7 +735,6 @@ msgstr "당신의 개인 아바타를 업로드할 수 있습니다. 최대 파
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
 msgstr "이용자가 프로필을 가지고 있지 않습니다."
 
@@ -795,11 +766,6 @@ msgstr "올리기"
 msgid "Crop"
 msgstr "자르기"
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "프로필을 지정하지 않았습니다."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr "그림에서 당신의 아바타로 사용할 영역을 지정하십시오."
@@ -876,6 +842,8 @@ msgstr "이 사용자 차단하기"
 msgid "Failed to save block information."
 msgstr "정보차단을 저장하는데 실패했습니다."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -885,25 +853,20 @@ msgstr "정보차단을 저장하는데 실패했습니다."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "그러한 그룹이 없습니다."
 
 #: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "이용자 프로필"
+msgstr "%s 및 친구들, %d 페이지"
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s 및 친구들, %d 페이지"
-
-#: actions/blockedfromgroup.php:115
-#, fuzzy
-msgid "A list of the users blocked from joining this group."
-msgstr "이 그룹의 회원리스트"
+msgstr "%1$s 및 친구들, %2$d 페이지"
 
 #: actions/blockedfromgroup.php:288
 msgid "Unblock user from group"
@@ -919,7 +882,7 @@ msgstr "이 사용자를 차단해제합니다."
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
 msgstr "%s 사이트의 그룹"
 
@@ -986,20 +949,17 @@ msgid "Notices"
 msgstr "통지"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
 msgstr "응용 프로그램 수정을 위해서는 로그인해야 합니다."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
 msgstr "인증 코드가 없습니다."
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
-#, fuzzy
 msgid "You are not the owner of this application."
-msgstr "당신은 해당 그룹의 멤버가 아닙니다."
+msgstr "이 응용프로그램 삭제 않기"
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1020,15 +980,13 @@ msgstr ""
 
 #. TRANS: Submit button title for 'No' when deleting an application.
 #: actions/deleteapplication.php:158
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "ì\9d\91ì\9a©í\94\84ë¡\9cê·¸ë\9e¨ ì\82­ì \9c"
+msgstr "ì\9d´ ì\9d\91ì\9a©í\94\84ë¡\9cê·¸ë\9e¨ ì\82­ì \9c ì\95\8a기"
 
 #. TRANS: Submit button title for 'Yes' when deleting an application.
 #: actions/deleteapplication.php:164
-#, fuzzy
 msgid "Delete this application"
-msgstr "응용프로그램 삭제"
+msgstr "ì\9d´ ì\9d\91ì\9a©í\94\84ë¡\9cê·¸ë\9e¨ ì\82­ì \9c"
 
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -1059,26 +1017,18 @@ msgstr "통지 삭제"
 msgid "Are you sure you want to delete this notice?"
 msgstr "정말로 통지를 삭제하시겠습니까?"
 
-#. TRANS: Submit button title for 'No' when deleting a notice.
-#: actions/deletenotice.php:151
-#, fuzzy
-msgid "Do not delete this notice"
-msgstr "이 통지를 지울 수 없습니다."
-
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
 #: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "이 게시글 삭제하기"
 
 #: actions/deleteuser.php:67
-#, fuzzy
 msgid "You cannot delete users."
 msgstr "이용자를 업데이트 할 수 없습니다."
 
 #: actions/deleteuser.php:74
-#, fuzzy
 msgid "You can only delete local users."
-msgstr "당신은 다른 사용자의 상태를 삭제하지 않아도 된다."
+msgstr "이용자를 업데이트 할 수 없습니다."
 
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
 msgid "Delete user"
@@ -1111,7 +1061,7 @@ msgid "Invalid logo URL."
 msgstr "잘못된 로고 URL 입니다."
 
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
 msgstr "인스턴트 메신저를 사용할 수 없습니다."
 
@@ -1186,11 +1136,6 @@ msgstr "색상 변경"
 msgid "Content"
 msgstr "만족하는"
 
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "검색"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "문자"
@@ -1205,7 +1150,7 @@ msgstr "고급 검색"
 
 #: actions/designadminpanel.php:655
 msgid "Custom CSS"
-msgstr "사용자 CSS"
+msgstr "사용자 정의 CSS"
 
 #: actions/designadminpanel.php:676 lib/designsettings.php:247
 msgid "Use defaults"
@@ -1230,11 +1175,6 @@ msgstr ""
 msgid "Save"
 msgstr "저장"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-#, fuzzy
-msgid "Save design"
-msgstr "프로필 디자인"
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr "이 메시지는 favorite이 아닙니다."
@@ -1244,7 +1184,7 @@ msgid "Add to favorites"
 msgstr "좋아하는 게시글로 추가하기"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
 msgstr "해당하는 첨부파일이 없습니다."
 
@@ -1258,56 +1198,28 @@ msgstr "응용 프로그램 수정을 위해서는 로그인해야 합니다."
 
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
-#, fuzzy
 msgid "No such application."
 msgstr "신규 응용 프로그램"
 
-#: actions/editapplication.php:161
-#, fuzzy
-msgid "Use this form to edit your application."
-msgstr "다음 양식을 이용해 그룹을 편집하십시오."
-
 #: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
 msgid "Name is required."
-msgstr "위와 같은 비밀 번호. 필수 사항."
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "실명이 너무 깁니다. (최대 255글자)"
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "별명이 이미 사용중 입니다. 다른 별명을 시도해 보십시오."
+msgstr "기관 이름이 필요합니다."
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "설명"
-
-#: actions/editapplication.php:194
-#, fuzzy
-msgid "Source URL is too long."
-msgstr "소스 코드 URL"
-
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "홈페이지 주소형식이 올바르지 않습니다."
+msgstr "기관 이름이 필요합니다."
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
-msgstr ""
+msgstr "기관 이름이 필요합니다."
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
 msgid "Organization is too long (max 255 chars)."
-msgstr "기관이 너무 깁니다. (최대 255글자)"
+msgstr "기관 이름이 너무 깁니다. (최대 255글자)"
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
-msgstr ""
+msgstr "기관 홈페이지가 필요합니다."
 
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
@@ -1318,9 +1230,8 @@ msgid "Callback URL is not valid."
 msgstr ""
 
 #: actions/editapplication.php:258
-#, fuzzy
 msgid "Could not update application."
-msgstr "그룹ì\9d\84 ì\97\85ë\8d°ì\9d´í\8a¸ 할 수 없습니다."
+msgstr "ê´\80ì\8b¬ì\86\8cì\8b\9dì\9d\84 ì\83\9dì\84±할 수 없습니다."
 
 #: actions/editgroup.php:56
 #, php-format
@@ -1356,7 +1267,6 @@ msgstr "그룹을 업데이트 할 수 없습니다."
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
 msgstr "관심소식을 생성할 수 없습니다."
 
@@ -1447,7 +1357,7 @@ msgstr "새로운 통지를 올리려면 이 주소로 메일을 보내십시오
 #. TRANS: Instructions for incoming SMS e-mail address input form.
 #: actions/emailsettings.php:164 actions/smssettings.php:186
 msgid "Make a new email address for posting to; cancels the old one."
-msgstr "포스팅을 위한 새 이메일 계정의 생성; 전 이메일 계정은 취소."
+msgstr "포스팅을 위한 새 메일 계정의 생성; 전 메일 계정은 취소."
 
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
@@ -1552,15 +1462,8 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "취소 할 대기중인 인증이 없습니다."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "옳지 않은 메신저 계정 입니다."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
 msgstr "취소 할 대기중인 인증이 없습니다."
 
@@ -1641,11 +1544,6 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "%s 님의 좋아하는 글"
 
-#: actions/favoritesrss.php:115
-#, fuzzy, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr "%2$s에 있는 %1$s의 업데이트!"
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1662,12 +1560,10 @@ msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
 msgstr "그러한 통지는 없습니다."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
 msgstr "그러한 통지는 없습니다."
 
@@ -1676,7 +1572,6 @@ msgid "No attachments."
 msgstr "첨부문서 없음"
 
 #: actions/file.php:51
-#, fuzzy
 msgid "No uploaded attachments."
 msgstr "첨부문서 없음"
 
@@ -1697,7 +1592,6 @@ msgid "That user has blocked you from subscribing."
 msgstr "이 사용자는 귀하의 구독을 차단했습니다."
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
 msgstr "당신은 이 프로필에 구독되지 않고있습니다."
 
@@ -1709,11 +1603,6 @@ msgstr ""
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "리모트 프로필 업데이트 오류"
-
 #: actions/getfile.php:79
 msgid "No such file."
 msgstr "해당하는 파일이 없습니다."
@@ -1722,22 +1611,15 @@ msgstr "해당하는 파일이 없습니다."
 msgid "Cannot read file."
 msgstr "파일을 읽을 수 없습니다."
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "옳지 않은 크기"
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
 msgstr "이 사이트의 이용자에 대해 권한정지 할 수 없습니다."
 
 #: actions/grantrole.php:82
-#, fuzzy
 msgid "User already has this role."
 msgstr "이용자가 프로필을 가지고 있지 않습니다."
 
@@ -1753,69 +1635,37 @@ msgstr "프로필을 지정하지 않았습니다."
 msgid "No profile with that ID."
 msgstr "해당 ID의 프로필이 없습니다."
 
-#: actions/groupblock.php:81 actions/groupunblock.php:81
-#: actions/makeadmin.php:81
-#, fuzzy
-msgid "No group specified."
-msgstr "프로필을 지정하지 않았습니다."
-
 #: actions/groupblock.php:91
 msgid "Only an admin can block group members."
 msgstr ""
 
 #: actions/groupblock.php:95
-#, fuzzy
 msgid "User is already blocked from group."
 msgstr "사용자가 귀하를 차단했습니다."
 
 #: actions/groupblock.php:100
-#, fuzzy
 msgid "User is not a member of group."
-msgstr "당신은 해당 그룹의 멤버가 아닙니다."
+msgstr "그룹 이용자는 차단해제"
 
 #: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
 msgid "Block user from group"
 msgstr "그룹 이용자는 차단해제"
 
-#: actions/groupblock.php:160
-#, fuzzy, php-format
-msgid ""
-"Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
-"will be removed from the group, unable to post, and unable to subscribe to "
-"the group in the future."
-msgstr ""
-"정말 이용자를 차단하시겠습니까? 차단된 이용자는 구독해제되고, 이후 당신을 구"
-"독할 수 없으며, 차단된 이용자로부터 @-답장의 통보를 받지 않게 됩니다."
-
 #. TRANS: Submit button title for 'No' when blocking a user from a group.
 #: actions/groupblock.php:182
-#, fuzzy
 msgid "Do not block this user from this group"
 msgstr "이용자를 차단하지 않는다."
 
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
-#, fuzzy
 msgid "Block this user from this group"
 msgstr "그룹 이용자는 차단해제"
 
-#: actions/groupblock.php:206
-#, fuzzy
-msgid "Database error blocking user from group."
-msgstr "그룹 이용자는 차단해제"
-
 #: actions/groupbyid.php:74 actions/userbyid.php:70
 msgid "No ID."
 msgstr "ID가 없습니다."
 
-#: actions/groupdesignsettings.php:68
-#, fuzzy
-msgid "You must be logged in to edit a group."
-msgstr "그룹을 만들기 위해서는 로그인해야 합니다."
-
 #: actions/groupdesignsettings.php:144
-#, fuzzy
 msgid "Group design"
 msgstr "프로필 디자인"
 
@@ -1831,7 +1681,6 @@ msgid "Couldn't update your design."
 msgstr "디자인을 수정할 수 없습니다."
 
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
 msgid "Design preferences saved."
 msgstr "메일 설정이 저장되었습니다."
 
@@ -1840,7 +1689,7 @@ msgid "Group logo"
 msgstr "그룹 로고"
 
 #: actions/grouplogo.php:153
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can upload a logo image for your group. The maximum file size is %s."
 msgstr ""
@@ -1864,7 +1713,7 @@ msgid "%s group members"
 msgstr "%s 그룹 회원"
 
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
 msgstr "%s 그룹 회원"
 
@@ -1880,16 +1729,6 @@ msgstr "관리자"
 msgid "Block"
 msgstr "차단하기"
 
-#: actions/groupmembers.php:487
-#, fuzzy
-msgid "Make user an admin of the group"
-msgstr "관리자만 그룹을 편집할 수 있습니다."
-
-#: actions/groupmembers.php:519
-#, fuzzy
-msgid "Make Admin"
-msgstr "관리자"
-
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
 msgstr "이 이용자를 관리자로 만듦"
@@ -1903,12 +1742,6 @@ msgstr "이 이용자를 관리자로 만듦"
 msgid "%s timeline"
 msgstr "%s 타임라인"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "%2$s에 있는 %1$s의 업데이트!"
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
@@ -1934,7 +1767,7 @@ msgid "Create a new group"
 msgstr "새 그룹을 만듭니다."
 
 #: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Search for groups on %%site.name%% by their name, location, or description. "
 "Separate the terms by spaces; they must be 3 characters or more."
@@ -1970,7 +1803,6 @@ msgid "Only an admin can unblock group members."
 msgstr ""
 
 #: actions/groupunblock.php:95
-#, fuzzy
 msgid "User is not blocked from group."
 msgstr "그룹 이용자는 차단해제"
 
@@ -1980,7 +1812,6 @@ msgstr "차단 제거 에러!"
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
 msgstr "메일 설정"
 
@@ -2004,7 +1835,6 @@ msgstr "인스턴트 메신저를 사용할 수 없습니다."
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
 msgstr "SMS 주소"
 
@@ -2036,7 +1866,6 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
 msgstr "메일 설정"
 
@@ -2114,7 +1943,6 @@ msgstr "메신저 승인을 삭제 할 수 없습니다."
 
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
 msgstr "확인 코드가 없습니다."
 
@@ -2126,14 +1954,13 @@ msgstr "그 Jabber ID는 귀하의 것이 아닙니다."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
 msgstr "메일 주소를 지웠습니다."
 
 #: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
 msgid "Inbox for %1$s - page %2$d"
-msgstr "%s의 받은쪽지함"
+msgstr "%1$s 및 친구들, %2$d 페이지"
 
 #: actions/inbox.php:62
 #, php-format
@@ -2149,7 +1976,7 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
 msgstr "그룹가입을 위해서는 로그인이 필요합니다."
 
@@ -2172,7 +1999,7 @@ msgstr "당신은 다음 사용자를 이미 구독하고 있습니다."
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2284,30 +2111,22 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "그룹가입을 위해서는 로그인이 필요합니다."
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "별명이 없습니다."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
-msgstr ""
+msgstr "%1$s의 상태 (%2$s에서)"
 
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
 msgstr "그룹을 떠나기 위해서는 로그인해야 합니다."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "당신은 해당 그룹의 멤버가 아닙니다."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s의 상태 (%2$s에서)"
 
@@ -2321,7 +2140,7 @@ msgstr "틀린 계정 또는 비밀 번호"
 
 #: actions/login.php:154 actions/otp.php:120
 msgid "Error setting user. You are probably not authorized."
-msgstr ""
+msgstr "당신은 이 프로필에 구독되지 않고있습니다."
 
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
@@ -2350,11 +2169,6 @@ msgid ""
 msgstr ""
 "보안을 위해 세팅을 저장하기 전에 계정과 비밀 번호를 다시 입력 해 주십시오."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "사용자 이름과 비밀번호로 로그인"
-
 #: actions/login.php:295
 #, php-format
 msgid ""
@@ -2368,20 +2182,19 @@ msgstr ""
 #: actions/makeadmin.php:96
 #, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr ""
+msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
 
 #: actions/makeadmin.php:133
 #, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr ""
+msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
 
 #: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
 msgid "Can't make %1$s an admin for group %2$s."
 msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
 msgstr "결과 없음"
 
@@ -2390,22 +2203,10 @@ msgid "New Application"
 msgstr "신규 응용 프로그램"
 
 #: actions/newapplication.php:64
-#, fuzzy
 msgid "You must be logged in to register an application."
 msgstr "응용 프로그램 수정을 위해서는 로그인해야 합니다."
 
-#: actions/newapplication.php:143
-#, fuzzy
-msgid "Use this form to register a new application."
-msgstr "새 그룹을 만들기 위해 이 양식을 사용하세요."
-
-#: actions/newapplication.php:176
-#, fuzzy
-msgid "Source URL is required."
-msgstr "소스 코드 URL"
-
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
 msgstr "관심소식을 생성할 수 없습니다."
 
@@ -2421,12 +2222,15 @@ msgstr "새 그룹을 만들기 위해 이 양식을 사용하세요."
 msgid "New message"
 msgstr "새로운 메시지입니다."
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "당신은 이 사용자에게 메시지를 보낼 수 없습니다."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "내용이 없습니다!"
 
@@ -2434,7 +2238,8 @@ msgstr "내용이 없습니다!"
 msgid "No recipient specified."
 msgstr "수신자를 지정하지 않았습니다."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2444,12 +2249,7 @@ msgstr ""
 msgid "Message sent"
 msgstr "쪽지가 전송되었습니다."
 
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "%s에게 보낸 직접 메시지"
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax 에러입니다."
 
@@ -2457,7 +2257,7 @@ msgstr "Ajax 에러입니다."
 msgid "New notice"
 msgstr "새로운 통지"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "게시글이 등록되었습니다."
 
@@ -2475,7 +2275,7 @@ msgid "Text search"
 msgstr "문자 검색"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
 msgstr "%1$s에서 %2$s까지 메시지"
 
@@ -2499,7 +2299,7 @@ msgid "Updates with \"%s\""
 msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
 msgstr "%2$s에 있는 %1$s의 업데이트!"
 
@@ -2517,12 +2317,10 @@ msgid "Nudge sent!"
 msgstr "찔러 보기를 보냈습니다!"
 
 #: actions/oauthappssettings.php:59
-#, fuzzy
 msgid "You must be logged in to list your applications."
 msgstr "응용 프로그램 수정을 위해서는 로그인해야 합니다."
 
 #: actions/oauthappssettings.php:74
-#, fuzzy
 msgid "OAuth applications"
 msgstr "응용프로그램 삭제"
 
@@ -2530,41 +2328,20 @@ msgstr "응용프로그램 삭제"
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, fuzzy, php-format
-msgid "You have not registered any applications yet."
-msgstr "응용 프로그램 수정을 위해서는 로그인해야 합니다."
-
-#: actions/oauthconnectionssettings.php:72
-#, fuzzy
-msgid "Connected applications"
-msgstr "응용프로그램 삭제"
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr "다음 응용 프로그램이 계정에 접근하도록 허용되어 있습니다."
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "당신은 해당 그룹의 멤버가 아닙니다."
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:198
-#, fuzzy
-msgid "You have not authorized any applications to use your account."
-msgstr "다음 응용 프로그램이 계정에 접근하도록 허용되어 있습니다."
-
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
 msgstr "이용자가 프로필을 가지고 있지 않습니다."
 
@@ -2586,8 +2363,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "지원하는 형식의 데이터가 아닙니다."
 
@@ -2600,7 +2377,6 @@ msgid "Notice Search"
 msgstr "통지 검색"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
 msgstr "아바타 설정"
 
@@ -2610,7 +2386,7 @@ msgstr "여러가지 기타 옵션을 관리합니다."
 
 #: actions/othersettings.php:108
 msgid " (free service)"
-msgstr ""
+msgstr " (무료 서비스)"
 
 #: actions/othersettings.php:116
 msgid "Shorten URLs with"
@@ -2624,43 +2400,26 @@ msgstr "사용할 URL 자동 줄이기 서비스."
 msgid "View profile designs"
 msgstr "프로필 디자인 보기"
 
-#: actions/othersettings.php:123
-#, fuzzy
-msgid "Show or hide profile designs."
-msgstr "프로필 디자인 보기"
-
 #: actions/othersettings.php:153
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "URL 줄이기 서비스 너무 깁니다. (최대 50글자)"
 
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "프로필을 지정하지 않았습니다."
-
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "í\94\84ë¡\9cí\95\84ì\9d\84 ì§\80ì \95í\95\98ì§\80 ì\95\8aì\95\98ì\8aµ니다."
+msgstr "í\97\88ì\9a©ë\90\98ì§\80 ì\95\8aë\8a\94 ì\9a\94ì²­ì\9e\85니다."
 
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
 msgstr "허용되지 않는 요청입니다."
 
 #: actions/otp.php:95
 msgid "Invalid login token specified."
-msgstr ""
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "사이트에 로그인하세요."
+msgstr "허용되지 않는 요청입니다."
 
 #: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
 msgid "Outbox for %1$s - page %2$d"
-msgstr "%s의 보낸쪽지함"
+msgstr "%s 및 친구들, %d 페이지"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2732,48 +2491,25 @@ msgstr "새 비밀번호를 저장 할 수 없습니다."
 msgid "Password saved."
 msgstr "비밀 번호 저장"
 
-#. TRANS: Menu item for site administration
-#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:384
-#, fuzzy
-msgid "Paths"
-msgstr "경로"
-
-#: actions/pathsadminpanel.php:70
-#, fuzzy
-msgid "Path and server settings for this StatusNet site."
-msgstr "이 StatusNet 사이트에 대한 디자인 설정"
-
 #: actions/pathsadminpanel.php:157
 #, php-format
 msgid "Theme directory not readable: %s."
-msgstr ""
+msgstr "인스턴트 메신저를 사용할 수 없습니다."
 
 #: actions/pathsadminpanel.php:163
 #, php-format
 msgid "Avatar directory not writable: %s."
-msgstr ""
-
-#: actions/pathsadminpanel.php:169
-#, php-format
-msgid "Background directory not writable: %s."
-msgstr ""
-
-#: actions/pathsadminpanel.php:177
-#, php-format
-msgid "Locales directory not readable: %s."
-msgstr ""
+msgstr "아바타가 삭제되었습니다."
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
 #: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
 msgid "Site"
 msgstr "사이트"
 
 #: actions/pathsadminpanel.php:238
-#, fuzzy
 msgid "Server"
 msgstr "SSL 서버"
 
@@ -2786,7 +2522,6 @@ msgid "Path"
 msgstr "경로"
 
 #: actions/pathsadminpanel.php:242
-#, fuzzy
 msgid "Site path"
 msgstr "사이트 테마"
 
@@ -2810,73 +2545,21 @@ msgstr ""
 msgid "Theme"
 msgstr "테마"
 
-#: actions/pathsadminpanel.php:264
-#, fuzzy
-msgid "Theme server"
-msgstr "SSL 서버"
-
-#: actions/pathsadminpanel.php:268
-#, fuzzy
-msgid "Theme path"
-msgstr "테마"
-
-#: actions/pathsadminpanel.php:272
-msgid "Theme directory"
-msgstr ""
-
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "아바타"
-
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "아바타 설정"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "아바타가 업데이트 되었습니다."
+msgstr "아바타가 삭제되었습니다."
 
 #: actions/pathsadminpanel.php:292
-#, fuzzy
 msgid "Avatar directory"
 msgstr "아바타가 삭제되었습니다."
 
-#: actions/pathsadminpanel.php:301
-#, fuzzy
-msgid "Backgrounds"
-msgstr "배경"
-
-#: actions/pathsadminpanel.php:305
-#, fuzzy
-msgid "Background server"
-msgstr "배경"
-
-#: actions/pathsadminpanel.php:309
-#, fuzzy
-msgid "Background path"
-msgstr "배경"
-
-#: actions/pathsadminpanel.php:313
-#, fuzzy
-msgid "Background directory"
-msgstr "배경"
-
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
 msgstr "SSL"
 
 #: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
 msgid "Never"
-msgstr "복구"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "통지"
+msgstr "SSL 서버"
 
 #: actions/pathsadminpanel.php:325
 msgid "Always"
@@ -2900,7 +2583,7 @@ msgstr ""
 
 #: actions/pathsadminpanel.php:352
 msgid "Save paths"
-msgstr ""
+msgstr "사이트 테마"
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2916,17 +2599,16 @@ msgid "People search"
 msgstr "사람 찾기"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
 msgstr "올바른 메일 주소가 아닙니다."
 
 #: actions/peopletag.php:142
 #, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr ""
+msgstr "%s 태그된 통지"
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
 msgstr "옳지 않은 크기"
 
@@ -2970,11 +2652,6 @@ msgstr "홈페이지"
 msgid "URL of your homepage, blog, or profile on another site"
 msgstr "귀하의 홈페이지, 블로그 혹은 다른 사이트의 프로필 페이지 URL"
 
-#: actions/profilesettings.php:122 actions/register.php:468
-#, php-format
-msgid "Describe yourself and your interests in %d chars"
-msgstr ""
-
 #: actions/profilesettings.php:125 actions/register.php:471
 msgid "Describe yourself and your interests"
 msgstr ""
@@ -3031,7 +2708,7 @@ msgid ""
 msgstr "나에게 구독하는 사람에게 자동 구독 신청"
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
 msgstr "설명이 너무 깁니다. (최대 %d 글자)"
 
@@ -3052,11 +2729,6 @@ msgstr "올바르지 않은 태그: \"%s\""
 msgid "Couldn't update user for autosubscribe."
 msgstr "자동구독에 사용자를 업데이트 할 수 없습니다."
 
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "태그를 저장할 수 없습니다."
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "프로필을 저장 할 수 없습니다."
@@ -3090,15 +2762,11 @@ msgstr "퍼블릭 타임라인"
 
 #: actions/public.php:160
 msgid "Public Stream Feed (RSS 1.0)"
-msgstr ""
+msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)"
 
 #: actions/public.php:164
 msgid "Public Stream Feed (RSS 2.0)"
-msgstr ""
-
-#: actions/public.php:168
-msgid "Public Stream Feed (Atom)"
-msgstr ""
+msgstr "%s 그룹을 위한 공지피드 (RSS 2.0)"
 
 #: actions/public.php:188
 #, php-format
@@ -3108,11 +2776,6 @@ msgid ""
 msgstr ""
 "%%site.name%% 의 공개 타임라인이지만, 아직 아무도 글을 쓰지 않았습니다."
 
-#: actions/public.php:191
-#, fuzzy
-msgid "Be the first to post!"
-msgstr "글을 올린 첫번째 사람이 되세요!"
-
 #: actions/public.php:195
 #, php-format
 msgid ""
@@ -3193,27 +2856,10 @@ msgstr "이 인증 코드는 오래됐습니다. 다시 발급 받아 주십시
 msgid "Could not update user with confirmed email address."
 msgstr "이 이메일 주소로 사용자를 업데이트 할 수 없습니다."
 
-#: actions/recoverpassword.php:152
-#, fuzzy
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr "가입하신 이메일로 비밀 번호 재발급에 관한 안내를 보냈습니다."
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-#, fuzzy
-msgid "Password recovery"
-msgstr "비밀 번호 복구가 요청되었습니다."
-
-#: actions/recoverpassword.php:191
-#, fuzzy
-msgid "Nickname or email address"
-msgstr "별명이나 이메일 계정을 입력하십시오."
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "이 서버에서 당신의 닉네임 혹은 당신의 등록된 이메일주소"
@@ -3293,11 +2939,6 @@ msgstr ""
 msgid "Sorry, only invited people can register."
 msgstr "죄송합니다. 단지 초대된 사람들만 등록할 수 있습니다."
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "확인 코드 오류"
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "회원 가입이 성공적입니다."
@@ -3346,7 +2987,7 @@ msgstr "위와 같은 비밀 번호. 필수 사항."
 #: actions/register.php:445 actions/register.php:449
 #: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:132
 msgid "Email"
-msgstr "메일"
+msgstr "메일"
 
 #: actions/register.php:446 actions/register.php:450
 msgid "Used only for updates, announcements, and password recovery"
@@ -3356,12 +2997,6 @@ msgstr "업데이트나 공지, 비밀번호 찾기에 사용하세요."
 msgid "Longer name, preferably your \"real\" name"
 msgstr "더욱 긴 이름을 요구합니다."
 
-#: actions/register.php:518
-#, fuzzy, php-format
-msgid ""
-"I understand that content and data of %1$s are private and confidential."
-msgstr "%1$s의 컨텐츠와 데이터는 외부 유출을 금지합니다."
-
 #: actions/register.php:528
 #, php-format
 msgid "My text and files are copyright by %1$s."
@@ -3427,11 +3062,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "리모트 구독 예약"
 
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "이 회원을 구독합니다."
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "이용자 닉네임"
@@ -3469,22 +3099,11 @@ msgstr ""
 msgid "Couldn’t get a request token."
 msgstr ""
 
-#: actions/repeat.php:57
-#, fuzzy
-msgid "Only logged-in users can repeat notices."
-msgstr "오직 해당 사용자만 자신의 메일박스를 열람할 수 있습니다."
-
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "프로필을 지정하지 않았습니다."
-
 #: actions/repeat.php:76
 msgid "You can't repeat your own notice."
 msgstr "자신의 글은 재전송할 수 없습니다."
 
 #: actions/repeat.php:90
-#, fuzzy
 msgid "You already repeated that notice."
 msgstr "이미 재전송된 소식입니다."
 
@@ -3503,32 +3122,25 @@ msgid "Replies to %s"
 msgstr "%s에 답신"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
 msgstr "%s에 답신"
 
 #: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr "%s의 통지 피드"
+msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)"
 
 #: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr "%s의 통지 피드"
+msgstr "%s 그룹을 위한 공지피드 (RSS 2.0)"
 
 #: actions/replies.php:159
 #, php-format
 msgid "Replies feed for %s (Atom)"
 msgstr "%s의 통지 피드"
 
-#: actions/replies.php:199
-#, fuzzy, php-format
-msgid ""
-"This is the timeline showing replies to %1$s but %2$s hasn't received a "
-"notice to them yet."
-msgstr "%s 및 친구들의 타임라인이지만, 아직 아무도 글을 작성하지 않았습니다."
-
 #: actions/replies.php:204
 #, php-format
 msgid ""
@@ -3544,21 +3156,19 @@ msgid ""
 msgstr ""
 
 #: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s on %2$s!"
-msgstr "%2$s에서 %1$s까지 메시지"
+msgstr "%s에 답신"
 
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
 msgstr "이 사이트의 이용자에 대해 권한정지 할 수 없습니다."
 
 #: actions/revokerole.php:82
 msgid "User doesn't have this role."
-msgstr ""
+msgstr "이용자가 프로필을 가지고 있지 않습니다."
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
 msgstr "StatusNet %s"
 
@@ -3568,19 +3178,7 @@ msgstr "이 사이트의 이용자에 대해 권한정지 할 수 없습니다."
 
 #: actions/sandbox.php:72
 msgid "User is already sandboxed."
-msgstr ""
-
-#. TRANS: Menu item for site administration
-#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:392
-#, fuzzy
-msgid "Sessions"
-msgstr "버전"
-
-#: actions/sessionsadminpanel.php:65
-#, fuzzy
-msgid "Session settings for this StatusNet site."
-msgstr "이 StatusNet 사이트에 대한 디자인 설정"
+msgstr "이용자의 지속적인 게시글이 없습니다."
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
@@ -3600,17 +3198,14 @@ msgstr ""
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
 msgstr "접근 설정을 저장"
 
 #: actions/showapplication.php:82
-#, fuzzy
 msgid "You must be logged in to view an application."
 msgstr "응용 프로그램 수정을 위해서는 로그인해야 합니다."
 
 #: actions/showapplication.php:157
-#, fuzzy
 msgid "Application profile"
 msgstr "신규 응용 프로그램"
 
@@ -3627,9 +3222,8 @@ msgstr "이름"
 
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "페이지수"
+msgstr "기관 이름이 필요합니다."
 
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
@@ -3648,18 +3242,16 @@ msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
 #: actions/showapplication.php:213
-#, fuzzy
 msgid "Application actions"
-msgstr "ì\8b ê·\9c ì\9d\91ì\9a© í\94\84ë¡\9cê·¸ë\9e¨"
+msgstr "ì\9d¸ì¦\9d ì½\94ë\93\9cê°\80 ì\97\86ì\8aµë\8b\88ë\8b¤."
 
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
 #: actions/showapplication.php:261
-#, fuzzy
 msgid "Application info"
-msgstr "ì\8b ê·\9c ì\9d\91ì\9a© í\94\84ë¡\9cê·¸ë\9e¨"
+msgstr "ì\9d¸ì¦\9d ì½\94ë\93\9cê°\80 ì\97\86ì\8aµë\8b\88ë\8b¤."
 
 #: actions/showapplication.php:263
 msgid "Consumer key"
@@ -3677,24 +3269,14 @@ msgstr ""
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:283
-#, fuzzy
-msgid "Authorize URL"
-msgstr "작성자"
-
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "정말로 통지를 삭제하시겠습니까?"
-
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
 msgstr "%s 님의 좋아하는 글"
 
@@ -3705,17 +3287,17 @@ msgstr "좋아하는 게시글을 복구할 수 없습니다."
 #: actions/showfavorites.php:171
 #, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "%sì\9d\98 ì¹\9c구ë\93¤ì\9d\84 ì\9c\84í\95\9c í\94¼ë\93\9c"
+msgstr "%sì\9d\98 ì¢\8bì\95\84í\95\98ë\8a\94 ê¸\80 í\94¼ë\93\9c (RSS 1.0)"
 
 #: actions/showfavorites.php:178
 #, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "%sì\9d\98 ì¹\9c구ë\93¤ì\9d\84 ì\9c\84í\95\9c í\94¼ë\93\9c"
+msgstr "%sì\9d\98 ì¢\8bì\95\84í\95\98ë\8a\94 ê¸\80 í\94¼ë\93\9c (RSS 2.0)"
 
 #: actions/showfavorites.php:185
 #, php-format
 msgid "Feed for favorites of %s (Atom)"
-msgstr "%sì\9d\98 ì¹\9c구ë\93¤ì\9d\84 ì\9c\84í\95\9c í\94¼ë\93\9c"
+msgstr "%sì\9d\98 ì¢\8bì\95\84í\95\98ë\8a\94 ê¸\80 í\94¼ë\93\9c (Atom)"
 
 #: actions/showfavorites.php:206
 msgid ""
@@ -3748,9 +3330,9 @@ msgid "%s group"
 msgstr "%s 그룹"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "그룹, %d 페이지"
+msgstr "그룹, %d페이지"
 
 #: actions/showgroup.php:227
 msgid "Group profile"
@@ -3831,11 +3413,6 @@ msgid ""
 "their life and interests. "
 msgstr ""
 
-#: actions/showgroup.php:489
-#, fuzzy
-msgid "Admins"
-msgstr "관리자"
-
 #: actions/showmessage.php:81
 msgid "No such message."
 msgstr "그러한 메시지가 없습니다."
@@ -3854,51 +3431,31 @@ msgstr "%2$s에서 %1$s까지 메시지"
 msgid "Message from %1$s on %2$s"
 msgstr "%1$s에서 %2$s까지 메시지"
 
-#: actions/shownotice.php:90
-#, fuzzy
-msgid "Notice deleted."
-msgstr "게시글이 등록되었습니다."
-
-#: actions/showstream.php:73
-#, fuzzy, php-format
-msgid " tagged %s"
-msgstr "%s 태그된 통지"
-
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
 msgstr "%s 및 친구들, %d 페이지"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
 msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
 msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
 msgstr "%s 그룹을 위한 공지피드 (RSS 2.0)"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (Atom)"
 msgstr "%s 그룹을 위한 공지피드 (Atom)"
 
-#: actions/showstream.php:148
-#, fuzzy, php-format
-msgid "FOAF for %s"
-msgstr "%s의 보낸쪽지함"
-
-#: actions/showstream.php:200
-#, fuzzy, php-format
-msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr "%s 및 친구들의 타임라인이지만, 아직 아무도 글을 작성하지 않았습니다."
-
 #: actions/showstream.php:205
 msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
@@ -3931,31 +3488,19 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "%s에 답신"
-
 #: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
 msgid "You cannot silence users on this site."
 msgstr "이 사이트의 이용자에 대해 권한정지 할 수 없습니다."
 
 #: actions/silence.php:72
 msgid "User is already silenced."
-msgstr ""
-
-#: actions/siteadminpanel.php:69
-#, fuzzy
-msgid "Basic settings for this StatusNet site"
-msgstr "이 StatusNet 사이트에 대한 디자인 설정"
+msgstr "사용자가 귀하를 차단했습니다."
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
 msgstr ""
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
 msgstr "올바른 메일 주소가 아닙니다."
 
@@ -3974,10 +3519,9 @@ msgstr ""
 
 #: actions/siteadminpanel.php:221
 msgid "General"
-msgstr ""
+msgstr "일반"
 
 #: actions/siteadminpanel.php:224
-#, fuzzy
 msgid "Site name"
 msgstr "사이트 테마"
 
@@ -4002,27 +3546,16 @@ msgid "URL used for credits link in footer of each page"
 msgstr ""
 
 #: actions/siteadminpanel.php:239
-#, fuzzy
 msgid "Contact email address for your site"
 msgstr "%s에 포스팅 할 새로운 메일 주소"
 
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "로컬 뷰"
-
-#: actions/siteadminpanel.php:256
-msgid "Default timezone"
-msgstr ""
-
 #: actions/siteadminpanel.php:257
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
 #: actions/siteadminpanel.php:262
-#, fuzzy
 msgid "Default language"
-msgstr "언어 설정"
+msgstr "기본 언어"
 
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
@@ -4048,18 +3581,7 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "사이트 공지"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "새로운 메시지입니다."
-
 #: actions/sitenoticeadminpanel.php:103
-#, fuzzy
 msgid "Unable to save site notice."
 msgstr "디자인 설정을 저장할 수 없습니다."
 
@@ -4067,23 +3589,12 @@ msgstr "디자인 설정을 저장할 수 없습니다."
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "사이트 공지"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "사이트 공지"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
 msgstr "메일 설정"
 
@@ -4097,7 +3608,6 @@ msgstr ""
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
 msgstr "인스턴트 메신저를 사용할 수 없습니다."
 
@@ -4134,7 +3644,6 @@ msgstr "확인"
 
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
 msgstr "휴대폰 번호가 없습니다."
 
@@ -4145,7 +3654,6 @@ msgstr "지역번호와 함께 띄어쓰기 없이 번호를 적어 주세요."
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
 msgstr "메일 설정"
 
@@ -4160,9 +3668,8 @@ msgstr ""
 
 #. TRANS: Confirmation message for successful SMS preferences save.
 #: actions/smssettings.php:315
-#, fuzzy
 msgid "SMS preferences saved."
-msgstr "ì\84¤ì \95ì\9d´ ì \80ì\9e¥ë\90\98ì\97\88ì\8aµë\8b\88ë\8b¤."
+msgstr "SMS ì\84¤ì \95ì\9d\84 ì \80ì\9e¥í\96\88ì\8aµë\8b\88ë\8b¤."
 
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
@@ -4186,7 +3693,6 @@ msgstr "그 휴대폰 번호는 이미 다른 사용자의 것입니다."
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
@@ -4201,7 +3707,6 @@ msgstr "옳지 않은 인증 번호 입니다."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
 msgstr "SMS 인증"
 
@@ -4213,7 +3718,6 @@ msgstr "그 휴대폰 번호는 귀하의 것이 아닙니다."
 
 #. TRANS: Message given after successfully removing a registered SMS phone number.
 #: actions/smssettings.php:470
-#, fuzzy
 msgid "The SMS phone number was removed."
 msgstr "메일 주소를 지웠습니다."
 
@@ -4248,23 +3752,13 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
 msgstr "메일 주소 확인"
 
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-#, fuzzy
-msgid "Invalid snapshot report URL."
-msgstr "잘못된 로고 URL 입니다."
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4273,10 +3767,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-msgid "Data snapshots"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4289,17 +3779,11 @@ msgstr ""
 msgid "Snapshots will be sent once every N web hits"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:226
-#, fuzzy
-msgid "Report URL"
-msgstr "소스 코드 URL"
-
 #: actions/snapshotadminpanel.php:227
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:248
-#, fuzzy
 msgid "Save snapshot settings"
 msgstr "접근 설정을 저장"
 
@@ -4317,15 +3801,9 @@ msgid "This action only accepts POST requests."
 msgstr ""
 
 #: actions/subscribe.php:107
-#, fuzzy
 msgid "No such profile."
 msgstr "해당하는 파일이 없습니다."
 
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "당신은 이 프로필에 구독되지 않고있습니다."
-
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "구독하였습니다."
@@ -4336,7 +3814,7 @@ msgid "%s subscribers"
 msgstr "%s 구독자"
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
 msgstr "%s 및 친구들, %d 페이지"
 
@@ -4373,7 +3851,7 @@ msgid "%s subscriptions"
 msgstr "%s 구독"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
 msgstr "%s 및 친구들, %d 페이지"
 
@@ -4397,7 +3875,7 @@ msgid ""
 msgstr ""
 
 #: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not listening to anyone."
 msgstr "%1$s님이 귀하의 알림 메시지를 %2$s에서 듣고 있습니다."
 
@@ -4410,27 +3888,26 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
 msgstr "%s 태그된 통지"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
 msgstr "%s 그룹을 위한 공지피드 (RSS 1.0)"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
 msgstr "%s 그룹을 위한 공지피드 (RSS 2.0)"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
 msgstr "%s 그룹을 위한 공지피드 (Atom)"
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
 msgstr "첨부문서 없음"
 
@@ -4479,22 +3956,18 @@ msgid "No such tag."
 msgstr "그러한 태그가 없습니다."
 
 #: actions/unblock.php:59
-#, fuzzy
 msgid "You haven't blocked that user."
 msgstr "이미 차단된 이용자입니다."
 
 #: actions/unsandbox.php:72
-#, fuzzy
 msgid "User is not sandboxed."
 msgstr "이용자의 지속적인 게시글이 없습니다."
 
 #: actions/unsilence.php:72
-#, fuzzy
 msgid "User is not silenced."
-msgstr "이용자가 프로필을 가지고 있지 않습니다."
+msgstr "이용자의 지속적인 게시글이 없습니다."
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
 msgstr "해당 ID의 프로필이 없습니다."
 
@@ -4514,11 +3987,6 @@ msgctxt "TITLE"
 msgid "User"
 msgstr "사용자"
 
-#: actions/useradminpanel.php:70
-#, fuzzy
-msgid "User settings for this StatusNet site."
-msgstr "이 StatusNet 사이트에 대한 디자인 설정"
-
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
 msgstr ""
@@ -4546,11 +4014,6 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-#, fuzzy
-msgid "New users"
-msgstr "새 사용자를 초대"
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
@@ -4559,26 +4022,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "모든 예약 구독"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "나에게 구독하는 사람에게 자동 구독 신청"
-
-#: actions/useradminpanel.php:251
-#, fuzzy
-msgid "Invitations"
-msgstr "초대권을 보냈습니다"
-
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "초대권을 보냈습니다"
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4611,11 +4054,6 @@ msgstr "이 회원을 구독합니다."
 msgid "Reject"
 msgstr "거부"
 
-#: actions/userauthorization.php:220
-#, fuzzy
-msgid "Reject this subscription"
-msgstr "%s 구독"
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "허용되지 않는 요청입니다."
@@ -4693,7 +4131,7 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
 msgstr "그룹, %d 페이지"
 
@@ -4701,11 +4139,6 @@ msgstr "그룹, %d 페이지"
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "당신은 해당 그룹의 멤버가 아닙니다."
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4763,18 +4196,13 @@ msgstr ""
 
 #: actions/version.php:191
 msgid "Plugins"
-msgstr ""
+msgstr "플러그인"
 
 #. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
 #: actions/version.php:198 lib/action.php:789
 msgid "Version"
 msgstr "버전"
 
-#: actions/version.php:199
-#, fuzzy
-msgid "Author(s)"
-msgstr "작성자"
-
 #. TRANS: Server exception thrown when a URL cannot be processed.
 #: classes/File.php:143
 #, php-format
@@ -4809,35 +4237,16 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "옳지 않은 크기"
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
 msgstr "그룹에 가입하지 못했습니다."
 
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "그룹을 업데이트 할 수 없습니다."
-
 #. TRANS: Exception thrown when trying to leave a group fails.
 #: classes/Group_member.php:63
-#, fuzzy
 msgid "Group leave failed."
 msgstr "그룹에 가입하지 못했습니다."
 
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "그룹을 업데이트 할 수 없습니다."
-
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
@@ -4850,12 +4259,6 @@ msgstr "%s 에 대한 로그인 토큰을 만들 수 없습니다."
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "직접 메시지 보내기 오류."
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -4874,68 +4277,46 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "OAuth 응용 프로그램 사용자 추가 중 데이터베이스 오류"
 
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "통지를 저장하는데 문제가 발생했습니다."
-
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "게시글 저장문제. 알려지지않은 회원"
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "너무 많은 게시글이 너무 빠르게 올라옵니다. 한숨고르고 몇분후에 다시 포스트를 "
 "해보세요."
 
-#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-#, fuzzy
-msgid ""
-"Too many duplicate messages too quickly; take a breather and post again in a "
-"few minutes."
-msgstr ""
-"너무 많은 게시글이 너무 빠르게 올라옵니다. 한숨고르고 몇분후에 다시 포스트를 "
-"해보세요."
-
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "이 사이트에 게시글 포스팅으로부터 당신은 금지되었습니다."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "통지를 저장하는데 문제가 발생했습니다."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "통지를 저장하는데 문제가 발생했습니다."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -4951,15 +4332,8 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "이용자가 프로필을 가지고 있지 않습니다."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
 msgstr "태그를 저장할 수 없습니다."
 
@@ -4968,47 +4342,32 @@ msgstr "태그를 저장할 수 없습니다."
 msgid "You have been banned from subscribing."
 msgstr "귀하는 구독이 금지되었습니다."
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-#, fuzzy
-msgid "Already subscribed!"
-msgstr "구독하고 있지 않습니다!"
-
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "사용자가 귀하를 차단했습니다."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "구독하고 있지 않습니다!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
 msgstr "구독을 저장할 수 없습니다."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
 msgstr "구독을 저장할 수 없습니다."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
 msgstr "구독을 저장할 수 없습니다."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
 #: classes/User.php:365
-#, fuzzy, php-format
+#, php-format
 msgid "Welcome to %1$s, @%2$s!"
-msgstr "%2$s에서 %1$s까지 메시지"
+msgstr "%s에 답신"
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
@@ -5017,7 +4376,6 @@ msgstr "새 그룹을 만들 수 없습니다."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
 msgstr "새 그룹을 만들 수 없습니다."
 
@@ -5028,9 +4386,8 @@ msgstr "그룹 맴버십을 세팅할 수 없습니다."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "구독을 저장할 수 없습니다."
+msgstr "새 그룹을 만들 수 없습니다."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
@@ -5050,13 +4407,7 @@ msgstr "비밀번호 바꾸기"
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
-msgstr "이메일 처리 변경"
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "이용자 프로필"
+msgstr "메일 처리 변경"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
@@ -5070,9 +4421,9 @@ msgstr "기타"
 
 #. TRANS: Page title. %1$s is the title, %2$s is the site name.
 #: lib/action.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
 
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
@@ -5100,13 +4451,13 @@ msgstr "개인"
 #: lib/action.php:447
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "당신의 메일, 아바타, 비밀 번호, 프로필을 변경하세요."
+msgstr "당신의 메일, 아바타, 비밀 번호, 프로필을 변경하세요."
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr ""
+msgstr "연결"
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
@@ -5115,10 +4466,9 @@ msgstr "연결"
 
 #. TRANS: Tooltip for menu option "Admin"
 #: lib/action.php:458
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change site configuration"
-msgstr "주 사이트 네비게이션"
+msgstr "메일 주소 확인"
 
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
@@ -5126,13 +4476,6 @@ msgctxt "MENU"
 msgid "Admin"
 msgstr "관리"
 
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "%s에 친구를 가입시키기 위해 친구와 동료를 초대합니다."
-
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
 msgctxt "MENU"
@@ -5176,7 +4519,6 @@ msgstr "로그인"
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
 msgstr "도움말"
@@ -5355,38 +4697,17 @@ msgstr ""
 
 #. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
 #: lib/adminpanelaction.php:98
-#, fuzzy
 msgid "You cannot make changes to this site."
 msgstr "이 사이트의 이용자에 대해 권한정지 할 수 없습니다."
 
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "가입이 허용되지 않습니다."
-
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-#, fuzzy
-msgid "showForm() not implemented."
-msgstr "명령이 아직 실행되지 않았습니다."
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-#, fuzzy
-msgid "saveSettings() not implemented."
-msgstr "명령이 아직 실행되지 않았습니다."
-
 #. TRANS: Client error message thrown if design settings could not be deleted in
 #. TRANS: the admin panel Design.
 #: lib/adminpanelaction.php:284
-#, fuzzy
 msgid "Unable to delete design setting."
 msgstr "디자인 설정을 저장할 수 없습니다."
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
-#, fuzzy
 msgid "Basic site configuration"
 msgstr "메일 주소 확인"
 
@@ -5398,9 +4719,8 @@ msgstr "사이트"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:358
-#, fuzzy
 msgid "Design configuration"
-msgstr "SMS 인증"
+msgstr "메일 주소 확인"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
@@ -5410,9 +4730,8 @@ msgstr "디자인"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
-#, fuzzy
 msgid "User configuration"
-msgstr "SMS 인증"
+msgstr "메일 주소 확인"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
@@ -5421,85 +4740,50 @@ msgstr "사용자"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:374
-#, fuzzy
 msgid "Access configuration"
-msgstr "SMS 인증"
+msgstr "메일 주소 확인"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
-#, fuzzy
 msgid "Paths configuration"
-msgstr "SMS 인증"
+msgstr "메일 주소 확인"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:390
-#, fuzzy
 msgid "Sessions configuration"
-msgstr "SMS 인증"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "사이트 공지"
+msgstr "메일 주소 확인"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:406
-#, fuzzy
 msgid "Snapshots configuration"
-msgstr "SMS 인증"
+msgstr "메일 주소 확인"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-#, fuzzy
-msgid "Edit application"
-msgstr "응용 프로그램 수정"
-
 #. TRANS: Form guide.
 #: lib/applicationeditform.php:187
-#, fuzzy
 msgid "Icon for this application"
-msgstr "ì\9d\91ì\9a©í\94\84ë¡\9cê·¸ë\9e¨ ì\82­ì \9c"
+msgstr "ì\9d´ ì\9d\91ì\9a©í\94\84ë¡\9cê·¸ë\9e¨ ì\82­ì \9c ì\95\8a기"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
 #, php-format
 msgid "Describe your application in %d characters"
-msgstr ""
+msgstr "응용프로그램 삭제"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
 msgstr "응용프로그램 삭제"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "그룹 혹은 토픽의 홈페이지나 블로그 URL"
-
 #. TRANS: Form input field label.
 #: lib/applicationeditform.php:226
 msgid "Source URL"
 msgstr "소스 코드 URL"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:242
-#, fuzzy
-msgid "URL for the homepage of the organization"
-msgstr "그룹 혹은 토픽의 홈페이지나 블로그 URL"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
 msgid "URL to redirect to after authentication"
@@ -5508,12 +4792,12 @@ msgstr ""
 #. TRANS: Radio button label for application type
 #: lib/applicationeditform.php:278
 msgid "Browser"
-msgstr ""
+msgstr "브라우저"
 
 #. TRANS: Radio button label for application type
 #: lib/applicationeditform.php:295
 msgid "Desktop"
-msgstr ""
+msgstr "데스크톱"
 
 #. TRANS: Form guide.
 #: lib/applicationeditform.php:297
@@ -5523,12 +4807,12 @@ msgstr ""
 #. TRANS: Radio button label for access type.
 #: lib/applicationeditform.php:320
 msgid "Read-only"
-msgstr ""
+msgstr "읽기 전용"
 
 #. TRANS: Radio button label for access type.
 #: lib/applicationeditform.php:339
 msgid "Read-write"
-msgstr ""
+msgstr "읽기 쓰기"
 
 #. TRANS: Form guide.
 #: lib/applicationeditform.php:341
@@ -5543,12 +4827,12 @@ msgstr "취소"
 #. TRANS: Application access type
 #: lib/applicationlist.php:136
 msgid "read-write"
-msgstr ""
+msgstr "읽기 쓰기"
 
 #. TRANS: Application access type
 #: lib/applicationlist.php:138
 msgid "read-only"
-msgstr ""
+msgstr "읽기 전용"
 
 #. TRANS: Used in application list. %1$s is a modified date, %2$s is access type (read-write or read-only)
 #: lib/applicationlist.php:144
@@ -5558,7 +4842,6 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
 msgstr "제거"
@@ -5575,7 +4858,6 @@ msgstr "작성자"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
-#, fuzzy
 msgid "Provider"
 msgstr "미리보기"
 
@@ -5583,21 +4865,6 @@ msgstr "미리보기"
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-#, fuzzy
-msgid "Tags for this attachment"
-msgstr "해당하는 첨부파일이 없습니다."
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "비밀번호 변경"
-
-#: lib/authenticationplugin.php:236
-#, fuzzy
-msgid "Password changing is not allowed"
-msgstr "비밀번호 변경"
-
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
 msgstr "실행결과"
@@ -5610,44 +4877,21 @@ msgstr "실행 완료"
 msgid "Command failed"
 msgstr "실행 실패"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "이용자의 지속적인 게시글이 없습니다."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "이 이메일 주소로 사용자를 업데이트 할 수 없습니다."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "이 이메일 주소로 사용자를 업데이트 할 수 없습니다."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "죄송합니다. 이 명령은 아직 실행되지 않았습니다."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "찔러 보기를 보냈습니다."
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5655,55 +4899,39 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "게시글이 좋아하는 글로 지정되었습니다."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "당신은 이미 이 그룹의 멤버입니다."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "이용자 %1$s 의 그룹 %2$s 가입에 실패했습니다."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "전체이름: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "위치: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "홈페이지: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "자기소개: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5712,147 +4940,96 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "%s에게 보낸 직접 메시지"
-
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "직접 메시지 보내기 오류."
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "자기 자신의 소식은 재전송할 수 없습니다."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "이미 재전송된 소식입니다."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "게시글이 등록되었습니다."
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "사용자 세팅 오류"
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "이 게시글에 대해 답장하기"
-
-#: lib/command.php:573
-#, fuzzy
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
-msgstr "통지를 저장하는데 문제가 발생했습니다."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "구독하려는 사용자의 이름을 지정하십시오."
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "당신은 이 프로필에 구독되지 않고있습니다."
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "%s에게 구독되었습니다."
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "구독을 해제하려는 사용자의 이름을 지정하십시오."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "%s에서 구독을 해제했습니다."
+msgstr "사용자 세팅 오류"
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "명령이 아직 실행되지 않았습니다."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "알림끄기."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "알림을 끌 수 없습니다."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "알림이 켜졌습니다."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "알림을 켤 수 없습니다."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "%s에서 구독을 해제했습니다."
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "당신은 이 프로필에 구독되지 않고있습니다."
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "당신은 다음 사용자를 이미 구독하고 있습니다."
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "다른 사람을 구독 하실 수 없습니다."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "다른 사람을 구독 하실 수 없습니다."
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "당신은 해당 그룹의 멤버가 아닙니다."
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "당신은 해당 그룹의 멤버가 아닙니다."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5894,11 +5071,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "확인 코드가 없습니다."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5908,7 +5080,6 @@ msgid "You may wish to run the installer to fix this."
 msgstr ""
 
 #: lib/common.php:139
-#, fuzzy
 msgid "Go to the installer."
 msgstr "이 사이트에 로그인"
 
@@ -5925,33 +5096,22 @@ msgid "Updates by SMS"
 msgstr "SMS에 의한 업데이트"
 
 #: lib/connectsettingsaction.php:120
-#, fuzzy
 msgid "Connections"
 msgstr "연결"
 
-#: lib/connectsettingsaction.php:121
-#, fuzzy
-msgid "Authorized connected applications"
-msgstr "응용프로그램 삭제"
-
 #: lib/dberroraction.php:60
 msgid "Database error"
-msgstr ""
+msgstr "데이터베이스 오류"
 
 #: lib/designsettings.php:105
-#, fuzzy
 msgid "Upload file"
-msgstr "ì\98¬ë¦¬ê¸°"
+msgstr "ì\8b¤í\96\89 ì\8b¤í\8c¨"
 
 #: lib/designsettings.php:109
 msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
 msgstr "개인 아바타를 올릴 수 있습니다. 최대 파일 크기는 2MB입니다."
 
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
 msgid "Disfavor this notice"
 msgstr "이 게시글 좋아하기 취소"
@@ -5992,11 +5152,6 @@ msgstr "태그 필터링하기"
 msgid "All"
 msgstr "모든 것"
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "통신 회사를 선택 하세요."
-
 #: lib/galleryaction.php:140
 msgid "Tag"
 msgstr "태그"
@@ -6007,7 +5162,7 @@ msgstr "좁은 리스트에서 태그 선택하기"
 
 #: lib/galleryaction.php:143
 msgid "Go"
-msgstr "Go "
+msgstr "이동"
 
 #: lib/grantroleform.php:91
 #, php-format
@@ -6020,12 +5175,7 @@ msgstr "그룹 혹은 토픽의 홈페이지나 블로그 URL"
 
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
-msgstr ""
-
-#: lib/groupeditform.php:170
-#, php-format
-msgid "Describe the group or topic in %d characters"
-msgstr ""
+msgstr "응용프로그램 삭제"
 
 #: lib/groupeditform.php:179
 msgid ""
@@ -6045,11 +5195,6 @@ msgstr "그룹"
 msgid "Blocked"
 msgstr "차단"
 
-#: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "사용자를 차단합니다."
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -6065,7 +5210,7 @@ msgid "Add or edit %s logo"
 msgstr "%s 로고 추가 혹은 편집"
 
 #: lib/groupnav.php:120
-#, fuzzy, php-format
+#, php-format
 msgid "Add or edit %s design"
 msgstr "%s 로고 추가 혹은 편집"
 
@@ -6091,11 +5236,6 @@ msgstr "이 페이지는 귀하가 승인한 미디어 타입에서는 이용할
 msgid "Unsupported image file format."
 msgstr "지원하지 않는 그림 파일 형식입니다."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "당신그룹의 로고 이미지를 업로드할 수 있습니다."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "불완전한 업로드."
@@ -6118,16 +5258,16 @@ msgstr "알 수 없는 종류의 파일입니다"
 
 #: lib/imagefile.php:244
 msgid "MB"
-msgstr ""
+msgstr "MB"
 
 #: lib/imagefile.php:246
 msgid "kB"
-msgstr ""
+msgstr "kB"
 
 #: lib/jabber.php:387
 #, php-format
 msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
 
 #: lib/jabber.php:567
 #, php-format
@@ -6204,7 +5344,7 @@ msgstr ""
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
 msgstr "위치: %s"
 
@@ -6241,12 +5381,6 @@ msgstr "%s 상태"
 msgid "SMS confirmation"
 msgstr "SMS 인증"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "이 전화 번호는 인증 대기중입니다."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6298,7 +5432,7 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
 msgstr "누군가 내 글을 좋아하는 게시글로 추가했을 때, 메일을 보냅니다."
 
@@ -6333,11 +5467,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6378,7 +5507,7 @@ msgstr ""
 
 #: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr ""
+msgstr "방법"
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6396,11 +5525,6 @@ msgstr "죄송합니다. 귀하의 이메일이 아닙니다."
 msgid "Sorry, no incoming email allowed."
 msgstr "죄송합니다. 이메일이 허용되지 않습니다."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "지원하지 않는 그림 파일 형식입니다."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6440,7 +5564,6 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
 msgstr "소스 이용자를 확인할 수 없습니다."
 
@@ -6462,11 +5585,11 @@ msgstr "직접 메시지 보내기"
 msgid "To"
 msgstr "받는 이"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "사용 가능한 글자"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "보내기"
@@ -6475,29 +5598,24 @@ msgstr "보내기"
 msgid "Send a notice"
 msgstr "게시글 보내기"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
-msgstr "뭐하세요? %?"
-
-#: lib/noticeform.php:192
-#, fuzzy
-msgid "Attach"
-msgstr "첨부파일"
+msgstr "뭐하세요 %s님?"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr ""
+msgstr "내 위치 공유"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr ""
+msgstr "내 위치 공유하지 않기"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6529,17 +5647,18 @@ msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 
 #: lib/noticelist.php:453
-#, fuzzy
 msgid "at"
-msgstr "경로"
+msgstr "위치"
+
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
 #: lib/noticelist.php:568
-#, fuzzy
 msgid "in context"
-msgstr "ë\82´ì\9a©ì\9d´ ì\97\86ì\8aµë\8b\88ë\8b¤!"
+msgstr "문맥"
 
 #: lib/noticelist.php:603
-#, fuzzy
 msgid "Repeated by"
 msgstr "재전송됨"
 
@@ -6551,11 +5670,6 @@ msgstr "이 게시글에 대해 답장하기"
 msgid "Reply"
 msgstr "답장하기"
 
-#: lib/noticelist.php:675
-#, fuzzy
-msgid "Notice repeated"
-msgstr "게시글이 등록되었습니다."
-
 #: lib/nudgeform.php:116
 msgid "Nudge this user"
 msgstr "이 사용자 찔러 보기"
@@ -6584,11 +5698,6 @@ msgstr "리모트 프로필 업데이트 오류"
 msgid "Error inserting remote profile"
 msgstr "리모트 프로필 추가 오류"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "통지 삭제"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "예약 구독을 추가 할 수 없습니다."
@@ -6626,11 +5735,6 @@ msgstr "보낸 메시지"
 msgid "Tags in %s's notices"
 msgstr "%s의 게시글의 태그"
 
-#: lib/plugin.php:115
-#, fuzzy
-msgid "Unknown"
-msgstr "알려지지 않은 행동"
-
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
 msgstr "구독"
@@ -6689,45 +5793,23 @@ msgid "Popular"
 msgstr "인기있는"
 
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
 msgstr "첨부문서 없음"
 
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "이 게시글에 대해 답장하기"
-
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "예"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "이 게시글에 대해 답장하기"
-
 #: lib/revokeroleform.php:91
 #, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr ""
+msgstr "그룹 이용자는 차단해제"
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "받은 쪽지함"
-
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "이 사용자를 차단해제합니다."
-
 #: lib/searchaction.php:120
-#, fuzzy
 msgid "Search site"
 msgstr "검색 도움말"
 
@@ -6767,13 +5849,7 @@ msgstr "제목없는 섹션"
 msgid "More..."
 msgstr "더 보기..."
 
-#: lib/silenceform.php:67
-#, fuzzy
-msgid "Silence"
-msgstr "사이트 공지"
-
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
 msgstr "이 사용자 삭제"
 
@@ -6823,13 +5899,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "아바타 업데이트 실패"
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6855,7 +5924,6 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
 msgstr "차단 제거 에러!"
 
@@ -6867,19 +5935,9 @@ msgstr "상위 게시글 등록자"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "이 사용자를 차단해제합니다."
-
-#: lib/unsilenceform.php:67
-msgid "Unsilence"
-msgstr ""
-
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "이 사용자를 차단해제합니다."
+msgstr "이 사용자 삭제"
 
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
@@ -6889,15 +5947,9 @@ msgstr "이 사용자로부터 구독취소합니다."
 msgid "Unsubscribe"
 msgstr "구독 해제"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "이용자가 프로필을 가지고 있지 않습니다."
-
 #: lib/userprofile.php:117
-#, fuzzy
 msgid "Edit Avatar"
-msgstr "아바타"
+msgstr "아바타 편집"
 
 #: lib/userprofile.php:234 lib/userprofile.php:248
 msgid "User actions"
@@ -6908,7 +5960,6 @@ msgid "User deletion in progress..."
 msgstr ""
 
 #: lib/userprofile.php:263
-#, fuzzy
 msgid "Edit profile settings"
 msgstr "프로필 설정"
 
@@ -6928,11 +5979,6 @@ msgstr "메시지"
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "이용자 프로필"
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -6944,70 +5990,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "몇 초 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "1분 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "%d분 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "1시간 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "%d시간 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "하루 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "%d일 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "1달 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "%d달 전"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "1년 전"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "홈페이지 주소형식이 올바르지 않습니다."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 8c4981fbe2f1f1311db21856580d8e3c47b645ab..982858e9cc314ba32f06207f6d2f217a5c610660 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:12:44+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:30:59+0000\n"
 "Language-Team: Macedonian\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: mk\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +91,7 @@ msgstr "Зачувај"
 msgid "No such page."
 msgstr "Нема таква страница."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +111,7 @@ msgstr "Нема таква страница."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Нема таков корисник."
@@ -351,7 +352,8 @@ msgstr "Нема пронајдено статус со таков ID."
 msgid "This status is already a favorite."
 msgstr "Овој статус веќе Ви е омилен."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Не можам да создадам омилина забелешка."
 
@@ -466,15 +468,19 @@ msgstr "Алијасот не може да биде ист како прека
 msgid "Group not found."
 msgstr "Групата не е пронајдена."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Веќе членувате во таа група."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Блокирани сте од таа група од администраторот."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Не можам да го зачленам корисникот %1$s во групата 2$s."
@@ -483,7 +489,10 @@ msgstr "Не можам да го зачленам корисникот %1$s в
 msgid "You are not a member of this group."
 msgstr "Не членувате во оваа група."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Не можев да го отстранам корисникот %1$s од групата %2$s."
@@ -643,11 +652,13 @@ msgstr "Не можете да избришете статус на друг к
 msgid "No such notice."
 msgstr "Нема таква забелешка."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Не можете да ја повторувате сопствената забелешка."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Забелешката е веќе повторена."
 
@@ -663,7 +674,7 @@ msgstr "Нема пронајдено статус со тој ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Клиентот мора да укаже вредност за параметарот „статус“"
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -673,7 +684,7 @@ msgstr "Ова е предолго. Максималната дозволена
 msgid "Not found."
 msgstr "Не е пронајдено."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -886,6 +897,8 @@ msgstr "Блокирај го корисников"
 msgid "Failed to save block information."
 msgstr "Не можев да ги снимам инофрмациите за блокот."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -895,8 +908,8 @@ msgstr "Не можев да ги снимам инофрмациите за б
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Нема таква група."
 
@@ -934,15 +947,15 @@ msgstr "Објави во %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
-msgstr "Ð\9dема ÐºÐ¾Ð´ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80да."
+msgstr "Ð\9dема Ð¿Ð¾Ñ\82вÑ\80ден ÐºÐ¾Ð´."
 
 #: actions/confirmaddress.php:80
 msgid "Confirmation code not found."
-msgstr "Ð\9aодоÑ\82 Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80да не е пронајден."
+msgstr "Ð\9fоÑ\82вÑ\80дниоÑ\82 ÐºÐ¾Ð´ не е пронајден."
 
 #: actions/confirmaddress.php:85
 msgid "That confirmation code is not for you!"
-msgstr "Ð\9eвоÑ\98 ÐºÐ¾Ð´ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80да не е за Вас!"
+msgstr "Ð\9eвоÑ\98 Ð¿Ð¾Ñ\82вÑ\80ден ÐºÐ¾Ð´ не е за Вас!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
@@ -1533,7 +1546,7 @@ msgstr "Таа е-поштенска адреса е веќе зафатена 
 #: actions/emailsettings.php:391 actions/imsettings.php:348
 #: actions/smssettings.php:373
 msgid "Couldn't insert confirmation code."
-msgstr "Ð\9aодоÑ\82 Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80да не може да се внесе."
+msgstr "Ð\9fоÑ\82вÑ\80дниоÑ\82 ÐºÐ¾Ð´ не може да се внесе."
 
 #. TRANS: Message given saving valid e-mail address that is to be confirmed.
 #: actions/emailsettings.php:398
@@ -2097,8 +2110,8 @@ msgid ""
 "A confirmation code was sent to the IM address you added. You must approve %"
 "s for sending messages to you."
 msgstr ""
-"Ð\98Ñ\81пÑ\80аÑ\82ивме ÐºÐ¾Ð´ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80да Ð½Ð° IM Ð°Ð´Ñ\80еÑ\81аÑ\82а Ñ\88Ñ\82о Ñ\98а Ð´Ð¾Ð´Ð°Ð´Ð¾Ð²Ñ\82е. Ð\9cоÑ\80а Ð´Ð° Ð³Ð¾ "
-"одобрите %S за да ви испраќа пораки."
+"Ð\98Ñ\81пÑ\80аÑ\82ивме Ð¿Ð¾Ñ\82вÑ\80ден ÐºÐ¾Ð´ Ð½Ð° IM-адÑ\80еÑ\81аÑ\82а Ñ\88Ñ\82о Ñ\98а Ð´Ð¾Ð´Ð°Ð´Ð¾Ð²Ñ\82е. Ð\8cе Ð¼Ð¾Ñ\80а Ð´Ð° Ð¼Ñ\83 "
+"одобрите на %S да ви испраќа пораки."
 
 #. TRANS: Message given canceling IM address confirmation for the wrong IM address.
 #: actions/imsettings.php:388
@@ -2171,7 +2184,7 @@ msgstr "Веќе сте претплатени на овие корисници:
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2295,9 +2308,7 @@ msgstr "Мора да сте најавени за да можете да се 
 msgid "No nickname or ID."
 msgstr "Нема прекар или ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s се зачлени во групата %2$s"
@@ -2306,13 +2317,12 @@ msgstr "%1$s се зачлени во групата %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Мора да сте најавени за да можете да ја напуштите групата."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Не членувате во таа група."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s ја напушти групата %2$s"
@@ -2424,12 +2434,15 @@ msgstr "Овој образец служи за создавање нова гр
 msgid "New message"
 msgstr "Нова порака"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Не можете да испратите порака до овојо корисник."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Нема содржина!"
 
@@ -2437,7 +2450,8 @@ msgstr "Нема содржина!"
 msgid "No recipient specified."
 msgstr "Нема назначено примач."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2448,12 +2462,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Пораката е испратена"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Директната порака до %s е испратена."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax-грешка"
 
@@ -2461,7 +2477,7 @@ msgstr "Ajax-грешка"
 msgid "New notice"
 msgstr "Ново забелешка"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Забелешката е објавена"
 
@@ -2592,8 +2608,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Ве молиме користете само %s URL-адреси врз прост HTTP-код."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Ова не е поддржан формат на податотека."
 
@@ -3188,7 +3204,7 @@ msgstr "Грешка со кодот за потврдување."
 
 #: actions/recoverpassword.php:97
 msgid "This confirmation code is too old. Please start again."
-msgstr "Ð\9eвоÑ\98 ÐºÐ¾Ð´ Ð·Ð° Ð¿Ð¾Ñ\82вÑ\80да Ðµ Ð¿Ñ\80емногÑ\83 стар. Почнете од почеток."
+msgstr "Ð\9eвоÑ\98 ÐºÐ¾Ð´ Ð¿Ð¾Ñ\82вÑ\80ден ÐºÐ¾Ð´ Ðµ Ð¿Ñ\80естар. Почнете од почеток."
 
 #: actions/recoverpassword.php:111
 msgid "Could not update user with confirmed email address."
@@ -4928,23 +4944,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Нема таков профил (%1$d) за забелешката (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Грешка во базата на податоци при вметнувањето на хеш-ознаката: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Проблем со зачувувањето на белешката. Премногу долго."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Проблем со зачувувањето на белешката. Непознат корисник."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4952,7 +4968,7 @@ msgstr ""
 "неколку минути."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4961,29 +4977,29 @@ msgstr ""
 "неколку минути."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Забрането Ви е да објавувате забелешки на ова мрежно место."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Проблем во зачувувањето на белешката."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "На saveKnownGroups му е уакажан грешен тип"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Проблем при зачувувањето на групното приемно сандаче."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5031,12 +5047,6 @@ msgstr "Веќе претплатено!"
 msgid "User has blocked you."
 msgstr "Корисникот Ве има блокирано."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Не сте претплатени!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
 msgid "Could not delete self-subscription."
@@ -5639,44 +5649,21 @@ msgstr "Наредбата е завршена"
 msgid "Command failed"
 msgstr "Наредбата не успеа"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Не постои забелешка со таков id"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Корисникот нема последна забелешка"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Не можев да пронајдам корисник со прекар %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Не можев да пронајдам локален корисник со прекар %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Жалиме, оваа наредба сè уште не е имплементирана."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Нема баш логика да се подбуцнувате сами себеси."
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Испратено подбуцнување на %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5687,55 +5674,39 @@ msgstr ""
 "Претплатници: %2$s\n"
 "Забелешки: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Забелешката е обележана како омилена."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Веќе членувате во таа група"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Не можев да го зачленам корисникот  %1$s во групата %2$s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Не можев да го отстранам корисникот %1$s од групата %2$s."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Име и презиме: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Локација: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Домашна страница: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "За: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5746,145 +5717,103 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
-"Пораката е предолга - дозволени се највеќе %1$d знаци, а вие испративте %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Директната порака до %s е испратена"
+"Пораката е предолга - дозволени се највеќе %1$d знаци, а вие испративте %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Грашка при испаќањето на директната порака."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Не можете да повторувате сопствени забалешки"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Оваа забелешка е веќе повторена"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Забелешката од %s е повторена"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Грешка при повторувањето на белешката."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"Забелешката е предолга - треба да нема повеќе од %d знаци, а Вие испративте %"
-"d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Одговорот на %s е испратен"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Грешка при зачувувањето на белешката."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Назначете го името на корисникот на којшто сакате да се претплатите"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Не можете да се претплаќате на OMB профили по наредба."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Претплатено на %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Назначете го името на корисникот од кого откажувате претплата."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Претплатата на %s е откажана"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Наредбата сè уште не е имплементирана."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Известувањето е исклучено."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Не можам да исклучам известување."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Известувањето е вклучено."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Не можам да вклучам известување."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Наредбата за најава е оневозможена"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr "Оваа врска може да се употреби само еднаш, и трае само 2 минути: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Откажана претплата на  %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Не сте претплатени никому."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Не ни го испративте тој профил."
 msgstr[1] "Не ни го испративте тој профил."
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Никој не е претплатен на Вас."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Оддалечена претплата"
 msgstr[1] "Оддалечена претплата"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Не членувате во ниедна група."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Не ни го испративте тој профил."
 msgstr[1] "Не ни го испративте тој профил."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6158,11 +6087,6 @@ msgstr "Оваа страница не е достапна во форматот
 msgid "Unsupported image file format."
 msgstr "Неподдржан фомрат на слики."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Ова е предолго. Максималната должина е 140 знаци."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Делумно подигање."
@@ -6638,11 +6562,11 @@ msgstr "Испрати директна забелешка"
 msgid "To"
 msgstr "За"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Расположиви знаци"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Испрати"
@@ -6651,28 +6575,28 @@ msgstr "Испрати"
 msgid "Send a notice"
 msgstr "Испрати забелешка"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Што има ново, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Приложи"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Приложи податотека"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Споделете ја мојата локација."
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Не ја прикажувај мојата локација"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6709,6 +6633,10 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "во"
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "интернет"
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "во контекст"
@@ -7052,11 +6980,6 @@ msgstr "Откажи претплата од овој корсиник"
 msgid "Unsubscribe"
 msgstr "Откажи ја претплатата"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Корисникот %s (%d) нема профилен запис."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Уреди аватар"
@@ -7104,56 +7027,56 @@ msgid "Moderator"
 msgstr "Модератор"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "пред неколку секунди"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "пред една минута"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "пред %d минути"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "пред еден час"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "пред %d часа"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "пред еден ден"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "пред %d дена"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "пред еден месец"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "пред %d месеца"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "пред една година"
 
@@ -7166,9 +7089,3 @@ msgstr "%s не е важечка боја!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s не е важечка боја! Користете 3 или 6 шеснаесетни (hex) знаци."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Пораката е предолга - дозволени се највеќе %1$d знаци, а вие испративте %2$d."
index ab0506e34789d271b2c872a8f12933462b57fb8b..f86e72ab281d5b10d37e3ae8e38a99a883551d05 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:47+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:01+0000\n"
 "Language-Team: Norwegian (bokmål)‬\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: no\n"
 "X-Message-Group: out-statusnet\n"
@@ -89,6 +89,7 @@ msgstr "Lagre"
 msgid "No such page."
 msgstr "Ingen slik side."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -108,7 +109,7 @@ msgstr "Ingen slik side."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Ingen slik bruker"
@@ -165,23 +166,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Du kan prøve å [knuffe %1$s](../%2$s) fra dennes profil eller [poste noe for "
-"å få hans eller hennes oppmerksomhet](%%%%action.newnotice%%%%?"
-"status_textarea=%3$s)."
+"Vær den første til å [poste om dette emnet](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"Hvorfor ikke [opprette en konto](%%%%action.register%%%%) og så knuff %s "
-"eller post en notis for å få hans eller hennes oppmerksomhet."
+"Hvorfor ikke [registrere en konto](%%action.register%%) og vær den første "
+"til å poste en!"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -196,32 +196,6 @@ msgstr "Du og venner"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr "Oppdateringer fra %1$s og venner på %2$s!"
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "API-metode ikke funnet!"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -242,11 +216,6 @@ msgid ""
 "none."
 msgstr "Du må angi en verdi for parameteren 'device' med en av: sms, im, none."
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Klarte ikke å oppdatere bruker."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -257,11 +226,6 @@ msgstr "Klarte ikke å oppdatere bruker."
 msgid "User has no profile."
 msgstr "Brukeren har ingen profil."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Klarte ikke å lagre profil."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -286,12 +250,6 @@ msgstr ""
 msgid "Unable to save your design settings."
 msgstr "Kunne ikke lagre dine innstillinger for utseende."
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Klarte ikke å oppdatere bruker."
-
 #: actions/apiblockcreate.php:105
 msgid "You cannot block yourself!"
 msgstr "Du kan ikke blokkere deg selv!"
@@ -350,7 +308,8 @@ msgstr "Fant ingen status med den ID-en."
 msgid "This status is already a favorite."
 msgstr "Denne statusen er allerede en favoritt."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Kunne ikke opprette favoritt."
 
@@ -462,15 +421,19 @@ msgstr "Alias kan ikke være det samme som kallenavn."
 msgid "Group not found."
 msgstr "Gruppe ikke funnet."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Du er allerede medlem av den gruppen."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Du har blitt blokkert fra den gruppen av administratoren."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
@@ -479,7 +442,10 @@ msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
 msgid "You are not a member of this group."
 msgstr "Du er ikke et medlem av denne gruppen."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Kunne ikke fjerne bruker %1$s fra gruppe %2$s."
@@ -508,11 +474,6 @@ msgstr "%s grupper"
 msgid "groups on %s"
 msgstr "grupper på %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Last opp fil"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "Ingen verdi for oauth_token er oppgitt."
@@ -638,11 +599,13 @@ msgstr "Du kan ikke slette statusen til en annen bruker."
 msgid "No such notice."
 msgstr "Ingen slik notis."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Kan ikke gjenta din egen notis."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Allerede gjentatt den notisen."
 
@@ -658,7 +621,7 @@ msgstr "Ingen status med den ID-en funnet."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -668,7 +631,7 @@ msgstr "Det er for langt. Maks notisstørrelse er %d tegn."
 msgid "Not found."
 msgstr "Ikke funnet."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Maks notisstørrelse er %d tegn, inklusive vedleggs-URL."
@@ -783,7 +746,7 @@ msgid "Preview"
 msgstr "Forhåndsvis"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Slett"
 
@@ -876,6 +839,8 @@ msgstr "Blokker denne brukeren"
 msgid "Failed to save block information."
 msgstr "Kunne ikke lagre blokkeringsinformasjon."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -885,8 +850,8 @@ msgstr "Kunne ikke lagre blokkeringsinformasjon."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Ingen slik gruppe."
 
@@ -997,12 +962,6 @@ msgstr "Program ikke funnet."
 msgid "You are not the owner of this application."
 msgstr "Du er ikke eieren av dette programmet."
 
-#: actions/deleteapplication.php:102 actions/editapplication.php:127
-#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1263
-msgid "There was a problem with your session token."
-msgstr ""
-
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
 msgid "Delete application"
 msgstr "Slett program"
@@ -1064,7 +1023,7 @@ msgid "Do not delete this notice"
 msgstr "Ikke slett denne notisen"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Slett denne notisen"
 
@@ -2147,7 +2106,7 @@ msgstr "Du abonnerer allerede på disse brukerne:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2266,9 +2225,7 @@ msgstr "Du må være innlogget for å bli med i en gruppe."
 msgid "No nickname or ID."
 msgstr "ngen kallenavn eller ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s ble med i gruppen %2$s"
@@ -2277,13 +2234,12 @@ msgstr "%1$s ble med i gruppen %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Du må være innlogget for å forlate en gruppe."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Du er ikke et medlem av den gruppen."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s forlot gruppe %2$s"
@@ -2395,12 +2351,15 @@ msgstr "Bruk dette skjemaet for å opprette en ny gruppe."
 msgid "New message"
 msgstr "Ny melding"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Du kan ikke sende en melding til denne brukeren."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Inget innhold."
 
@@ -2408,7 +2367,8 @@ msgstr "Inget innhold."
 msgid "No recipient specified."
 msgstr "Ingen mottaker oppgitt."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2418,12 +2378,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Melding sendt"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Direktemelding til %s sendt."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax-feil"
 
@@ -2431,7 +2393,7 @@ msgstr "Ajax-feil"
 msgid "New notice"
 msgstr "Ny notis"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Notis postet"
 
@@ -2561,8 +2523,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Bare %s-nettadresser over vanlig HTTP."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Ikke et støttet dataformat."
 
@@ -2611,22 +2573,12 @@ msgid "No user ID specified."
 msgstr "Ingen bruker-ID spesifisert."
 
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "Nytt nick"
-
-#: actions/otp.php:90
-msgid "No login token requested."
-msgstr ""
+msgstr "Ingen notis spesifisert."
 
 #: actions/otp.php:95
-#, fuzzy
 msgid "Invalid login token specified."
-msgstr "Nytt nick"
-
-#: actions/otp.php:104
-msgid "Login token expired."
-msgstr ""
+msgstr "Ugyldig symbol."
 
 #: actions/outbox.php:58
 #, php-format
@@ -3341,7 +3293,7 @@ msgstr ""
 #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved.
 #: actions/register.php:535
 msgid "All rights reserved."
-msgstr ""
+msgstr "Alle rettigheter reservert."
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
@@ -3470,7 +3422,7 @@ msgstr "Du kan ikke gjenta din egen notis."
 msgid "You already repeated that notice."
 msgstr "Du har allerede gjentatt den notisen."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Gjentatt"
 
@@ -3505,13 +3457,11 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Svarstrøm for %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr ""
-"Dette er tidslinjen som viser svar til %1$s men %2$s har ikke mottat en "
-"notis for hans oppmerksomhet ennå."
+msgstr "Dette er tidslinjen for %1$s men %2$s har ikke postet noe ennå."
 
 #: actions/replies.php:204
 #, php-format
@@ -3523,13 +3473,13 @@ msgstr ""
 "eller [bli med i grupper](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Du kan prøve å [knuffe %1$s](../%2$s) eller [post noe for å få hans eller "
-"hennes oppmerksomhet](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+"Vær den første til å [poste om dette emnet](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3655,10 +3605,6 @@ msgstr ""
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:283
-msgid "Authorize URL"
-msgstr ""
-
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
@@ -3902,13 +3848,13 @@ msgstr ""
 "ikke begynne nå? :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Du kan prøve å knuffe %1$s eller [poste noe for å få hans eller hennes "
-"oppmerksomhet](%%%%action.newnotice%%%%?status_textarea=%2$s)."
+"Vær den første til å [poste om dette emnet](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/showstream.php:243
 #, php-format
@@ -4050,10 +3996,6 @@ msgstr ""
 msgid "Site Notice"
 msgstr "Nettstedsnotis"
 
-#: actions/sitenoticeadminpanel.php:67
-msgid "Edit site-wide message"
-msgstr ""
-
 #: actions/sitenoticeadminpanel.php:103
 msgid "Unable to save site notice."
 msgstr "Kunne ikke lagre nettstedsnotis."
@@ -4234,22 +4176,10 @@ msgstr "Ingen kode skrevet inn"
 msgid "Snapshots"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:65
-msgid "Manage snapshot configuration"
-msgstr ""
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-msgid "Invalid snapshot report URL."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4258,10 +4188,6 @@ msgstr ""
 msgid "In a scheduled job"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:206
-msgid "Data snapshots"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
 msgstr ""
@@ -4274,28 +4200,18 @@ msgstr "Frekvens"
 msgid "Snapshots will be sent once every N web hits"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:226
-msgid "Report URL"
-msgstr ""
-
 #: actions/snapshotadminpanel.php:227
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:248
-#, fuzzy
 msgid "Save snapshot settings"
-msgstr "Innstillinger for IM"
-
-#: actions/subedit.php:70
-msgid "You are not subscribed to that profile."
-msgstr ""
+msgstr "Lagre nettstedsinnstillinger"
 
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke lagre merkelapper."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
@@ -4309,19 +4225,10 @@ msgstr "Ingen slik profil."
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
 
-#: actions/subscribe.php:145
-msgid "Subscribed"
-msgstr ""
-
-#: actions/subscribers.php:50
-#, php-format
-msgid "%s subscribers"
-msgstr ""
-
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "Alle abonnementer"
+msgstr "%1$s gruppemedlemmer, side %2$d"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4343,22 +4250,10 @@ msgstr ""
 msgid "%s has no subscribers. Want to be the first?"
 msgstr ""
 
-#: actions/subscribers.php:114
-#, php-format
-msgid ""
-"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
-"%) and be the first?"
-msgstr ""
-
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Alle abonnementer"
-
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "Alle abonnementer"
+msgstr "%1$s grupper, side %2$d"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
@@ -4393,9 +4288,9 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Mikroblogg av %s"
+msgstr "Brukere som har merket seg selv med %1$s - side %2$d"
 
 #: actions/tag.php:87
 #, php-format
@@ -4412,10 +4307,6 @@ msgstr "Notismating for merkelapp %s (RSS 2.0)"
 msgid "Notice feed for tag %s (Atom)"
 msgstr "Notismating for merkelapp %s (Atom)"
 
-#: actions/tagother.php:39
-msgid "No ID argument."
-msgstr ""
-
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
@@ -4434,12 +4325,6 @@ msgstr "Foto"
 msgid "Tag user"
 msgstr "Merk bruker"
 
-#: actions/tagother.php:151
-msgid ""
-"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
-"separated"
-msgstr ""
-
 #: actions/tagother.php:193
 msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
@@ -4449,41 +4334,10 @@ msgstr ""
 msgid "Could not save tags."
 msgstr "Kunne ikke lagre merkelapper."
 
-#: actions/tagother.php:236
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr ""
-
-#: actions/tagrss.php:35
-msgid "No such tag."
-msgstr ""
-
 #: actions/unblock.php:59
 msgid "You haven't blocked that user."
 msgstr "Du har ikke blokkert den brukeren."
 
-#: actions/unsandbox.php:72
-msgid "User is not sandboxed."
-msgstr ""
-
-#: actions/unsilence.php:72
-msgid "User is not silenced."
-msgstr ""
-
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "Ingen profil med den ID'en."
-
-#: actions/unsubscribe.php:98
-msgid "Unsubscribed"
-msgstr ""
-
-#: actions/updateprofile.php:64 actions/userauthorization.php:337
-#, php-format
-msgid ""
-"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr ""
-
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
 msgctxt "TITLE"
@@ -4589,10 +4443,6 @@ msgstr "Avvis dette abonnementet"
 msgid "No authorization request!"
 msgstr ""
 
-#: actions/userauthorization.php:254
-msgid "Subscription authorized"
-msgstr ""
-
 #: actions/userauthorization.php:256
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
@@ -4600,10 +4450,6 @@ msgid ""
 "subscription. Your subscription token is:"
 msgstr ""
 
-#: actions/userauthorization.php:266
-msgid "Subscription rejected"
-msgstr ""
-
 #: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
@@ -4631,31 +4477,14 @@ msgstr ""
 msgid "Profile URL ‘%s’ is for a local user."
 msgstr ""
 
-#: actions/userauthorization.php:345
-#, php-format
-msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
-
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
 msgstr "Kan ikke lese avatar-URL ‘%s’"
 
-#: actions/userauthorization.php:355
-#, php-format
-msgid "Wrong image type for avatar URL ‘%s’."
-msgstr ""
-
 #: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
 msgid "Profile design"
-msgstr "Profil"
-
-#: actions/userdesignsettings.php:87 lib/designsettings.php:76
-msgid ""
-"Customize the way your profile looks with a background image and a colour "
-"palette of your choice."
-msgstr ""
+msgstr "Vis profilutseender"
 
 #: actions/userdesignsettings.php:282
 msgid "Enjoy your hotdog!"
@@ -4787,45 +4616,31 @@ msgstr "Ugyldig filnavn."
 
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
-#, fuzzy
 msgid "Group join failed."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Gruppeprofil"
 
 #. TRANS: Exception thrown when trying to leave a group the user is not a member of.
 #: classes/Group_member.php:55
-#, fuzzy
 msgid "Not part of group."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke oppdatere gruppe."
 
 #. TRANS: Exception thrown when trying to leave a group fails.
 #: classes/Group_member.php:63
-#, fuzzy
 msgid "Group leave failed."
-msgstr "Klarte ikke å lagre profil."
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Kunne ikke oppdatere gruppe."
+msgstr "Gruppeprofil"
 
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
-#, fuzzy, php-format
+#, php-format
 msgid "Could not create login token for %s"
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke opprette alias."
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-msgid "You are banned from sending direct messages."
-msgstr ""
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -4843,59 +4658,48 @@ msgstr "Kunne ikke oppdatere melding med ny nettadresse."
 msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
-#. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
-msgid "Database error inserting hashtag: %s"
-msgstr "Databasefeil ved innsetting av bruker i programmet OAuth."
-
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problem ved lagring av notis. For lang."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problem ved lagring av notis. Ukjent bruker."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-msgid "You are banned from posting notices on this site."
-msgstr ""
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problem ved lagring av notis."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problem ved lagring av gruppeinnboks."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4914,56 +4718,25 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Brukeren har ingen profil."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Kunne ikke lagre nettstedsnotis."
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-msgid "You have been banned from subscribing."
-msgstr ""
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
-
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "Bruker har blokkert deg."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Alle abonnementer"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke slette favoritt."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke slette favoritt."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke slette favoritt."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5014,9 +4787,8 @@ msgstr "Endre eposthåndtering"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:137
-#, fuzzy
 msgid "Design your profile"
-msgstr "Klarte ikke å lagre profil."
+msgstr "Brukerprofil"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
@@ -5039,11 +4811,6 @@ msgstr "%1$s - %2$s"
 msgid "Untitled page"
 msgstr "Side uten tittel"
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-msgid "Primary site navigation"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -5196,11 +4963,6 @@ msgstr "OSS/FAQ"
 msgid "TOS"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to privacy policy.
-#: lib/action.php:783
-msgid "Privacy"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option.
 #: lib/action.php:786
 msgid "Source"
@@ -5211,10 +4973,6 @@ msgstr "Kilde"
 msgid "Contact"
 msgstr "Kontakt"
 
-#: lib/action.php:794
-msgid "Badge"
-msgstr ""
-
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
 msgid "StatusNet software license"
@@ -5245,11 +5003,6 @@ msgid ""
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-msgid "Site content license"
-msgstr ""
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5275,11 +5028,6 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
@@ -5314,11 +5062,6 @@ msgstr ""
 msgid "You cannot make changes to this site."
 msgstr "Du kan ikke gjøre endringer på dette nettstedet."
 
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-msgid "Changes to that panel are not allowed."
-msgstr ""
-
 #. TRANS: Client error message.
 #: lib/adminpanelaction.php:229
 msgid "showForm() not implemented."
@@ -5329,28 +5072,12 @@ msgstr "showForm() ikke implementert."
 msgid "saveSettings() not implemented."
 msgstr "saveSettings() ikke implementert."
 
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-msgid "Unable to delete design setting."
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-msgid "Basic site configuration"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
 msgctxt "MENU"
 msgid "Site"
 msgstr "Nettsted"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-msgid "Design configuration"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
 msgctxt "MENU"
@@ -5377,21 +5104,11 @@ msgstr "Tilgangskonfigurasjon"
 msgid "Paths configuration"
 msgstr "Stikonfigurasjon"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-msgid "Sessions configuration"
-msgstr ""
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:398
 msgid "Edit site notice"
 msgstr "Rediger nettstedsnotis"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-msgid "Snapshots configuration"
-msgstr ""
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
@@ -5428,11 +5145,6 @@ msgstr "Nettadresse til hjemmesiden for dette programmet"
 msgid "Source URL"
 msgstr "Nettadresse til kilde"
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
 msgid "URL for the homepage of the organization"
@@ -5521,10 +5233,6 @@ msgstr "Leverandør"
 msgid "Notices where this attachment appears"
 msgstr "Notiser hvor dette vedlegget forekommer"
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
 msgid "Password changing failed"
 msgstr "Endring av passord mislyktes"
@@ -5545,44 +5253,21 @@ msgstr "Kommando fullført"
 msgid "Command failed"
 msgstr "Kommando feilet"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Notis med den id'en finnes ikke"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Bruker har ingen siste notis"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Fant ingen bruker med kallenavn %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Fant ingen lokal bruker med kallenavn %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Beklager, denne kommandoen er ikke implementert ennå."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Det gir ikke så mye mening å knuffe seg selv."
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Knuff sendt til %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5593,55 +5278,39 @@ msgstr ""
 "Abonnenter: %2$s\n"
 "Notiser: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Notis markert som favoritt."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Du er allerede medlem av den gruppen."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Kunne ikke legge bruker %1$s til gruppe %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Kunne ikke fjerne bruker %1$s fra gruppe %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Fullt navn: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Posisjon: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Hjemmeside: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Om: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5650,145 +5319,93 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Melding for lang - maks er %1$d tegn, du sendte %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Direktemelding til %s sendt"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Melding for lang - maks er %1$d tegn, du sendte %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Feil ved sending av direktemelding."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Kan ikke gjenta din egen notis"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Allerede gjentatt den notisen"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Notis fra %s repetert"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Feil ved repetering av notis."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Notis for lang - maks er %d tegn, du sendte %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Svar til %s sendt"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Feil ved lagring av notis."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr ""
-
-#: lib/command.php:628
-msgid "Can't subscribe to OMB profiles by command."
-msgstr ""
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr ""
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr ""
-
-#: lib/command.php:682 lib/command.php:705
-msgid "Command not yet implemented."
+msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:685
-msgid "Notification off."
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:710
-msgid "Can't turn on notification."
-msgstr ""
-
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr ""
-
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Svar til %s"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Ikke autorisert."
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Ikke autorisert."
 msgstr[1] "Ikke autorisert."
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Svar til %s"
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Svar til %s"
 msgstr[1] "Svar til %s"
 
-#: lib/command.php:822
-#, fuzzy
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
-msgstr "Du er allerede logget inn!"
+msgstr "Du er ikke et medlem av den gruppen."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Du er allerede logget inn!"
 msgstr[1] "Du er allerede logget inn!"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5842,10 +5459,6 @@ msgstr "Jeg så etter konfigurasjonfiler på følgende seter: "
 msgid "You may wish to run the installer to fix this."
 msgstr ""
 
-#: lib/common.php:139
-msgid "Go to the installer."
-msgstr ""
-
 #: lib/connectsettingsaction.php:110
 msgid "IM"
 msgstr ""
@@ -5862,10 +5475,6 @@ msgstr "Oppdatert med SMS"
 msgid "Connections"
 msgstr "Tilkoblinger"
 
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr "Databasefeil"
@@ -5874,27 +5483,6 @@ msgstr "Databasefeil"
 msgid "Upload file"
 msgstr "Last opp fil"
 
-#: lib/designsettings.php:109
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr ""
-
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-msgid "Disfavor this notice"
-msgstr ""
-
-#: lib/favorform.php:114 lib/favorform.php:140
-msgid "Favor this notice"
-msgstr ""
-
-#: lib/favorform.php:140
-msgid "Favor"
-msgstr ""
-
 #: lib/feed.php:85
 msgid "RSS 1.0"
 msgstr "RSS 1.0"
@@ -5916,23 +5504,13 @@ msgid "Export data"
 msgstr "Eksporter data"
 
 #: lib/galleryaction.php:121
-#, fuzzy
 msgid "Filter tags"
-msgstr "Feed for taggen %s"
+msgstr ""
 
 #: lib/galleryaction.php:131
 msgid "All"
 msgstr "Alle"
 
-#: lib/galleryaction.php:139
-msgid "Select tag to filter"
-msgstr ""
-
-#: lib/galleryaction.php:140
-#, fuzzy
-msgid "Tag"
-msgstr "Tagger"
-
 #: lib/galleryaction.php:141
 msgid "Choose a tag to narrow list"
 msgstr ""
@@ -5947,24 +5525,17 @@ msgid "Grant this user the \"%s\" role"
 msgstr "Innvilg denne brukeren rollen «%s»"
 
 #: lib/groupeditform.php:163
-#, fuzzy
 msgid "URL of the homepage or blog of the group or topic"
-msgstr "URL til din hjemmeside, blogg, eller profil på annen nettside."
+msgstr "Nettadresse til hjemmesiden for dette programmet"
 
 #: lib/groupeditform.php:168
-#, fuzzy
 msgid "Describe the group or topic"
-msgstr "Beskriv degselv og dine interesser med 140 tegn"
+msgstr "Beskriv programmet ditt"
 
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Beskriv degselv og dine interesser med 140 tegn"
-
-#: lib/groupeditform.php:179
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr ""
+msgstr "Beskriv programmet ditt med %d tegn"
 
 #: lib/groupeditform.php:187
 #, php-format
@@ -5998,11 +5569,6 @@ msgstr "Logo"
 msgid "Add or edit %s logo"
 msgstr "Legg til eller rediger %s logo"
 
-#: lib/groupnav.php:120
-#, php-format
-msgid "Add or edit %s design"
-msgstr ""
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupper med flest medlemmer"
@@ -6011,11 +5577,6 @@ msgstr "Grupper med flest medlemmer"
 msgid "Groups with most posts"
 msgstr "Grupper med flest innlegg"
 
-#: lib/grouptagcloudsection.php:56
-#, php-format
-msgid "Tags in %s group's notices"
-msgstr ""
-
 #. TRANS: Client exception 406
 #: lib/htmloutputter.php:104
 msgid "This page is not available in a media type you accept"
@@ -6408,7 +5969,7 @@ msgstr ""
 "engasjere andre brukere i en samtale. Personer kan sende deg meldinger som "
 "bare du kan se."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "fra"
 
@@ -6420,14 +5981,6 @@ msgstr "Kunne ikke tolke meldingen."
 msgid "Not a registered user."
 msgstr "Ikke en registrert bruker."
 
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
-#: lib/mailhandler.php:50
-msgid "Sorry, no incoming email allowed."
-msgstr ""
-
 #: lib/mailhandler.php:228
 #, php-format
 msgid "Unsupported message type: %s"
@@ -6493,11 +6046,11 @@ msgstr "Send en direktenotis"
 msgid "To"
 msgstr "Til"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Tilgjengelige tegn"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Send"
@@ -6506,28 +6059,28 @@ msgstr "Send"
 msgid "Send a notice"
 msgstr "Send en notis"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Hva skjer %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Legg ved"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Legg ved en fil"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Del min posisjon"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Ikke del min posisjon"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6564,23 +6117,23 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "på"
 
-#: lib/noticelist.php:567
-msgid "in context"
+#: lib/noticelist.php:502
+msgid "web"
 msgstr ""
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Repetert av"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Svar på denne notisen"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Svar"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Notis repetert"
 
@@ -6596,30 +6149,10 @@ msgstr "Knuff"
 msgid "Send a nudge to this user"
 msgstr "Send et knuff til denne brukeren"
 
-#: lib/oauthstore.php:283
-msgid "Error inserting new profile"
-msgstr ""
-
-#: lib/oauthstore.php:291
-msgid "Error inserting avatar"
-msgstr ""
-
-#: lib/oauthstore.php:306
-msgid "Error updating remote profile"
-msgstr ""
-
-#: lib/oauthstore.php:311
-msgid "Error inserting remote profile"
-msgstr ""
-
 #: lib/oauthstore.php:345
 msgid "Duplicate notice"
 msgstr "Duplikatnotis"
 
-#: lib/oauthstore.php:490
-msgid "Couldn't insert new subscription."
-msgstr ""
-
 #: lib/personalgroupnav.php:99
 msgid "Personal"
 msgstr "Personlig"
@@ -6648,11 +6181,6 @@ msgstr "Utboks"
 msgid "Your sent messages"
 msgstr "Dine sendte meldinger"
 
-#: lib/personaltagcloudsection.php:56
-#, php-format
-msgid "Tags in %s's notices"
-msgstr ""
-
 #: lib/plugin.php:115
 msgid "Unknown"
 msgstr "Ukjent"
@@ -6703,20 +6231,7 @@ msgid "User groups"
 msgstr "Brukergrupper"
 
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
-#, fuzzy
 msgid "Recent tags"
-msgstr "Nyeste Tagger"
-
-#: lib/publicgroupnav.php:88
-msgid "Featured"
-msgstr ""
-
-#: lib/publicgroupnav.php:92
-msgid "Popular"
-msgstr ""
-
-#: lib/redirectingaction.php:95
-msgid "No return-to arguments."
 msgstr ""
 
 #: lib/repeatform.php:107
@@ -6731,23 +6246,13 @@ msgstr "Ja"
 msgid "Repeat this notice"
 msgstr "Repeter denne notisen"
 
-#: lib/revokeroleform.php:91
-#, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr ""
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-msgid "Sandbox"
-msgstr ""
-
 #: lib/sandboxform.php:78
-#, fuzzy
 msgid "Sandbox this user"
-msgstr "Kan ikke slette notisen."
+msgstr "Opphev blokkering av denne brukeren"
 
 #: lib/searchaction.php:120
 msgid "Search site"
@@ -6781,47 +6286,23 @@ msgstr "Finn innhold i notiser"
 msgid "Find groups on this site"
 msgstr "Finn grupper på dette nettstedet"
 
-#: lib/section.php:89
-msgid "Untitled section"
-msgstr ""
-
 #: lib/section.php:106
 msgid "More..."
 msgstr "Mer..."
 
-#: lib/silenceform.php:67
-msgid "Silence"
-msgstr ""
-
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "Kan ikke slette notisen."
-
-#: lib/subgroupnav.php:83
-#, php-format
-msgid "People %s subscribes to"
-msgstr ""
+msgstr "Slett denne brukeren"
 
 #: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "Svar til %s"
-
-#: lib/subgroupnav.php:99
 #, php-format
-msgid "Groups %s is a member of"
-msgstr ""
+msgid "People subscribed to %s"
+msgstr "Fjernabonner"
 
 #: lib/subgroupnav.php:105
 msgid "Invite"
 msgstr "Inviter"
 
-#: lib/subgroupnav.php:106
-#, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -6844,13 +6325,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Oppdatering av avatar mislyktes."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6875,54 +6349,17 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Feil ved oppdatering av fjernprofil."
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
 
-#: lib/unsandboxform.php:69
-msgid "Unsandbox"
-msgstr ""
-
 #: lib/unsandboxform.php:80
-#, fuzzy
 msgid "Unsandbox this user"
-msgstr "Kan ikke slette notisen."
-
-#: lib/unsilenceform.php:67
-msgid "Unsilence"
-msgstr ""
+msgstr "Opphev blokkering av denne brukeren"
 
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "Kan ikke slette notisen."
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-msgid "Unsubscribe from this user"
-msgstr ""
-
-#: lib/unsubscribeform.php:137
-msgid "Unsubscribe"
-msgstr ""
-
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Brukeren har ingen profil."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Brukerbilde"
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-msgid "User actions"
-msgstr ""
+msgstr "Opphev blokkering av denne brukeren"
 
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
@@ -6963,56 +6400,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "noen få sekunder siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "omtrent ett minutt siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "omtrent %d minutter siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "omtrent én time siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "omtrent %d timer siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "omtrent én dag siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "omtrent %d dager siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "omtrent én måned siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "omtrent %d måneder siden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "omtrent ett år siden"
 
@@ -7025,8 +6462,3 @@ msgstr "%s er ikke en gyldig farge."
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s er ikke en gyldig farge. Bruk 3 eller 6 heksadesimale tegn."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Melding for lang - maks er %1$d tegn, du sendte %2$d."
index b704f8aefaef484ca5741fc788d811ba50fe774c..7f5f40b2155e5a3ca42b746e5c2fd62941952475 100644 (file)
@@ -11,12 +11,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:12:58+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:13+0000\n"
 "Language-Team: Dutch\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: nl\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +91,7 @@ msgstr "Opslaan"
 msgid "No such page."
 msgstr "Deze pagina bestaat niet."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +111,7 @@ msgstr "Deze pagina bestaat niet."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Onbekende gebruiker."
@@ -354,7 +355,8 @@ msgstr "Er is geen status gevonden met dit ID."
 msgid "This status is already a favorite."
 msgstr "Deze mededeling staat al in uw favorietenlijst."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Het was niet mogelijk een favoriet aan te maken."
 
@@ -473,15 +475,19 @@ msgstr "Een alias kan niet hetzelfde zijn als de gebruikersnaam."
 msgid "Group not found."
 msgstr "De groep is niet aangetroffen."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "U bent al lid van die groep."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Een beheerder heeft ingesteld dat u geen lid mag worden van die groep."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Het was niet mogelijk gebruiker %1$s toe te voegen aan de groep %2$s."
@@ -490,7 +496,10 @@ msgstr "Het was niet mogelijk gebruiker %1$s toe te voegen aan de groep %2$s."
 msgid "You are not a member of this group."
 msgstr "U bent geen lid van deze groep."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Het was niet mogelijk gebruiker %1$s uit de group %2$s te verwijderen."
@@ -656,11 +665,13 @@ msgstr "U kunt de status van een andere gebruiker niet verwijderen."
 msgid "No such notice."
 msgstr "De mededeling bestaat niet."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "U kunt uw eigen mededeling niet herhalen."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "U hebt die mededeling al herhaald."
 
@@ -676,7 +687,7 @@ msgstr "Er is geen status gevonden met dit ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "De client moet een parameter \"status\" met een waarde opgeven."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -686,7 +697,7 @@ msgstr "De mededeling is te lang. Gebruik maximaal %d tekens."
 msgid "Not found."
 msgstr "Niet aangetroffen."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -898,6 +909,8 @@ msgstr "Deze gebruiker blokkeren"
 msgid "Failed to save block information."
 msgstr "Het was niet mogelijk om de blokkadeinformatie op te slaan."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -907,8 +920,8 @@ msgstr "Het was niet mogelijk om de blokkadeinformatie op te slaan."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "De opgegeven groep bestaat niet."
 
@@ -2189,7 +2202,7 @@ msgstr "U bent als geabonneerd op deze gebruikers:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2315,9 +2328,7 @@ msgstr "U moet aangemeld zijn om lid te worden van een groep."
 msgid "No nickname or ID."
 msgstr "Geen gebruikersnaam of ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s is lid geworden van de groep %2$s"
@@ -2326,13 +2337,12 @@ msgstr "%1$s is lid geworden van de groep %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "U moet aangemeld zijn om een groep te kunnen verlaten."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "U bent geen lid van deze groep"
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s heeft de groep %2$s verlaten"
@@ -2446,12 +2456,15 @@ msgstr "Gebruik dit formulier om een nieuwe groep aan te maken."
 msgid "New message"
 msgstr "Nieuw bericht"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "U kunt geen bericht naar deze gebruiker zenden."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Geen inhoud!"
 
@@ -2459,7 +2472,8 @@ msgstr "Geen inhoud!"
 msgid "No recipient specified."
 msgstr "Er is geen ontvanger aangegeven."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Stuur geen berichten naar uzelf. Zeg het gewoon in uw hoofd."
@@ -2468,12 +2482,14 @@ msgstr "Stuur geen berichten naar uzelf. Zeg het gewoon in uw hoofd."
 msgid "Message sent"
 msgstr "Bericht verzonden."
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Het directe bericht aan %s is verzonden."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Er is een Ajax-fout opgetreden"
 
@@ -2481,7 +2497,7 @@ msgstr "Er is een Ajax-fout opgetreden"
 msgid "New notice"
 msgstr "Nieuw bericht"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "De mededeling is verzonden"
 
@@ -2617,8 +2633,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Alleen URL's voor %s via normale HTTP alstublieft."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Geen ondersteund gegevensformaat."
 
@@ -4964,27 +4980,27 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Er is geen profiel (%1$d) te vinden bij de mededeling (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Er is een databasefout opgetreden bij de invoer van de hashtag: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr ""
 "Er is een probleem opgetreden bij het opslaan van de mededeling. Deze is te "
 "lang."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr ""
 "Er was een probleem bij het opslaan van de mededeling. De gebruiker is "
 "onbekend."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4992,7 +5008,7 @@ msgstr ""
 "het over enige tijd weer."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -5001,24 +5017,24 @@ msgstr ""
 "plaats over een aantal minuten pas weer een bericht."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 "U bent geblokkeerd en mag geen mededelingen meer achterlaten op deze site."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Het gegevenstype dat is opgegeven aan saveKnownGroups is onjuist"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 "Er is een probleem opgetreden bij het opslaan van het Postvak IN van de "
@@ -5026,7 +5042,7 @@ msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5683,44 +5699,21 @@ msgstr "Het commando is uitgevoerd"
 msgid "Command failed"
 msgstr "Het uitvoeren van het commando is mislukt"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Er bestaat geen mededeling met dat ID"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Deze gebruiker heeft geen laatste mededeling"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "De gebruiker %s is niet aangetroffen"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "De lokale gebruiker %s is niet aangetroffen"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Dit commando is nog niet geïmplementeerd."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Het heeft niet zoveel zin om uzelf te porren..."
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "De por naar %s is verzonden"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5731,56 +5724,39 @@ msgstr ""
 "Abonnees: %2$s\n"
 "Mededelingen: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "De mededeling is op de favorietenlijst geplaatst."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "U bent al lid van deze groep"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr ""
-"Het was niet mogelijk om de gebruiker %1$s toe te voegen aan de groep %2$s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Het was niet mogelijk gebruiker %1$s uit de group %2$s te verwijderen."
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Volledige naam: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Locatie: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Thuispagina: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Over: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5791,149 +5767,104 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 "Het bericht te is lang. De maximale lengte is %1$d tekens. De lengte van uw "
 "bericht was %2$d."
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Het directe bericht aan %s is verzonden"
-
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Er is een fout opgetreden bij het verzonden van het directe bericht."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "U kunt uw eigen mededelingen niet herhalen."
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "U hebt die mededeling al herhaald."
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "De mededeling van %s is herhaald"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Er is een fout opgetreden bij het herhalen van de mededeling."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"De mededeling is te lang. De maximale lengte is %d tekens. Uw mededeling "
-"bevatte %d tekens"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Het antwoord aan %s is verzonden"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Er is een fout opgetreden bij het opslaan van de mededeling."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Geef de naam op van de gebruiker waarop u wilt abonneren"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Abonneren op OMB-profielen op commando is niet mogelijk."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Geabonneerd op %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr ""
-"Geef de naam op van de gebruiker waarvoor u het abonnement wilt opzeggen"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Uw abonnement op %s is opgezegd"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Dit commando is nog niet geïmplementeerd."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notificaties uitgeschakeld."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Het is niet mogelijk de mededelingen uit te schakelen."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notificaties ingeschakeld."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Het is niet mogelijk de notificatie uit te schakelen."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Het aanmeldcommando is uitgeschakeld"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Deze verwijzing kan slechts één keer gebruikt worden en is twee minuten "
-"geldig: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Het abonnement van %s is opgeheven"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "U bent op geen enkele gebruiker geabonneerd."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "U bent geabonneerd op deze gebruiker:"
 msgstr[1] "U bent geabonneerd op deze gebruikers:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Niemand heeft een abonnenment op u."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Deze gebruiker is op u geabonneerd:"
 msgstr[1] "Deze gebruikers zijn op u geabonneerd:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "U bent lid van geen enkele groep."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "U bent lid van deze groep:"
 msgstr[1] "U bent lid van deze groepen:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6690,11 +6621,11 @@ msgstr "Directe mededeling verzenden"
 msgid "To"
 msgstr "Aan"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Beschikbare tekens"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Verzenden"
@@ -6703,28 +6634,28 @@ msgstr "Verzenden"
 msgid "Send a notice"
 msgstr "Mededeling verzenden"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Hallo, %s."
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Toevoegen"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Bestand toevoegen"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Mijn locatie bekend maken"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Mijn locatie niet bekend maken"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6761,6 +6692,10 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "op"
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "in context"
@@ -7112,11 +7047,6 @@ msgstr "Uitschrijven van deze gebruiker"
 msgid "Unsubscribe"
 msgstr "Abonnement opheffen"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Gebruiker %s (%d) heeft geen profielrecord."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Avatar bewerken"
@@ -7164,56 +7094,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "een paar seconden geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "ongeveer een minuut geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "ongeveer %d minuten geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "ongeveer een uur geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "ongeveer %d uur geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "ongeveer een dag geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "ongeveer %d dagen geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "ongeveer een maand geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "ongeveer %d maanden geleden"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "ongeveer een jaar geleden"
 
@@ -7226,10 +7156,3 @@ msgstr "%s is geen geldige kleur."
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s is geen geldige kleur. Gebruik drie of zes hexadecimale tekens."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Het bericht te is lang. De maximale lengte is %1$d tekens. De lengte van uw "
-"bericht was %2$d."
index 08b25c9e6b61eeba7e16b6f1dd1e3b82441f6ddf..11c61934fe5f8e89ddcfcff185f0dbfa723aea6f 100644 (file)
@@ -1,6 +1,7 @@
 # Translation of StatusNet to Norwegian Nynorsk
 #
 # Author@translatewiki.net: Nghtwlkr
+# Author@translatewiki.net: Ranveig
 # --
 # This file is distributed under the same license as the StatusNet package.
 #
@@ -8,59 +9,27 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:48+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:06+0000\n"
 "Language-Team: Norwegian Nynorsk\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: nn\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "Godta"
-
-#. TRANS: Page notice
-#: actions/accessadminpanel.php:67
-#, fuzzy
-msgid "Site access settings"
-msgstr "Avatar-innstillingar"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "Registrér"
-
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "Personvern"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
 msgstr ""
 
-#. TRANS: Checkbox label for configuring site as invite only.
-#: actions/accessadminpanel.php:176
-#, fuzzy
-msgid "Invite only"
-msgstr "Invitér"
-
 #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
 #: actions/accessadminpanel.php:183
 msgid "Disable new registrations."
@@ -68,35 +37,10 @@ msgstr ""
 
 #. TRANS: Checkbox label for disabling new user registrations.
 #: actions/accessadminpanel.php:185
-#, fuzzy
 msgid "Closed"
-msgstr "Blokkér"
-
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Avatar-innstillingar"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Lagra"
-
-#. TRANS: Server error when page not found (404)
-#: actions/all.php:68 actions/public.php:98 actions/replies.php:93
-#: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
-msgid "No such page."
-msgstr "Dette emneord finst ikkje."
+msgstr ""
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -116,16 +60,16 @@ msgstr "Dette emneord finst ikkje."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Brukaren finst ikkje."
 
 #. TRANS: Page title. %1$s is user nickname, %2$d is page number
 #: actions/all.php:90
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s and friends, page %2$d"
-msgstr "%s med vener, side %d"
+msgstr "%s med vener"
 
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
@@ -137,24 +81,6 @@ msgstr "%s med vener, side %d"
 msgid "%s and friends"
 msgstr "%s med vener"
 
-#. TRANS: %1$s is user nickname
-#: actions/all.php:107
-#, fuzzy, php-format
-msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "Straum for vener av %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:116
-#, fuzzy, php-format
-msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "Straum for vener av %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, fuzzy, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr "Straum for vener av %s"
-
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
 #, php-format
@@ -184,12 +110,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-#, fuzzy
-msgid "You and friends"
-msgstr "%s med vener"
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -198,32 +118,6 @@ msgstr "%s med vener"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr "Oppdateringar frå %1$s og vener på %2$s!"
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Fann ikkje API-metode."
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -244,11 +138,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Kan ikkje oppdatera brukar."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -259,11 +148,6 @@ msgstr "Kan ikkje oppdatera brukar."
 msgid "User has no profile."
 msgstr "Brukaren har inga profil."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Kan ikkje lagra profil."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -276,28 +160,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
-msgid "Unable to save your design settings."
-msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Kan ikkje oppdatera brukar."
-
-#: actions/apiblockcreate.php:105
-#, fuzzy
-msgid "You cannot block yourself!"
-msgstr "Kan ikkje oppdatera brukar."
-
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
 msgstr "Blokkering av brukar feila."
@@ -306,11 +168,6 @@ msgstr "Blokkering av brukar feila."
 msgid "Unblock user failed."
 msgstr "De-blokkering av brukar feila."
 
-#: actions/apidirectmessage.php:89
-#, fuzzy, php-format
-msgid "Direct messages from %s"
-msgstr "Direkte meldingar til %s"
-
 #: actions/apidirectmessage.php:93
 #, php-format
 msgid "All the direct messages sent from %s"
@@ -330,11 +187,6 @@ msgstr "Alle direkte meldingar sendt til %s"
 msgid "No message text!"
 msgstr "Inga meldingstekst!"
 
-#: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
-msgid "That's too long. Max message size is %d chars."
-msgstr "Det er for langt. Ein notis kan berre være 140 teikn."
-
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
 msgstr "Kunne ikkje finne mottakar."
@@ -348,28 +200,18 @@ msgstr "Kan ikkje senda direktemeldingar til brukarar som du ikkje er ven med."
 msgid "No status found with that ID."
 msgstr "Fann ingen status med den ID-en."
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Denne notisen er alt ein favoritt!"
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Kunne ikkje lagre favoritt."
 
-#: actions/apifavoritedestroy.php:123
-#, fuzzy
-msgid "That status is not a favorite."
-msgstr "Denne notisen er ikkje ein favoritt!"
-
 #: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
 msgid "Could not delete favorite."
 msgstr "Kunne ikkje slette favoritt."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Fann ikkje brukaren, so han kan ikkje fylgjast"
+msgstr "Kan ikkje fylgja brukar: %s er allereie på lista di."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -377,29 +219,20 @@ msgid "Could not follow user: %s is already on your list."
 msgstr "Kan ikkje fylgja brukar: %s er allereie på lista di."
 
 #: actions/apifriendshipsdestroy.php:109
-#, fuzzy
 msgid "Could not unfollow user: User not found."
-msgstr "Fann ikkje brukaren, so han kan ikkje fylgjast"
-
-#: actions/apifriendshipsdestroy.php:120
-#, fuzzy
-msgid "You cannot unfollow yourself."
-msgstr "Kan ikkje oppdatera brukar."
+msgstr "Kan ikkje fylgja brukar: %s er allereie på lista di."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "To brukar IDer eller kallenamn er naudsynte."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "Kan ikkje hente offentleg straum."
+msgstr "Kan ikkje oppdatera brukar."
 
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "Kan ikkje finna einkvan status."
+msgstr "Kan ikkje oppdatera brukar."
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
@@ -434,9 +267,9 @@ msgstr "Ditt fulle namn er for langt (maksimalt 255 teikn)."
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "skildringa er for lang (maks 140 teikn)."
+msgstr "Plassering er for lang (maksimalt 255 teikn)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -450,17 +283,6 @@ msgstr "Plassering er for lang (maksimalt 255 teikn)."
 msgid "Too many aliases! Maximum %d."
 msgstr ""
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "Ugyldig merkelapp: %s"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Kallenamnet er allereie i bruk. Prøv eit anna."
-
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
@@ -469,45 +291,23 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "Fann ikkje API-metode."
-
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
-msgid "You are already a member of that group."
-msgstr "Du er allereie medlem av den gruppa"
-
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "Finst ikkje."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
+#, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "Kunne ikkje melde brukaren %s inn i gruppa %s"
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "Du er ikkje medlem av den gruppa."
+msgstr "Kunne ikkje bli med i gruppa."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "Kunne ikkje fjerne %s fra %s gruppa "
-
-#. TRANS: %s is a user name
-#: actions/apigrouplist.php:98
-#, fuzzy, php-format
-msgid "%s's groups"
-msgstr "%s grupper"
-
-#. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
-#: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Grupper %s er medlem av"
+msgstr "Kunne ikkje laga gruppa."
 
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
@@ -516,25 +316,10 @@ msgstr "Grupper %s er medlem av"
 msgid "%s groups"
 msgstr "%s grupper"
 
-#: actions/apigrouplistall.php:96
-#, fuzzy, php-format
-msgid "groups on %s"
-msgstr "Gruppe handlingar"
-
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Last opp fil"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Ugyldig storleik."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -553,21 +338,6 @@ msgstr "Ugyldig storleik."
 msgid "There was a problem with your session token. Try again, please."
 msgstr "Der var eit problem med sesjonen din. Vennlegst prøv på nytt."
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Ugyldig brukarnamn eller passord."
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Feil ved å setja brukar."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -631,11 +401,6 @@ msgstr "Passord"
 msgid "Deny"
 msgstr ""
 
-#: actions/apioauthauthorize.php:334
-#, fuzzy
-msgid "Allow"
-msgstr "Alle"
-
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
 msgstr ""
@@ -653,20 +418,10 @@ msgstr "Du kan ikkje sletta statusen til ein annan brukar."
 msgid "No such notice."
 msgstr "Denne notisen finst ikkje."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "Kan ikkje slå på notifikasjon."
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "Slett denne notisen"
-
-#: actions/apistatusesshow.php:139
-#, fuzzy
-msgid "Status deleted."
-msgstr "Lasta opp brukarbilete."
+msgstr "Kan ikkje sletta notisen."
 
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
@@ -676,40 +431,29 @@ msgstr "Fann ingen status med den ID-en."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, fuzzy, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr "Det er for langt! Ein notis kan berre innehalde 140 teikn."
-
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Finst ikkje."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "Støttar ikkje bileteformatet."
-
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favorittar frå %s"
+msgstr "%1$s sin status på %2$s"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s oppdateringar favorisert av %s / %s."
+msgstr "%1$s oppdateringar som svarar på oppdateringar frå %2$s / %3$s."
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Oppdateringar som svarar til %2$s"
+msgstr "%1$s sin status på %2$s"
 
 #: actions/apitimelinementions.php:131
 #, php-format
@@ -726,34 +470,18 @@ msgstr "%s offentleg tidsline"
 msgid "%s updates from everyone!"
 msgstr "%s oppdateringar frå alle saman!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "Svar til %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "Svar til %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr "Notisar merka med %s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Oppdateringar frå %1$s på %2$s!"
-
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "API-metoden er ikkje ferdig enno."
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "Slikt dokument finst ikkje."
+msgstr "Dette emneord finst ikkje."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -777,16 +505,15 @@ msgid "Avatar"
 msgstr "Brukarbilete"
 
 #: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
 msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Du kan laste opp ein personleg avatar."
+msgstr "Du kan lasta opp ein logo for gruppa."
 
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "Kan ikkje finne brukar"
+msgstr "Brukaren har inga profil."
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
@@ -804,7 +531,7 @@ msgid "Preview"
 msgstr "Forhandsvis"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Slett"
 
@@ -816,11 +543,6 @@ msgstr "Last opp"
 msgid "Crop"
 msgstr "Skaler"
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Ingen vald profil."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr "Velg eit utvalg av bildet som vil blir din avatar."
@@ -837,15 +559,9 @@ msgstr "Lasta opp brukarbilete."
 msgid "Failed updating avatar."
 msgstr "Feil ved oppdatering av brukarbilete."
 
-#: actions/avatarsettings.php:397
-#, fuzzy
-msgid "Avatar deleted."
-msgstr "Lasta opp brukarbilete."
-
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Du har allereie blokkert denne brukaren."
+msgstr "Du tingar allereie oppdatering frå desse brukarane:"
 
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
 msgid "Block user"
@@ -866,30 +582,9 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Nei"
-
-#. TRANS: Submit button title for 'No' when blocking a user.
-#. TRANS: Submit button title for 'No' when deleting a user.
-#: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
-msgid "Do not block this user"
-msgstr "Lås opp brukaren"
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Jau"
+msgstr "Merknad"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
@@ -900,6 +595,8 @@ msgstr "Blokkér denne brukaren"
 msgid "Failed to save block information."
 msgstr "Lagring av informasjon feila."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -909,31 +606,11 @@ msgstr "Lagring av informasjon feila."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Denne gruppa finst ikkje."
 
-#: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
-msgid "%s blocked profiles"
-msgstr "Brukarprofil"
-
-#: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
-msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s med vener, side %d"
-
-#: actions/blockedfromgroup.php:115
-#, fuzzy
-msgid "A list of the users blocked from joining this group."
-msgstr "Ei liste over brukarane i denne gruppa."
-
-#: actions/blockedfromgroup.php:288
-#, fuzzy
-msgid "Unblock user from group"
-msgstr "De-blokkering av brukar feila."
-
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr "Lås opp"
@@ -944,9 +621,9 @@ msgstr "Lås opp brukaren"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "Bilete"
+msgstr "Svar til %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -962,9 +639,9 @@ msgstr "Den godkjenningskoden er ikkje for deg!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Ukjend adressetype %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -993,40 +670,26 @@ msgid "Couldn't delete email confirmation."
 msgstr "Kan ikkje sletta e-postgodkjenning."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Stadfest adresse"
+msgstr "Godkjent epostadresse."
 
 #: actions/confirmaddress.php:161
 #, php-format
 msgid "The address \"%s\" has been confirmed for your account."
 msgstr "Addressa \"%s\" har blitt bekrefta for din konto."
 
-#: actions/conversation.php:99
-#, fuzzy
-msgid "Conversation"
-msgstr "Stadfestingskode"
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "Notisar"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "Du må være logga inn for å lage ei gruppe."
+msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Notisen har ingen profil"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Du er ikkje medlem av den gruppa."
+msgstr "Fann ikkje stadfestingskode."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1034,11 +697,6 @@ msgstr "Du er ikkje medlem av den gruppa."
 msgid "There was a problem with your session token."
 msgstr "Det var eit problem med sesjons billetten din."
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Denne notisen finst ikkje."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1046,18 +704,6 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "Kan ikkje sletta notisen."
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "Slett denne notisen"
-
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1074,13 +720,10 @@ msgid "Can't delete this notice."
 msgstr "Kan ikkje sletta notisen."
 
 #: actions/deletenotice.php:103
-#, fuzzy
 msgid ""
 "You are about to permanently delete a notice. Once this is done, it cannot "
 "be undone."
 msgstr ""
-"Du er i ferd med å sletta ei melding.  Når den fyrst er sletta, kann du "
-"ikkje finne ho att."
 
 #: actions/deletenotice.php:109 actions/deletenotice.php:141
 msgid "Delete notice"
@@ -1090,44 +733,17 @@ msgstr "Slett notis"
 msgid "Are you sure you want to delete this notice?"
 msgstr "Sikker på at du vil sletta notisen?"
 
-#. TRANS: Submit button title for 'No' when deleting a notice.
-#: actions/deletenotice.php:151
-#, fuzzy
-msgid "Do not delete this notice"
-msgstr "Kan ikkje sletta notisen."
-
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Slett denne notisen"
 
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Kan ikkje oppdatera brukar."
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "Du kan ikkje sletta statusen til ein annan brukar."
-
-#: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
-msgid "Delete user"
-msgstr "Slett"
-
 #: actions/deleteuser.php:136
 msgid ""
 "Are you sure you want to delete this user? This will clear all data about "
 "the user from the database, without a backup."
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when deleting a user.
-#: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
-msgid "Delete this user"
-msgstr "Slett denne notisen"
-
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
@@ -1139,45 +755,22 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Ugyldig storleik."
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Endra passordet ditt"
+msgstr "Endra"
 
 #: actions/designadminpanel.php:431
-#, fuzzy
 msgid "Site logo"
-msgstr "Invitér"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
-msgstr "Endra"
-
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
 msgstr "Statusmelding"
 
-#: actions/designadminpanel.php:461
-#, fuzzy
-msgid "Theme for the site."
-msgstr "Logg ut or sida"
-
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Statusmelding"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1192,13 +785,6 @@ msgstr ""
 msgid "Background"
 msgstr ""
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr "Du kan lasta opp ein logo for gruppa."
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1217,29 +803,14 @@ msgstr ""
 msgid "Tile background image"
 msgstr ""
 
-#: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
-msgid "Change colours"
-msgstr "Endra passordet ditt"
-
 #: actions/designadminpanel.php:587 lib/designsettings.php:191
 msgid "Content"
 msgstr "Innhald"
 
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "Søk"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "Tekst"
 
-#: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
-msgid "Links"
-msgstr "Logg inn"
-
 #: actions/designadminpanel.php:651
 msgid "Advanced"
 msgstr ""
@@ -1284,69 +855,22 @@ msgid "Add to favorites"
 msgstr "Legg til i favorittar"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Slikt dokument finst ikkje."
+msgstr "Denne notisen finst ikkje."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Andre val"
-
-#: actions/editapplication.php:66
-#, fuzzy
-msgid "You must be logged in to edit an application."
-msgstr "Du må være logga inn for å lage ei gruppe."
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Denne notisen finst ikkje."
-
-#: actions/editapplication.php:161
-#, fuzzy
-msgid "Use this form to edit your application."
-msgstr "Bruk dette skjemaet for å redigere gruppa"
-
-#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
-msgid "Name is required."
-msgstr "Samme som passord over. Påkrevd."
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Ditt fulle namn er for langt (maksimalt 255 teikn)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Kallenamnet er allereie i bruk. Prøv eit anna."
-
-#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
-msgid "Description is required."
-msgstr "Beskriving"
+msgstr ""
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Heimesida er ikkje ei gyldig internettadresse."
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr ""
 
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Plassering er for lang (maksimalt 255 teikn)."
-
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
 msgstr ""
@@ -1359,11 +883,6 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Kann ikkje oppdatera gruppa."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
@@ -1375,43 +894,30 @@ msgstr "Du må være logga inn for å lage ei gruppe."
 
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
 msgid "You must be an admin to edit the group."
-msgstr "Du må være administrator for å redigere gruppa"
+msgstr "Du må være logga inn for å lage ei gruppe."
 
 #: actions/editgroup.php:158
 msgid "Use this form to edit the group."
 msgstr "Bruk dette skjemaet for å redigere gruppa"
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "skildringa er for lang (maks 140 teikn)."
-
-#: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\""
-msgstr "Ugyldig merkelapp: %s"
+msgstr "Plassering er for lang (maksimalt 255 teikn)."
 
 #: actions/editgroup.php:258
 msgid "Could not update group."
 msgstr "Kann ikkje oppdatera gruppa."
 
-#. TRANS: Server exception thrown when creating group aliases failed.
-#: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
-msgid "Could not create aliases."
-msgstr "Kunne ikkje lagre favoritt."
-
 #: actions/editgroup.php:280
 msgid "Options saved."
 msgstr "Lagra innstillingar."
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Epostinnstillingar"
+msgstr "Profilinnstillingar"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1420,13 +926,6 @@ msgstr "Epostinnstillingar"
 msgid "Manage how you get email from %%site.name%%."
 msgstr "Styr korleis du får epost frå %%site.name%%."
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Epostadresser"
-
 #. TRANS: Form note in e-mail settings form.
 #: actions/emailsettings.php:112
 msgid "Current confirmed email address."
@@ -1440,10 +939,9 @@ msgstr "Godkjent epostadresse."
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "Fjern"
+msgstr "Gjenopprett"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1453,17 +951,6 @@ msgstr ""
 "Ventar på godkjenning. Sjekk innboksen (og søppelpostboksen) for ei melding "
 "med instruksjonar."
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Avbryt"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1474,10 +961,9 @@ msgstr "Epostadresse («brukarnamn@example.org»)"
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Legg til"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1500,16 +986,14 @@ msgstr "Vel ny epostadresse til å oppdatera med; fjerner den gamle."
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Ny"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "Brukarval"
+msgstr "Epostadresser"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1527,12 +1011,6 @@ msgstr ""
 msgid "Send me email when someone sends me a private message."
 msgstr "Send meg ein epost når nokon sender meg ei privat melding."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:199
-#, fuzzy
-msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Send meg ein epost når nokon sender meg ei privat melding."
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
@@ -1550,9 +1028,8 @@ msgstr "Publiser ein MicroID for epost addressa mi."
 
 #. TRANS: Confirmation message for successful e-mail preferences save.
 #: actions/emailsettings.php:334
-#, fuzzy
 msgid "Email preferences saved."
-msgstr "Synkroniserings innstillingar blei lagra."
+msgstr "Lagra brukarval."
 
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
@@ -1605,17 +1082,10 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Ingen ventande stadfesting å avbryta."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Det er feil lynmeldings addresse."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Stadfesting avbrutt."
+msgstr "Ingen ventande stadfesting å avbryta."
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1625,9 +1095,8 @@ msgstr "Det er ikkje din epost addresse."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Addressa blei fjerna."
+msgstr "Fjerna innkomande epostadresse."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1695,11 +1164,6 @@ msgstr ""
 msgid "%s's favorite notices"
 msgstr "%s's favoritt meldingar"
 
-#: actions/favoritesrss.php:115
-#, fuzzy, php-format
-msgid "Updates favored by %1$s on %2$s!"
-msgstr "Oppdateringar frå %1$s på %2$s!"
-
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
 msgid "Featured users"
@@ -1711,38 +1175,25 @@ msgid "Featured users, page %d"
 msgstr "Profilerte folk, side %d"
 
 #: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "A selection of some great users on %s"
-msgstr "Eit utval av nokre av dei flotte folka på %s"
+msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "Ny notis"
+msgstr "Denne notisen finst ikkje."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Ny notis"
-
-#: actions/file.php:42
-#, fuzzy
-msgid "No attachments."
-msgstr "Slikt dokument finst ikkje."
-
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "Slikt dokument finst ikkje."
+msgstr "Denne notisen finst ikkje."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "Venta ikkje dette svaret!"
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "Brukaren du lyttar til eksisterer ikkje."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1753,53 +1204,28 @@ msgid "That user has blocked you from subscribing."
 msgstr "Brukaren tillet deg ikkje å tinga meldingane sine."
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Ikkje autorisert."
+msgstr "Du tingar ikkje oppdateringar til den profilen."
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Kan ikkje konvertera spyrjebillett til tilgongsbillett."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Ukjend versjon av OMB-protokollen."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Feil ved oppdatering av ekstern profil"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "Denne notisen finst ikkje."
-
-#: actions/getfile.php:83
-#, fuzzy
-msgid "Cannot read file."
-msgstr "Mista fila vår."
-
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Ugyldig storleik."
+msgstr ""
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Du kan ikkje sende melding til denne brukaren."
+msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
 
 #: actions/grantrole.php:82
-#, fuzzy
 msgid "User already has this role."
-msgstr "Brukar har blokkert deg."
+msgstr "Brukaren har inga profil."
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1813,31 +1239,10 @@ msgstr "Ingen vald profil."
 msgid "No profile with that ID."
 msgstr "Fann ingen profil med den IDen."
 
-#: actions/groupblock.php:81 actions/groupunblock.php:81
-#: actions/makeadmin.php:81
-#, fuzzy
-msgid "No group specified."
-msgstr "Ingen vald profil."
-
 #: actions/groupblock.php:91
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-#, fuzzy
-msgid "User is already blocked from group."
-msgstr "Brukar har blokkert deg."
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "Du er ikkje medlem av den gruppa."
-
-#: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
-msgid "Block user from group"
-msgstr "Blokker brukaren"
-
 #: actions/groupblock.php:160
 #, php-format
 msgid ""
@@ -1846,36 +1251,13 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-#, fuzzy
-msgid "Do not block this user from this group"
-msgstr "Ei liste over brukarane i denne gruppa."
-
-#. TRANS: Submit button title for 'Yes' when blocking a user from a group.
-#: actions/groupblock.php:189
-#, fuzzy
-msgid "Block this user from this group"
-msgstr "Ei liste over brukarane i denne gruppa."
-
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Ingen ID"
-
-#: actions/groupdesignsettings.php:68
-#, fuzzy
-msgid "You must be logged in to edit a group."
-msgstr "Du må være logga inn for å lage ei gruppe."
-
-#: actions/groupdesignsettings.php:144
-#, fuzzy
-msgid "Group design"
-msgstr "Grupper"
+msgstr "Nei Jabber-ID"
 
 #: actions/groupdesignsettings.php:155
 msgid ""
@@ -1883,32 +1265,14 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Kan ikkje oppdatera brukar."
-
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
 msgid "Design preferences saved."
-msgstr "Synkroniserings innstillingar blei lagra."
+msgstr "Lagra brukarval."
 
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
 msgstr "Logo åt gruppa"
 
-#: actions/grouplogo.php:153
-#, fuzzy, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr "Du kan lasta opp ein logo for gruppa."
-
-#: actions/grouplogo.php:365
-#, fuzzy
-msgid "Pick a square area of the image to be the logo."
-msgstr "Velg eit utvalg av bildet som vil blir din avatar."
-
 #: actions/grouplogo.php:399
 msgid "Logo updated."
 msgstr "Logo oppdatert."
@@ -1923,9 +1287,9 @@ msgid "%s group members"
 msgstr "%s medlemmar i gruppa"
 
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "%s medlemmar i gruppa, side %d"
+msgstr "%s medlemmar i gruppa"
 
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
@@ -1939,16 +1303,6 @@ msgstr "Administrator"
 msgid "Block"
 msgstr "Blokkér"
 
-#: actions/groupmembers.php:487
-#, fuzzy
-msgid "Make user an admin of the group"
-msgstr "Du må være administrator for å redigere gruppa"
-
-#: actions/groupmembers.php:519
-#, fuzzy
-msgid "Make Admin"
-msgstr "Administrator"
-
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
 msgstr ""
@@ -1962,12 +1316,6 @@ msgstr ""
 msgid "%s timeline"
 msgstr "%s tidsline"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "Oppdateringar frå %1$s på %2$s!"
-
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
@@ -1992,24 +1340,14 @@ msgstr ""
 msgid "Create a new group"
 msgstr "Opprett ei ny gruppe"
 
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
-msgstr ""
-"Søk for mennesker på %%site.name%% i namn, lokasjon eller interesse. Separer "
-"nøkkelord med mellomrom; dei må være minimum 3 bokstavar eller meir."
-
 #: actions/groupsearch.php:58
 msgid "Group search"
 msgstr "Gruppesøk"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "Ingen resultat"
+msgstr "Resultat frå kommandoen"
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -2029,20 +1367,14 @@ msgstr ""
 msgid "Only an admin can unblock group members."
 msgstr ""
 
-#: actions/groupunblock.php:95
-#, fuzzy
-msgid "User is not blocked from group."
-msgstr "Brukar har blokkert deg."
-
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
 msgstr "Feil ved fjerning av blokka."
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "Ljonmeldinginnstillingar"
+msgstr "Avatar-innstillingar"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2058,16 +1390,14 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "Ljonmeldingadresse"
+msgstr "Epostadresser"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2097,9 +1427,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Brukarval"
+msgstr "Lagra brukarval."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2167,17 +1496,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Det er feil lynmeldings addresse."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Kan ikkje sletta e-postgodkjenning."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Stadfesting avbrutt."
+msgstr "Ingen stadfestingskode."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2187,14 +1509,8 @@ msgstr "Det er ikkje din Jabber ID."
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "Addressa blei fjerna."
-
-#: actions/inbox.php:59
-#, fuzzy, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr "Innboks for %s"
+msgstr "Fjerna innkomande epostadresse."
 
 #: actions/inbox.php:62
 #, php-format
@@ -2210,9 +1526,9 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "Du må verta logga inn for å invitera andre brukarar til %s"
+msgstr "Du må være logga inn for å bli med i ei gruppe."
 
 #: actions/invite.php:72
 #, php-format
@@ -2233,7 +1549,7 @@ msgstr "Du tingar allereie oppdatering frå desse brukarane:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2281,10 +1597,9 @@ msgstr "Eventuelt legg til ei personleg melding til invitasjonen."
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Send"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2349,32 +1664,19 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr "Du må være logga inn for å bli med i ei gruppe."
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Ingen kallenamn."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, fuzzy, php-format
-msgid "%1$s joined group %2$s"
-msgstr "%s blei medlem av gruppe %s"
-
 #: actions/leavegroup.php:60
 msgid "You must be logged in to leave a group."
 msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Du er ikkje medlem av den gruppa."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%s forlot %s gruppa"
+msgstr "%1$s sin status på %2$s"
 
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
@@ -2384,11 +1686,6 @@ msgstr "Allereie logga inn."
 msgid "Incorrect username or password."
 msgstr "Feil brukarnamn eller passord"
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Ikkje autorisert."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Logg inn"
@@ -2417,68 +1714,25 @@ msgstr ""
 "Skriv inn brukarnam og passord før du endrar innstillingar (av "
 "tryggleiksomsyn)."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Log inn med brukarnamn og passord."
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Logg inn med brukarnamn og passord. Har du ikkje brukarnamn endå? [Opprett](%"
-"%action.register%%) ein ny konto, eller prøv [OpenID](%%action.openidlogin%"
-"%)."
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, fuzzy, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Brukar har blokkert deg."
-
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Kunne ikkje fjerne %s fra %s gruppa "
-
-#: actions/makeadmin.php:146
-#, fuzzy, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Du må være administrator for å redigere gruppa"
-
-#: actions/microsummary.php:69
-#, fuzzy
-msgid "No current status."
-msgstr "Ingen status"
-
-#: actions/newapplication.php:52
-#, fuzzy
-msgid "New Application"
-msgstr "Denne notisen finst ikkje."
-
-#: actions/newapplication.php:64
-#, fuzzy
-msgid "You must be logged in to register an application."
-msgstr "Du må være logga inn for å lage ei gruppe."
-
-#: actions/newapplication.php:143
-#, fuzzy
-msgid "Use this form to register a new application."
-msgstr "Bruk dette skjemaet for å lage ein ny gruppe."
+msgstr ""
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
 msgstr ""
 
-#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
-msgid "Could not create application."
-msgstr "Kunne ikkje lagre favoritt."
-
 #: actions/newgroup.php:53
 msgid "New group"
 msgstr "Ny gruppe"
@@ -2491,12 +1745,15 @@ msgstr "Bruk dette skjemaet for å lage ein ny gruppe."
 msgid "New message"
 msgstr "Ny melding"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Du kan ikkje sende melding til denne brukaren."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Ingen innhald."
 
@@ -2504,24 +1761,15 @@ msgstr "Ingen innhald."
 msgid "No recipient specified."
 msgstr "Ingen mottakar spesifisert."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 "Ikkje send ei melding til deg sjølv; berre sei det til deg sjølv stille og "
 "fredleg."
 
-#: actions/newmessage.php:181
-#, fuzzy
-msgid "Message sent"
-msgstr "Melding"
-
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Direkte melding til %s sendt"
-
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax feil"
 
@@ -2529,7 +1777,7 @@ msgstr "Ajax feil"
 msgid "New notice"
 msgstr "Ny notis"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Melding lagra"
 
@@ -2547,9 +1795,9 @@ msgid "Text search"
 msgstr "Tekstsøk"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr " Søkestraum for «%s»"
+msgstr "Melding fra %1$s på %2$s"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2566,22 +1814,19 @@ msgid ""
 msgstr ""
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "Oppdateringar frå %1$s på %2$s!"
+msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Alle oppdateringer frå søket «%s»"
+msgstr "Oppdateringar frå %1$s på %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Denne brukaren tillét ikkje å bli dytta, eller har ikkje stadfasta eller sat "
-"e-postadressa si enno."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2592,37 +1837,17 @@ msgid "Nudge sent!"
 msgstr "Dytta!"
 
 #: actions/oauthappssettings.php:59
-#, fuzzy
 msgid "You must be logged in to list your applications."
-msgstr "Du må være logga inn for å lage ei gruppe."
-
-#: actions/oauthappssettings.php:74
-#, fuzzy
-msgid "OAuth applications"
-msgstr "Andre val"
+msgstr "Du må være logga inn for å bli med i ei gruppe."
 
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Du er ikkje medlem av den gruppa."
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2637,9 +1862,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Notisen har ingen profil"
+msgstr "Brukaren har inga profil."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2648,9 +1872,9 @@ msgstr "%1$s sin status på %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Kopla til"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2659,8 +1883,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Ikkje eit støtta dataformat."
 
@@ -2673,9 +1897,8 @@ msgid "Notice Search"
 msgstr "Notissøk"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Andre innstillingar"
+msgstr "Avatar-innstillingar"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2693,11 +1916,6 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr "Den automatisk forkortingstenesta du vil bruke"
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Profilinnstillingar"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
@@ -2706,35 +1924,9 @@ msgstr ""
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "Adressa til forkortingstenesta er for lang (maksimalt 50 teikn)."
 
-#: actions/otp.php:69
-#, fuzzy
-msgid "No user ID specified."
-msgstr "Ingen vald profil."
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Ingen vald profil."
-
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "Ingen profil-ID i førespurnaden."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Ugyldig notisinnhald"
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "Logg inn "
-
-#: actions/outbox.php:58
-#, fuzzy, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr "Utboks for %s"
+msgstr "Ingen autoriserings-spørjing!"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2816,34 +2008,29 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
-msgid "Site"
-msgstr "Invitér"
-
 #: actions/pathsadminpanel.php:238
 msgid "Server"
 msgstr "Tenar"
@@ -2856,11 +2043,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Statusmelding"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2881,10 +2063,6 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
-#: actions/pathsadminpanel.php:264
-msgid "Theme server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:268
 msgid "Theme path"
 msgstr ""
@@ -2893,25 +2071,9 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Brukarbilete"
-
-#: actions/pathsadminpanel.php:284
-#, fuzzy
-msgid "Avatar server"
-msgstr "Avatar-innstillingar"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Lasta opp brukarbilete."
-
 #: actions/pathsadminpanel.php:292
-#, fuzzy
 msgid "Avatar directory"
-msgstr "Lasta opp brukarbilete."
+msgstr ""
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
@@ -2929,20 +2091,9 @@ msgstr ""
 msgid "Background directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:320
-#, fuzzy
-msgid "SSL"
-msgstr "SMS"
-
 #: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
 msgid "Never"
-msgstr "Gjenopprett"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Notisar"
+msgstr "Tenar"
 
 #: actions/pathsadminpanel.php:325
 msgid "Always"
@@ -2957,18 +2108,16 @@ msgid "When to use SSL"
 msgstr ""
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
-msgstr "Gjenopprett"
+msgstr "Tenar"
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Statusmelding"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2984,19 +2133,13 @@ msgid "People search"
 msgstr "Søk etter folk"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "Ikkje gyldig merkelapp: %s"
-
-#: actions/peopletag.php:142
-#, fuzzy, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Brukarar sjølv-merka med %s, side %d"
+msgstr "Ikkje ei gyldig epostadresse."
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Ugyldig notisinnhald"
+msgstr "Ugyldig filnamn."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3040,14 +2183,13 @@ msgid "URL of your homepage, blog, or profile on another site"
 msgstr "URL til heimesida di, bloggen din, eller ein profil på ei anna side."
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Skriv om deg og interessene dine med 140 teikn"
+msgstr ""
 
 #: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
 msgid "Describe yourself and your interests"
-msgstr "Skildra deg sjølv og din"
+msgstr ""
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3103,11 +2245,6 @@ msgid ""
 msgstr ""
 "Automatisk ting notisane til dei som tingar mine (best for ikkje-menneskje)"
 
-#: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
-msgid "Bio is too long (max %d chars)."
-msgstr "«Om meg» er for lang (maks 140 "
-
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr "Tidssone er ikkje valt."
@@ -3125,11 +2262,6 @@ msgstr "Ugyldig merkelapp: %s"
 msgid "Couldn't update user for autosubscribe."
 msgstr "Kan ikkje oppdatera brukar for automatisk tinging."
 
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Kan ikkje lagra merkelapp."
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Kan ikkje lagra profil."
@@ -3161,20 +2293,9 @@ msgstr "Offentleg tidsline, side %d"
 msgid "Public timeline"
 msgstr "Offentleg tidsline"
 
-#: actions/public.php:160
-#, fuzzy
-msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Offentleg straum"
-
-#: actions/public.php:164
-#, fuzzy
-msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Offentleg straum"
-
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "Offentleg straum"
+msgstr ""
 
 #: actions/public.php:188
 #, php-format
@@ -3203,14 +2324,12 @@ msgid ""
 msgstr ""
 
 #: actions/public.php:247
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
 "blogging) service based on the Free Software [StatusNet](http://status.net/) "
 "tool."
 msgstr ""
-"Dette er %%site.name%%, ei [mikroblogging](http://en.wikipedia.org/wiki/"
-"Micro-blogging)-teneste"
 
 #: actions/publictagcloud.php:57
 msgid "Public tag cloud"
@@ -3267,26 +2386,12 @@ msgstr "Denne godkjenningskoden er for gammal. Vennligst start på nytt."
 
 #: actions/recoverpassword.php:111
 msgid "Could not update user with confirmed email address."
-msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse."
-
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
+msgstr "Kunne ikkje oppdatera brukar med stadfesta e-postadresse."
 
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "Ditt kallenamn på denne servere, eller din registrerte epost addresse."
@@ -3367,11 +2472,6 @@ msgstr "Lagra det nye passordet. Du er logga inn."
 msgid "Sorry, only invited people can register."
 msgstr "Beklage, men kun inviterte kan registrere seg."
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "Feil med stadfestingskode."
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "Registreringa gikk bra"
@@ -3454,16 +2554,14 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-" unnateke privatdata: passord, epostadresse, ljonmeldingsadresse og "
-"telefonnummer."
 
 #: actions/register.php:583
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
@@ -3479,20 +2577,7 @@ msgid ""
 "missed. \n"
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
-msgstr ""
-"Gratulerer, %s! Og velkomen til %%%%site.name%%%%. Frå her kann det henda du "
-"vil...\n"
-"\n"
-"* Gå til [profilen din](%s) og skriva den fyrste meldinga.\n"
-"* Leggja til ei [Jabber/GTalk adresse](%%%%action.imsettings%%%%) so du kann "
-"laga nye meldingar ved hjelp av direktemeldingar.\n"
-"* [Søkje etter folk](%%%%action.profilesettings%%%%) det kan hende du "
-"kjenner, eller som du delar interesser med.\n"
-"* Uppdatere dine [profilval] so du kann fortelja andre meir um deg sjølv.* "
-"Lesa [hjelpetekstane](%%%%doc.help%%%%) for å finna ut meir um funksjonar du "
-"kann ha gådd glipp av.\n"
-"\n"
-"Takk for at du blei med, og vi håpar du vil lika tenesta!"
+msgstr ""
 
 #: actions/register.php:607
 msgid ""
@@ -3518,11 +2603,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "Eksternt abbonement"
 
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "Lagre tinging for brukar: %s"
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "Brukaren sitt kallenamn"
@@ -3549,49 +2629,20 @@ msgid "Invalid profile URL (bad format)"
 msgstr "Ugyldig profil-nettadresse (feil format)"
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Ikkje ein brukande profil-netadresse (ingen YADIS-dokument)."
+msgstr ""
 
 #: actions/remotesubscribe.php:176
-#, fuzzy
 msgid "That’s a local profile! Login to subscribe."
-msgstr "Det er ikkje ein lokal profil! Log inn for å tinge."
+msgstr ""
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Fekk ikkje spørjingsbillett (request token)."
-
-#: actions/repeat.php:57
-#, fuzzy
-msgid "Only logged-in users can repeat notices."
-msgstr "Kun brukaren kan lese sine eigne meldingar."
-
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Ingen vald profil."
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Du kan ikkje registrera deg om du ikkje godtek vilkåra i lisensen."
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "Du har allereie blokkert denne brukaren."
+msgstr ""
 
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "Lag"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "Lag"
+msgstr "Framheva"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3600,19 +2651,9 @@ msgid "Replies to %s"
 msgstr "Svar til %s"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "Melding til %1$s på %2$s"
-
-#: actions/replies.php:145
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Notisstraum for %s"
-
-#: actions/replies.php:152
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Notisstraum for %s"
+msgstr "Svar til %s"
 
 #: actions/replies.php:159
 #, php-format
@@ -3640,35 +2681,13 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "Melding til %1$s på %2$s"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Du kan ikkje sende melding til denne brukaren."
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "Kan ikkje finne brukar"
+msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Lasta opp brukarbilete."
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Du kan ikkje sende melding til denne brukaren."
-
-#: actions/sandbox.php:72
-#, fuzzy
-msgid "User is already sandboxed."
-msgstr "Brukar har blokkert deg."
+msgstr "Statistikk"
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3696,40 +2715,11 @@ msgstr ""
 msgid "Turn on debugging output for sessions."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/useradminpanel.php:294
-#, fuzzy
-msgid "Save site settings"
-msgstr "Avatar-innstillingar"
-
-#: actions/showapplication.php:82
-#, fuzzy
-msgid "You must be logged in to view an application."
-msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Notisen har ingen profil"
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Kallenamn"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
-msgid "Organization"
-msgstr "Paginering"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
 #: lib/applicationeditform.php:216 lib/groupeditform.php:172
@@ -3746,18 +2736,10 @@ msgstr "Statistikk"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3784,16 +2766,6 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Sikker på at du vil sletta notisen?"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s's favoritt meldingar"
-
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
 msgstr "Kunne ikkje hente fram favorittane."
@@ -3844,9 +2816,9 @@ msgid "%s group"
 msgstr "%s gruppe"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "%s medlemmar i gruppa, side %d"
+msgstr "Grupper, side %d"
 
 #: actions/showgroup.php:227
 msgid "Group profile"
@@ -3871,19 +2843,19 @@ msgid "Group actions"
 msgstr "Gruppe handlingar"
 
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Notisstraum for %s gruppa"
+msgstr "Straum for vener av %s"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Notisstraum for %s gruppa"
+msgstr "Straum for vener av %s"
 
 #: actions/showgroup.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (Atom)"
-msgstr "Notisstraum for %s gruppa"
+msgstr "Notisstraum for %s"
 
 #: actions/showgroup.php:355
 #, php-format
@@ -3905,9 +2877,8 @@ msgid "All members"
 msgstr "Alle medlemmar"
 
 #: actions/showgroup.php:439
-#, fuzzy
 msgid "Created"
-msgstr "Lag"
+msgstr "Framheva"
 
 #: actions/showgroup.php:455
 #, php-format
@@ -3920,20 +2891,13 @@ msgid ""
 msgstr ""
 
 #: actions/showgroup.php:461
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. Its members share short messages about "
 "their life and interests. "
 msgstr ""
-"**%s** er ei brukargruppe på %%%%site.name%%%%, ei [mikroblogging](http://en."
-"wikipedia.org/wiki/Micro-blogging)-teneste"
-
-#: actions/showgroup.php:489
-#, fuzzy
-msgid "Admins"
-msgstr "Administrator"
 
 #: actions/showmessage.php:81
 msgid "No such message."
@@ -3953,45 +2917,25 @@ msgstr "Melding til %1$s på %2$s"
 msgid "Message from %1$s on %2$s"
 msgstr "Melding fra %1$s på %2$s"
 
-#: actions/shownotice.php:90
-#, fuzzy
-msgid "Notice deleted."
-msgstr "Melding lagra"
-
-#: actions/showstream.php:73
-#, fuzzy, php-format
-msgid " tagged %s"
-msgstr "Notisar merka med %s"
-
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s med vener, side %d"
+msgstr "Grupper, side %d"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Notisstraum for %s gruppa"
+msgstr "Straum for vener av %s"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Notisstraum for %s"
+msgstr "Straum for vener av %s"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Notisstraum for %s"
-
-#: actions/showstream.php:143
-#, fuzzy, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr "Notisstraum for %s"
-
-#: actions/showstream.php:148
-#, fuzzy, php-format
-msgid "FOAF for %s"
-msgstr "Utboks for %s"
+msgstr "Straum for vener av %s"
 
 #: actions/showstream.php:200
 #, php-format
@@ -4021,29 +2965,12 @@ msgid ""
 msgstr ""
 
 #: actions/showstream.php:248
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
-"**%s** har ein konto på %%%%site.name%%%%, ei [mikroblogging](http://en."
-"wikipedia.org/wiki/Micro-blogging)-teneste"
-
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "Svar til %s"
-
-#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
-msgid "You cannot silence users on this site."
-msgstr "Du kan ikkje sende melding til denne brukaren."
-
-#: actions/silence.php:72
-#, fuzzy
-msgid "User is already silenced."
-msgstr "Brukar har blokkert deg."
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
@@ -4054,9 +2981,8 @@ msgid "Site name must have non-zero length."
 msgstr ""
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "Ikkje ei gyldig epostadresse"
+msgstr "Ikkje ei gyldig epostadresse."
 
 #: actions/siteadminpanel.php:159
 #, php-format
@@ -4075,11 +3001,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Statusmelding"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4100,16 +3021,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Ny epostadresse for å oppdatera %s"
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Lokale syningar"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4118,11 +3029,6 @@ msgstr ""
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
-#: actions/siteadminpanel.php:262
-#, fuzzy
-msgid "Default language"
-msgstr "Foretrukke språk"
-
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
 msgstr ""
@@ -4147,44 +3053,18 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "Statusmelding"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Ny melding"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Statusmelding"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "Statusmelding"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "SMS innstillingar"
+msgstr "Avatar-innstillingar"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4195,15 +3075,13 @@ msgstr "Du kan motta SMS-meldingar gjennom e-post frå %%site.name%%."
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Denne sida er ikkje tilgjengleg i eit"
+msgstr ""
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "Ljonmeldingadresse"
+msgstr "Epostadresser"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4225,18 +3103,10 @@ msgstr "Stadfestingskode"
 msgid "Enter the code you received on your phone."
 msgstr "Skriv inn koden du fekk på telefonen."
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Godta"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
-msgstr "SMS telefon nummer"
+msgstr "Ingen telefonnummer."
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
@@ -4245,9 +3115,8 @@ msgstr "Telefonnummer, kun tall, med landskode"
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Brukarval"
+msgstr "Lagra brukarval."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4258,12 +3127,6 @@ msgstr ""
 "Send meg ein notis via SMS; eg forstår at dette kan føre til kostnadar fra "
 "min tilbydar."
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Lagra brukarval."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
@@ -4286,13 +3149,12 @@ msgstr "Det telefonnummeret er alt registrert hos ein annan brukar."
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
 msgstr ""
-"Sende godkjenningskode til telefonnummeret du la til. Sjekk innboksen for "
-"koden og veiledning på korleis du nyttar han."
+"Sendte godkjenningskode til epostadressa du la til. Sjekk innboksen (og "
+"søppelpostboksen) for koden og veiledning på korleis du nyttar han."
 
 #. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
 #: actions/smssettings.php:413
@@ -4301,9 +3163,8 @@ msgstr "Det er feil godkjennings nummer."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Stadfesting avbrutt."
+msgstr "SMS bekreftelse"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4311,12 +3172,6 @@ msgstr "Stadfesting avbrutt."
 msgid "That is not your phone number."
 msgstr "Det er ikkje ditt telefonnummer"
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "SMS telefon nummer"
-
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
 msgid "Mobile carrier"
@@ -4350,13 +3205,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Navigasjon for hovudsida"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Stadfesting av epostadresse"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4398,11 +3248,6 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Avatar-innstillingar"
-
 #: actions/subedit.php:70
 msgid "You are not subscribed to that profile."
 msgstr "Du tingar ikkje oppdateringar til den profilen."
@@ -4416,16 +3261,6 @@ msgstr "Kunne ikkje lagra abonnement."
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Denne notisen finst ikkje."
-
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Du tingar ikkje oppdateringar til den profilen."
-
 #: actions/subscribe.php:145
 msgid "Subscribed"
 msgstr "Abonnent"
@@ -4436,9 +3271,9 @@ msgid "%s subscribers"
 msgstr "%s tingarar"
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "%s tingarar, side %d"
+msgstr "%s tingarar"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4473,9 +3308,9 @@ msgid "%s subscriptions"
 msgstr "%s tingarar"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "%s tingingar, side %d"
+msgstr "%s tingarar"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
@@ -4497,9 +3332,9 @@ msgid ""
 msgstr ""
 
 #: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not listening to anyone."
-msgstr "%1$s høyrer no på"
+msgstr "%1$s høyrer no på notisane dine på %2$s."
 
 #: actions/subscriptions.php:208
 msgid "Jabber"
@@ -4510,29 +3345,23 @@ msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Brukarar sjølv-merka med %s, side %d"
+msgstr "Notisar merka med %s"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Notisstraum for %s"
+msgstr "Straum for vener av %s"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Notisstraum for %s"
-
-#: actions/tag.php:99
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr "Notisstraum for %s"
+msgstr "Straum for vener av %s"
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Manglar argumentet ID."
+msgstr ""
 
 #: actions/tagother.php:65
 #, php-format
@@ -4582,24 +3411,16 @@ msgid "No such tag."
 msgstr "Dette emneord finst ikkje."
 
 #: actions/unblock.php:59
-#, fuzzy
 msgid "You haven't blocked that user."
-msgstr "Du har allereie blokkert denne brukaren."
+msgstr "Du tingar ikkje oppdateringar til den profilen."
 
 #: actions/unsandbox.php:72
-#, fuzzy
 msgid "User is not sandboxed."
-msgstr "Brukar har blokkert deg."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Brukaren har inga profil."
+msgstr "Brukaren har ikkje siste notis"
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Ingen profil-ID i førespurnaden."
+msgstr "Fann ingen profil med den IDen."
 
 #: actions/unsubscribe.php:98
 msgid "Unsubscribed"
@@ -4611,13 +3432,6 @@ msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-#, fuzzy
-msgctxt "TITLE"
-msgid "User"
-msgstr "Brukar"
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr ""
@@ -4649,11 +3463,6 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-#, fuzzy
-msgid "New users"
-msgstr "Invitér nye brukarar"
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
@@ -4662,27 +3471,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Alle tingingar"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Automatisk ting notisane til dei som tingar mine (best for ikkje-menneskje)"
-
-#: actions/useradminpanel.php:251
-#, fuzzy
-msgid "Invitations"
-msgstr "Invitasjon(er) sendt"
-
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "Invitasjon(er) sendt"
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4692,19 +3480,15 @@ msgid "Authorize subscription"
 msgstr "Autoriser tinging"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Sjekk desse detaljane og forsikre deg om at du vil abonnere på denne "
-"brukaren sine notisar. Vist du ikkje har bedt om dette, klikk \"Avbryt\""
 
 #: actions/userauthorization.php:196 actions/version.php:167
-#, fuzzy
 msgid "License"
-msgstr "lisens."
+msgstr ""
 
 #: actions/userauthorization.php:217
 msgid "Accept"
@@ -4719,11 +3503,6 @@ msgstr "Lagre tinging for brukar: %s"
 msgid "Reject"
 msgstr "Avslå"
 
-#: actions/userauthorization.php:220
-#, fuzzy
-msgid "Reject this subscription"
-msgstr "%s tingarar"
-
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
 msgstr "Ingen autoriserings-spørjing!"
@@ -4733,29 +3512,22 @@ msgid "Subscription authorized"
 msgstr "Tinging autorisert"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"Tingina har blitt autorisert, men ingen henvisnings URL er tilgjengleg. "
-"Sjekk med sida sine instruksjonar for korleis autorisering til tinginga skal "
-"gjennomførast. Ditt tingings teikn er: "
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Tinging avvist"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"Tingina har blitt avvist, men ingen henvisnings URL er tilgjengleg. Sjekk "
-"med sida sine instruksjonar for korleis ein skal avvise tinginga."
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4783,19 +3555,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Kan ikkje lesa brukarbilete-URL «%s»"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Feil biletetype for '%s'"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Profilinnstillingar"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4809,19 +3576,13 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "%s medlemmar i gruppa, side %d"
+msgstr "Grupper, side %d"
 
 #: actions/usergroups.php:132
-#, fuzzy
 msgid "Search for more groups"
-msgstr "Søk etter folk eller innhald"
-
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "Du er ikkje medlem av den gruppa."
+msgstr ""
 
 #: actions/usergroups.php:164
 #, php-format
@@ -4839,11 +3600,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr "Oppdateringar frå %1$s på %2$s!"
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "Statistikk"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4882,12 +3638,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Personleg"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4931,48 +3681,11 @@ msgstr ""
 msgid "Invalid filename."
 msgstr "Ugyldig filnamn."
 
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Gruppe profil"
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Kann ikkje oppdatera gruppa."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Gruppe profil"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Kann ikkje oppdatera gruppa."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Kunne ikkje lagre favoritt."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
-#: classes/Message.php:46
-#, fuzzy
-msgid "You are banned from sending direct messages."
-msgstr "Ein feil oppstod ved sending av direkte melding."
-
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
 msgid "Could not insert message."
@@ -4991,66 +3704,45 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Eit problem oppstod ved lagring av notis."
+msgstr "Feil med innhenting av brukarbilete."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Feil ved lagring av notis.  Ukjend brukar."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 "For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
 
-#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-#, fuzzy
-msgid ""
-"Too many duplicate messages too quickly; take a breather and post again in a "
-"few minutes."
-msgstr ""
-"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Eit problem oppstod ved lagring av notis."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Eit problem oppstod ved lagring av notis."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5066,64 +3758,30 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Brukaren har inga profil."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-
-#. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
-#: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
-msgid "You have been banned from subscribing."
-msgstr "Brukaren tillet deg ikkje å tinga meldingane sine."
-
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
+msgstr "Kunne ikkje lagra emneord."
 
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr "Brukar har blokkert deg."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Ikkje tinga."
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Kan ikkje sletta tinging."
+msgstr "Kunne ikkje lagra abonnement."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Kan ikkje sletta tinging."
+msgstr "Kunne ikkje lagra abonnement."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Kan ikkje sletta tinging."
-
-#. TRANS: Notice given on user registration.
-#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
-#: classes/User.php:365
-#, fuzzy, php-format
-msgid "Welcome to %1$s, @%2$s!"
-msgstr "Melding til %1$s på %2$s"
+msgstr "Kunne ikkje lagra abonnement."
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
@@ -5132,21 +3790,14 @@ msgstr "Kunne ikkje laga gruppa."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Kunne ikkje bli med i gruppa."
+msgstr "Kunne ikkje laga gruppa."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
 msgid "Could not set group membership."
 msgstr "Kunne ikkje bli med i gruppa."
 
-#. TRANS: Server exception thrown when saving local group information failed.
-#: classes/User_group.php:544
-#, fuzzy
-msgid "Could not save local group info."
-msgstr "Kunne ikkje lagra abonnement."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
@@ -5167,12 +3818,6 @@ msgstr "Endra passordet ditt"
 msgid "Change email handling"
 msgstr "Endra eposthandtering"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "Brukarprofil"
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
 msgid "Other options"
@@ -5183,12 +3828,6 @@ msgstr "Andre val"
 msgid "Other"
 msgstr "Anna"
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5201,131 +3840,62 @@ msgstr "Navigasjon for hovudsida"
 
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr "Personleg profil og oversyn over vener"
-
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Personleg"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "Endra e-posten, avataren, passordet eller profilen"
-
-#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:452
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Connect to services"
-msgstr "Klarte ikkje å omdirigera til tenaren: %s"
-
-#. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
-#: lib/action.php:455
-msgid "Connect"
-msgstr "Kopla til"
-
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Navigasjon for hovudsida"
-
-#. TRANS: Main menu option when logged in and site admin for access to site configuration
-#: lib/action.php:461
-#, fuzzy
-msgctxt "MENU"
-msgid "Admin"
-msgstr "Administrator"
+msgstr "Endra passordet ditt"
 
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:452
 msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr "Inviter vennar og kollega til å bli med deg på %s"
+msgid "Connect to services"
+msgstr ""
 
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "Invitér"
+#. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
+#: lib/action.php:455
+msgid "Connect"
+msgstr "Kopla til"
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
-msgstr "Logg ut or sida"
+msgstr "Logg inn "
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "Logg ut"
+msgstr "Logo"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Opprett ny konto"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Registrér"
+msgstr "Opprett ei ny gruppe"
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Login to the site"
-msgstr "Logg inn or sida"
-
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Logg inn"
+msgstr "Logg inn "
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "Hjelp meg!"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
 msgstr "Hjelp"
 
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr "Søk etter folk eller innhald"
-
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Søk"
+msgstr ""
 
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
@@ -5383,11 +3953,6 @@ msgstr "Kjeldekode"
 msgid "Contact"
 msgstr "Kontakt"
 
-#: lib/action.php:794
-#, fuzzy
-msgid "Badge"
-msgstr "Dult"
-
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
 msgid "StatusNet software license"
@@ -5395,13 +3960,11 @@ msgstr "StatusNets programvarelisens"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** er ei mikrobloggingteneste av [%%site.broughtby%%](%%site."
-"broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5421,12 +3984,6 @@ msgstr ""
 "%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf."
 "org/licensing/licenses/agpl-3.0.html)."
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "StatusNets programvarelisens"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5486,154 +4043,32 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Du kan ikkje sende melding til denne brukaren."
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Registrering ikkje tillatt."
-
-#. TRANS: Client error message.
-#: lib/adminpanelaction.php:229
-#, fuzzy
-msgid "showForm() not implemented."
-msgstr "Kommando ikkje implementert."
-
-#. TRANS: Client error message
-#: lib/adminpanelaction.php:259
-#, fuzzy
-msgid "saveSettings() not implemented."
-msgstr "Kommando ikkje implementert."
-
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Stadfesting av epostadresse"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "Invitér"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "SMS bekreftelse"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
 msgid "Design"
-msgstr "Personleg"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "SMS bekreftelse"
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
 msgid "User"
 msgstr "Brukar"
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "SMS bekreftelse"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "SMS bekreftelse"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "SMS bekreftelse"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Statusmelding"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "SMS bekreftelse"
-
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, fuzzy, php-format
-msgid "Describe your application in %d characters"
-msgstr "Beskriv gruppa eller emnet med 140 teikn"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Beskriv gruppa eller emnet med 140 teikn"
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-#, fuzzy
-msgid "URL of the homepage of this application"
-msgstr "URL til heimesida eller bloggen for gruppa eller emnet"
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Kjeldekode"
+msgstr "Beskriving"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
 msgid "Organization responsible for this application"
 msgstr ""
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:242
-#, fuzzy
-msgid "URL for the homepage of the organization"
-msgstr "URL til heimesida eller bloggen for gruppa eller emnet"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
 msgid "URL to redirect to after authentication"
@@ -5692,15 +4127,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "Fjern"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
+msgstr "Gjenopprett"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
@@ -5709,28 +4138,13 @@ msgstr ""
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
-#, fuzzy
 msgid "Provider"
-msgstr "Profil"
+msgstr "Forhandsvis"
 
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Endra passord"
-
-#: lib/authenticationplugin.php:236
-#, fuzzy
-msgid "Password changing is not allowed"
-msgstr "Endra passord"
-
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
 msgstr "Resultat frå kommandoen"
@@ -5743,45 +4157,21 @@ msgstr "Kommandoen utførd"
 msgid "Command failed"
 msgstr "Kommandoen feila"
 
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Fann ingen profil med den IDen."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Brukaren har ikkje siste notis"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Orsak, men kommandoen er ikkje laga enno."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Dytta!"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5789,55 +4179,39 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Notis markert som favoritt."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Du er allereie medlem av den gruppa"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Kunne ikkje melde brukaren %s inn i gruppa %s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Kunne ikkje fjerne %s fra %s gruppa "
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Fullt namn: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Stad: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Heimeside: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Om: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5846,150 +4220,94 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Direkte melding til %s sendt"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Ein feil oppstod ved sending av direkte melding."
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Kan ikkje slå på notifikasjon."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Slett denne notisen"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Melding lagra"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "Eit problem oppstod ved lagring av notis."
-
-#: lib/command.php:562
-#, fuzzy, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Svar på denne notisen"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Eit problem oppstod ved lagring av notis."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Spesifer namnet til brukaren du vil tinge"
-
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Du tingar ikkje oppdateringar til den profilen."
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Tingar %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Spesifer namnet til brukar du vil fjerne tinging på"
+msgstr "Feil ved å setja brukar."
 
-#: lib/command.php:664
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Unsubscribed from %s"
-msgstr "Tingar ikkje %s lengre"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Kommando ikkje implementert."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notifikasjon av."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Kan ikkje skru av notifikasjon."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notifikasjon på."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Kan ikkje slå på notifikasjon."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Tingar ikkje %s lengre"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Du tingar ikkje oppdateringar til den profilen."
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Du tingar allereie oppdatering frå desse brukarane:"
 msgstr[1] "Du tingar allereie oppdatering frå desse brukarane:"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Kan ikkje tinga andre til deg."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Kan ikkje tinga andre til deg."
 msgstr[1] "Kan ikkje tinga andre til deg."
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Du er ikkje medlem av den gruppa."
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Du er ikkje medlem av den gruppa."
 msgstr[1] "Du er ikkje medlem av den gruppa."
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6031,11 +4349,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Ingen stadfestingskode."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -6044,11 +4357,6 @@ msgstr ""
 msgid "You may wish to run the installer to fix this."
 msgstr ""
 
-#: lib/common.php:139
-#, fuzzy
-msgid "Go to the installer."
-msgstr "Logg inn or sida"
-
 #: lib/connectsettingsaction.php:110
 msgid "IM"
 msgstr "Ljonmelding"
@@ -6061,11 +4369,6 @@ msgstr "Oppdateringar over direktemeldingar (IM)"
 msgid "Updates by SMS"
 msgstr "Oppdateringar over SMS"
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Kopla til"
-
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
 msgstr ""
@@ -6079,14 +4382,9 @@ msgid "Upload file"
 msgstr "Last opp fil"
 
 #: lib/designsettings.php:109
-#, fuzzy
 msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Du kan laste opp ein personleg avatar."
-
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
+msgstr "Du kan lasta opp ein logo for gruppa."
 
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
 msgid "Disfavor this notice"
@@ -6128,11 +4426,6 @@ msgstr "Filtrer emneord"
 msgid "All"
 msgstr "Alle"
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "Velg ein tilbydar"
-
 #: lib/galleryaction.php:140
 msgid "Tag"
 msgstr "Merkelapp"
@@ -6154,15 +4447,10 @@ msgstr ""
 msgid "URL of the homepage or blog of the group or topic"
 msgstr "URL til heimesida eller bloggen for gruppa eller emnet"
 
-#: lib/groupeditform.php:168
-#, fuzzy
-msgid "Describe the group or topic"
-msgstr "Beskriv gruppa eller emnet med 140 teikn"
-
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Beskriv gruppa eller emnet med 140 teikn"
+msgstr ""
 
 #: lib/groupeditform.php:179
 msgid ""
@@ -6178,16 +4466,6 @@ msgstr ""
 msgid "Group"
 msgstr "Gruppe"
 
-#: lib/groupnav.php:101
-#, fuzzy
-msgid "Blocked"
-msgstr "Blokkér"
-
-#: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "Blokker brukaren"
-
 #: lib/groupnav.php:108
 #, php-format
 msgid "Edit %s group properties"
@@ -6202,11 +4480,6 @@ msgstr "Logo"
 msgid "Add or edit %s logo"
 msgstr "Legg til eller rediger logoen til %s"
 
-#: lib/groupnav.php:120
-#, fuzzy, php-format
-msgid "Add or edit %s design"
-msgstr "Legg til eller rediger logoen til %s"
-
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
 msgstr "Grupper med flest medlemmar"
@@ -6229,11 +4502,6 @@ msgstr "Denne sida er ikkje tilgjengeleg i nokon mediatype du aksepterer."
 msgid "Unsupported image file format."
 msgstr "Støttar ikkje bileteformatet."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "Du kan lasta opp ein logo for gruppa."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Hallvegs opplasta."
@@ -6326,7 +4594,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6339,20 +4607,12 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1$s fylgjer no oppdateringane dine på %2$s.\n"
-"\n"
-"\t%3$s\n"
-"\n"
-"Beste helsing,\n"
-"%4$s.\n"
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
-msgstr ""
-"Bio: %s\n"
-"\n"
+msgstr "Stad: %s"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6392,12 +4652,6 @@ msgstr "%s status"
 msgid "SMS confirmation"
 msgstr "SMS bekreftelse"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "Ventar på godkjenning for dette telefonnummeret."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6449,9 +4703,10 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s la til di melding som ein favoritt"
+msgstr ""
+"Send meg ein epost når nokon legg til ein av mine notisar som favoritt."
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6484,11 +4739,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6527,10 +4777,9 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
-#, fuzzy
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr " frå "
+msgstr ""
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6548,11 +4797,6 @@ msgstr "Beklager, det er ikkje di inngåande epost addresse."
 msgid "Sorry, no incoming email allowed."
 msgstr "Beklager, inngåande epost er ikkje tillatt."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Støttar ikkje bileteformatet."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6592,9 +4836,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Kan ikkje hente offentleg straum."
+msgstr "Kunne ikkje slette favoritt."
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6614,55 +4857,46 @@ msgstr "Send ei direkte melding"
 msgid "To"
 msgstr "Til"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Tilgjenglege teikn"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Send"
+msgstr ""
 
 #: lib/noticeform.php:160
 msgid "Send a notice"
 msgstr "Send ei melding"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Kva skjer, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Kan ikkje lagra merkelapp."
+msgstr ""
 
-#: lib/noticeform.php:215
-#, fuzzy
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr "Kan ikkje lagra merkelapp."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
 msgstr ""
 
-#. TRANS: Used in coordinates as abbreviation of north
-#: lib/noticelist.php:436
-#, fuzzy
-msgid "N"
-msgstr "Nei"
-
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
@@ -6687,29 +4921,18 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "Ingen innhald."
-
-#: lib/noticelist.php:602
-#, fuzzy
-msgid "Repeated by"
-msgstr "Lag"
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Svar på denne notisen"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Svar"
 
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Melding lagra"
-
 #: lib/nudgeform.php:116
 msgid "Nudge this user"
 msgstr "Dult denne brukaren"
@@ -6738,11 +4961,6 @@ msgstr "Feil ved oppdatering av ekstern profil"
 msgid "Error inserting remote profile"
 msgstr "Feil med å henta inn ekstern profil"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Slett notis"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Kan ikkje leggja til ny tinging."
@@ -6780,11 +4998,6 @@ msgstr "Dine sende meldingar"
 msgid "Tags in %s's notices"
 msgstr "Merkelappar i %s sine notisar"
 
-#: lib/plugin.php:115
-#, fuzzy
-msgid "Unknown"
-msgstr "Uventa handling."
-
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
 msgstr "Tingingar"
@@ -6801,11 +5014,6 @@ msgstr "Tingarar"
 msgid "All subscribers"
 msgstr "Tingarar"
 
-#: lib/profileaction.php:191
-#, fuzzy
-msgid "User ID"
-msgstr "Brukar"
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "Medlem sidan"
@@ -6844,48 +5052,22 @@ msgid "Popular"
 msgstr "Populære"
 
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "Manglar argumentet ID."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Svar på denne notisen"
+msgstr ""
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Jau"
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Svar på denne notisen"
-
 #: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr "Ei liste over brukarane i denne gruppa."
+msgstr ""
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "Innboks"
-
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Lås opp brukaren"
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Søk"
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr ""
@@ -6894,11 +5076,6 @@ msgstr ""
 msgid "Search"
 msgstr "Søk"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Søk"
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Folk"
@@ -6923,16 +5100,6 @@ msgstr "Seksjon utan tittel"
 msgid "More..."
 msgstr ""
 
-#: lib/silenceform.php:67
-#, fuzzy
-msgid "Silence"
-msgstr "Statusmelding"
-
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "Blokkér denne brukaren"
-
 #: lib/subgroupnav.php:83
 #, php-format
 msgid "People %s subscribes to"
@@ -6979,13 +5146,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Feil ved oppdatering av brukarbilete."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -7011,9 +5171,8 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "Feil ved oppdatering av ekstern profil"
+msgstr "Feil ved fjerning av blokka."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
@@ -7023,20 +5182,10 @@ msgstr "Med flest meldingar"
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Lås opp brukaren"
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Lås opp brukaren"
-
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr "Fjern tinging fra denne brukaren"
@@ -7045,16 +5194,6 @@ msgstr "Fjern tinging fra denne brukaren"
 msgid "Unsubscribe"
 msgstr "Fjern tinging"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Brukaren har inga profil."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Brukarbilete"
-
 #: lib/userprofile.php:234 lib/userprofile.php:248
 msgid "User actions"
 msgstr "Brukarverkty"
@@ -7063,11 +5202,6 @@ msgstr "Brukarverkty"
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Profilinnstillingar"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
@@ -7084,16 +5218,10 @@ msgstr "Melding"
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Brukarprofil"
-
 #: lib/userprofile.php:366
-#, fuzzy
 msgctxt "role"
 msgid "Administrator"
-msgstr "Administrator"
+msgstr ""
 
 #: lib/userprofile.php:367
 msgctxt "role"
@@ -7101,70 +5229,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "eit par sekund sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "omtrent eitt minutt sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "~%d minutt sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "omtrent ein time sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "~%d timar sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "omtrent ein dag sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "~%d dagar sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "omtrent ein månad sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "~%d månadar sidan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "omtrent eitt år sidan"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "Heimesida er ikkje ei gyldig internettadresse."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, fuzzy, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
index 89da186ca799a1a7da3e31168e7847f7a4032186..26e00b482950ecc1c7fc05133cee80e80b1ab5da 100644 (file)
@@ -11,8 +11,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:52+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:15+0000\n"
 "Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
 "Language-Team: Polish <pl@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -20,7 +20,7 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
 "|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: pl\n"
 "X-Message-Group: out-statusnet\n"
@@ -94,6 +94,7 @@ msgstr "Zapisz"
 msgid "No such page."
 msgstr "Nie ma takiej strony."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -113,7 +114,7 @@ msgstr "Nie ma takiej strony."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Brak takiego użytkownika."
@@ -355,7 +356,8 @@ msgstr "Nie odnaleziono stanów z tym identyfikatorem."
 msgid "This status is already a favorite."
 msgstr "Ten stan jest już ulubiony."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Nie można utworzyć ulubionego wpisu."
 
@@ -469,15 +471,19 @@ msgstr "Alias nie może być taki sam jak pseudonim."
 msgid "Group not found."
 msgstr "Nie odnaleziono grupy."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Jesteś już członkiem tej grupy."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Zostałeś zablokowany w tej grupie przez administratora."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Nie można dołączyć użytkownika %1$s do grupy %2$s."
@@ -486,7 +492,10 @@ msgstr "Nie można dołączyć użytkownika %1$s do grupy %2$s."
 msgid "You are not a member of this group."
 msgstr "Nie jesteś członkiem tej grupy."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Nie można usunąć użytkownika %1$s z grupy %2$s."
@@ -645,11 +654,13 @@ msgstr "Nie można usuwać stanów innych użytkowników."
 msgid "No such notice."
 msgstr "Nie ma takiego wpisu."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Nie można powtórzyć własnego wpisu."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Już powtórzono ten wpis."
 
@@ -665,7 +676,7 @@ msgstr "Nie odnaleziono stanów z tym identyfikatorem."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Klient musi dostarczać parametr \"stan\" z wartością."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -675,7 +686,7 @@ msgstr "Wpis jest za długi. Maksymalna długość wynosi %d znaków."
 msgid "Not found."
 msgstr "Nie odnaleziono."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Maksymalny rozmiar wpisu wynosi %d znaków, w tym adres URL załącznika."
@@ -790,7 +801,7 @@ msgid "Preview"
 msgstr "Podgląd"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Usuń"
 
@@ -883,6 +894,8 @@ msgstr "Zablokuj tego użytkownika"
 msgid "Failed to save block information."
 msgstr "Zapisanie informacji o blokadzie nie powiodło się."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -892,8 +905,8 @@ msgstr "Zapisanie informacji o blokadzie nie powiodło się."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Nie ma takiej grupy."
 
@@ -1070,7 +1083,7 @@ msgid "Do not delete this notice"
 msgstr "Nie usuwaj tego wpisu"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Usuń ten wpis"
 
@@ -2155,7 +2168,7 @@ msgstr "Jesteś już subskrybowany do tych użytkowników:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2279,9 +2292,7 @@ msgstr "Musisz być zalogowany, aby dołączyć do grupy."
 msgid "No nickname or ID."
 msgstr "Brak pseudonimu lub identyfikatora."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "Użytkownik %1$s dołączył do grupy %2$s"
@@ -2290,13 +2301,12 @@ msgstr "Użytkownik %1$s dołączył do grupy %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Musisz być zalogowany, aby opuścić grupę."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Nie jesteś członkiem tej grupy."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "Użytkownik %1$s opuścił grupę %2$s"
@@ -2410,12 +2420,15 @@ msgstr "Użyj tego formularza, aby utworzyć nową grupę."
 msgid "New message"
 msgstr "Nowa wiadomość"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Nie można wysłać wiadomości do tego użytkownika."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Brak treści."
 
@@ -2423,7 +2436,8 @@ msgstr "Brak treści."
 msgid "No recipient specified."
 msgstr "Nie podano odbiorcy."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Nie wysyłaj wiadomości do siebie, po prostu powiedz to sobie po cichu."
@@ -2432,12 +2446,14 @@ msgstr "Nie wysyłaj wiadomości do siebie, po prostu powiedz to sobie po cichu.
 msgid "Message sent"
 msgstr "Wysłano wiadomość"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Wysłano bezpośrednią wiadomość do użytkownika %s."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Błąd AJAX"
 
@@ -2445,7 +2461,7 @@ msgstr "Błąd AJAX"
 msgid "New notice"
 msgstr "Nowy wpis"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Wysłano wpis"
 
@@ -2575,8 +2591,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Dozwolone są tylko adresy URL %s przez zwykły protokół HTTP."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "To nie jest obsługiwany format danych."
 
@@ -3485,7 +3501,7 @@ msgstr "Nie można powtórzyć własnego wpisu."
 msgid "You already repeated that notice."
 msgstr "Już powtórzono ten wpis."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Powtórzono"
 
@@ -4900,23 +4916,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Brak profilu (%1$d) dla wpisu (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Błąd bazy danych podczas wprowadzania znacznika mieszania: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problem podczas zapisywania wpisu. Za długi."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problem podczas zapisywania wpisu. Nieznany użytkownik."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4924,7 +4940,7 @@ msgstr ""
 "kilka minut."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4933,29 +4949,29 @@ msgstr ""
 "wyślij ponownie za kilka minut."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Zabroniono ci wysyłania wpisów na tej witrynie."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problem podczas zapisywania wpisu."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Podano błędne dane do saveKnownGroups"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5609,44 +5625,21 @@ msgstr "Zakończono polecenie"
 msgid "Command failed"
 msgstr "Polecenie nie powiodło się"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Wpis z tym identyfikatorem nie istnieje."
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Użytkownik nie posiada ostatniego wpisu."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Nie można odnaleźć użytkownika z pseudonimem %s."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Nie można odnaleźć lokalnego użytkownika z pseudonimem %s."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Te polecenie nie zostało jeszcze zaimplementowane."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Szturchanie samego siebie nie ma zbyt wiele sensu."
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Wysłano szturchnięcie do użytkownika %s."
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5657,55 +5650,39 @@ msgstr ""
 "Subskrybenci: %2$s\n"
 "Wpisy: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Zaznaczono wpis jako ulubiony."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Jesteś już członkiem tej grupy."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Nie można dołączyć użytkownika %1$s do grupy %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Nie można usunąć użytkownika %1$s z grupy %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Imię i nazwisko: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Położenie: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Strona domowa: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "O mnie: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5716,147 +5693,105 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Wysłano bezpośrednią wiadomość do użytkownika %s."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Błąd podczas wysyłania bezpośredniej wiadomości."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Nie można powtórzyć własnego wpisu"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Już powtórzono ten wpis"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Powtórzono wpis od użytkownika %s"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Błąd podczas powtarzania wpisu."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Wpis jest za długi - maksymalnie %1$d znaków, wysłano %2$d."
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Wysłano odpowiedź do %s."
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Błąd podczas zapisywania wpisu."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Podaj nazwę użytkownika do subskrybowania."
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Nie można subskrybować profili OMB za pomocą polecenia."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Subskrybowano użytkownika %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Podaj nazwę użytkownika do usunięcia subskrypcji."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Usunięto subskrypcję użytkownika %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Nie zaimplementowano polecenia."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Wyłączono powiadomienia."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Nie można wyłączyć powiadomień."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Włączono powiadomienia."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Nie można włączyć powiadomień."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Polecenie logowania jest wyłączone"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Tego odnośnika można użyć tylko raz i będzie prawidłowy tylko przez dwie "
-"minuty: %s."
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Usunięto subskrypcję użytkownika %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Nie subskrybujesz nikogo."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Subskrybujesz tę osobę:"
 msgstr[1] "Subskrybujesz te osoby:"
 msgstr[2] "Subskrybujesz te osoby:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Nikt cię nie subskrybuje."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Ta osoba cię subskrybuje:"
 msgstr[1] "Te osoby cię subskrybują:"
 msgstr[2] "Te osoby cię subskrybują:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Nie jesteś członkiem żadnej grupy."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Jesteś członkiem tej grupy:"
 msgstr[1] "Jesteś członkiem tych grup:"
 msgstr[2] "Jesteś członkiem tych grup:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6521,7 +6456,7 @@ msgstr ""
 "rozmowę z innymi użytkownikami. Inni mogą wysyłać ci wiadomości tylko dla "
 "twoich oczu."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "z"
 
@@ -6607,11 +6542,11 @@ msgstr "Wyślij bezpośredni wpis"
 msgid "To"
 msgstr "Do"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Dostępne znaki"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Wyślij"
@@ -6620,28 +6555,28 @@ msgstr "Wyślij"
 msgid "Send a notice"
 msgstr "Wyślij wpis"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Co słychać, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Załącz"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Załącz plik"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Ujawnij położenie"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Nie ujawniaj położenia"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6678,23 +6613,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "w"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "WWW"
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "w rozmowie"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Powtórzone przez"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Odpowiedz na ten wpis"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Odpowiedz"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Powtórzono wpis"
 
@@ -7023,11 +6962,6 @@ msgstr "Zrezygnuj z subskrypcji tego użytkownika"
 msgid "Unsubscribe"
 msgstr "Zrezygnuj z subskrypcji"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Użytkownik %s (%d) nie posiada wpisu profilu."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Zmodyfikuj awatar"
@@ -7075,56 +7009,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "kilka sekund temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "około minutę temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "około %d minut temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "około godzinę temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "około %d godzin temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "blisko dzień temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "około %d dni temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "około miesiąc temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "około %d miesięcy temu"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "około rok temu"
 
@@ -7139,8 +7073,3 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
 "%s nie jest prawidłowym kolorem. Użyj trzech lub sześciu znaków "
 "szesnastkowych."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d."
index ab309b7b3ad847ff4ca7d6a16e83d9355ca60b8e..1b385393178c3f8a14783d75fc7aa8f22d9a7abd 100644 (file)
@@ -4,6 +4,7 @@
 # Author@translatewiki.net: Giro720
 # Author@translatewiki.net: Hamilton Abreu
 # Author@translatewiki.net: Ipublicis
+# Author@translatewiki.net: Waldir
 # --
 # This file is distributed under the same license as the StatusNet package.
 #
@@ -11,12 +12,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:54+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:17+0000\n"
 "Language-Team: Portuguese\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: pt\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +92,7 @@ msgstr "Gravar"
 msgid "No such page."
 msgstr "Página não foi encontrada."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +112,7 @@ msgstr "Página não foi encontrada."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Utilizador não foi encontrado."
@@ -350,7 +352,8 @@ msgstr "Nenhum estado encontrado com esse ID."
 msgid "This status is already a favorite."
 msgstr "Este estado já é um favorito."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Não foi possível criar o favorito."
 
@@ -427,7 +430,7 @@ msgstr "Nome completo demasiado longo (máx. 255 caracteres)."
 #: actions/newapplication.php:172
 #, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "Descrição demasiado longa (máx. 140 caracteres)."
+msgstr "Descrição demasiado longa (máx. %d caracteres)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -463,15 +466,19 @@ msgstr "Um nome alternativo não pode ser igual ao nome do utilizador."
 msgid "Group not found."
 msgstr "Grupo não foi encontrado."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Já é membro desse grupo."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Foi bloqueado desse grupo pelo gestor."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Não foi possível adicionar %1$s ao grupo %2$s."
@@ -480,7 +487,10 @@ msgstr "Não foi possível adicionar %1$s ao grupo %2$s."
 msgid "You are not a member of this group."
 msgstr "Não é membro deste grupo."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Não foi possível remover %1$s do grupo %2$s."
@@ -638,11 +648,13 @@ msgstr "Não pode apagar o estado de outro utilizador."
 msgid "No such notice."
 msgstr "Nota não foi encontrada."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Não pode repetir a sua própria nota."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Já repetiu essa nota."
 
@@ -658,7 +670,7 @@ msgstr "Não foi encontrado um estado com esse ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "O cliente tem de fornecer um parâmetro 'status' com um valor."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -668,7 +680,7 @@ msgstr "Demasiado longo. Tamanho máx. das notas é %d caracteres."
 msgid "Not found."
 msgstr "Não encontrado."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Tamanho máx. das notas é %d caracteres, incluíndo a URL do anexo."
@@ -783,7 +795,7 @@ msgid "Preview"
 msgstr "Antevisão"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Apagar"
 
@@ -876,6 +888,8 @@ msgstr "Bloquear este utilizador"
 msgid "Failed to save block information."
 msgstr "Não foi possível gravar informação do bloqueio."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -885,8 +899,8 @@ msgstr "Não foi possível gravar informação do bloqueio."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Grupo não foi encontrado."
 
@@ -1064,7 +1078,7 @@ msgid "Do not delete this notice"
 msgstr "Não apagar esta nota"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Apagar esta nota"
 
@@ -2162,7 +2176,7 @@ msgstr "Já subscreveu estes utilizadores:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2284,9 +2298,7 @@ msgstr "Tem de iniciar uma sessão para se juntar a um grupo."
 msgid "No nickname or ID."
 msgstr "Nenhuma alcunha ou utilizador."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s juntou-se ao grupo %2$s"
@@ -2295,13 +2307,12 @@ msgstr "%1$s juntou-se ao grupo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Tem de iniciar uma sessão para deixar um grupo."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Não é um membro desse grupo."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s deixou o grupo %2$s"
@@ -2413,12 +2424,15 @@ msgstr "Use este formulário para criar um grupo novo."
 msgid "New message"
 msgstr "Mensagem nova"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Não pode enviar uma mensagem a este utilizador."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Sem conteúdo!"
 
@@ -2426,7 +2440,8 @@ msgstr "Sem conteúdo!"
 msgid "No recipient specified."
 msgstr "Não especificou um destinatário."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Não auto-envie uma mensagem; basta lê-la baixinho a si próprio."
@@ -2435,12 +2450,14 @@ msgstr "Não auto-envie uma mensagem; basta lê-la baixinho a si próprio."
 msgid "Message sent"
 msgstr "Mensagem enviada"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Mensagem directa para %s foi enviada."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Erro do Ajax"
 
@@ -2448,7 +2465,7 @@ msgstr "Erro do Ajax"
 msgid "New notice"
 msgstr "Nota nova"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Nota publicada"
 
@@ -2578,8 +2595,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Só URLs %s sobre HTTP simples, por favor."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Formato de dados não suportado."
 
@@ -3495,7 +3512,7 @@ msgstr "Não pode repetir a sua própria nota."
 msgid "You already repeated that notice."
 msgstr "Já repetiu essa nota."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Repetida"
 
@@ -4904,23 +4921,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Não existe o perfil (%1$d) para a nota (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Erro na base de dados ao inserir o elemento criptográfico: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problema na gravação da nota. Demasiado longa."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problema na gravação da nota. Utilizador desconhecido."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4928,7 +4945,7 @@ msgstr ""
 "alguns minutos."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4937,29 +4954,29 @@ msgstr ""
 "publicar daqui a alguns minutos."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Está proibido de publicar notas neste site."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problema na gravação da nota."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "O tipo fornecido ao método saveKnownGroups é incorrecto"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problema na gravação da caixa de entrada do grupo."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5264,7 +5281,7 @@ msgstr "Privacidade"
 #. TRANS: Secondary navigation menu option.
 #: lib/action.php:786
 msgid "Source"
-msgstr "Código"
+msgstr "Código fonte"
 
 #. TRANS: Secondary navigation menu option leading to contact information on the StatusNet site.
 #: lib/action.php:792
@@ -5614,44 +5631,21 @@ msgstr "Comando terminado"
 msgid "Command failed"
 msgstr "Comando falhou"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Não existe nenhuma nota com essa identificação"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Utilizador não tem nenhuma última nota"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Não foi encontrado um utilizador com a alcunha %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Não foi encontrado um utilizador local com a alcunha %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Desculpe, este comando ainda não foi implementado."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Não faz muito sentido tocar-nos a nós mesmos!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Cotovelada enviada a %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5662,55 +5656,39 @@ msgstr ""
 "Subscritores: %2$s\n"
 "Notas: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Nota marcada como favorita."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Já é membro desse grupo"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Não foi possível juntar o utilizador %1$s ao grupo %2$s"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Não foi possível remover %1$s do grupo %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nome completo: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Localidade: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Página pessoal: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Sobre: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5721,144 +5699,102 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Mensagem demasiado extensa - máx. %1$d caracteres, enviou %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Mensagem directa para %s enviada"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Mensagem demasiado extensa - máx. %1$d caracteres, enviou %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Erro no envio da mensagem directa."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Não pode repetir a sua própria nota"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Já repetiu essa nota"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Nota de %s repetida"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Erro ao repetir nota."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Nota demasiado extensa - máx. %d caracteres, enviou %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Resposta a %s enviada"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Erro ao gravar nota."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Introduza o nome do utilizador para subscrever"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Não pode subscrever perfis OMB por comando."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Subscreveu %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Introduza o nome do utilizador para deixar de subscrever"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Deixou de subscrever %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Comando ainda não implementado."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notificação desligada."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Não foi possível desligar a notificação."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notificação ligada."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Não foi possível ligar a notificação."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Comando para iniciar sessão foi desactivado"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Esta ligação é utilizável uma única vez e só durante os próximos 2 minutos: %"
-"s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Deixou de subscrever  %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Não subscreveu ninguém."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Subscreveu esta pessoa:"
 msgstr[1] "Subscreveu estas pessoas:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Ninguém subscreve as suas notas."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Esta pessoa subscreve as suas notas:"
 msgstr[1] "Estas pessoas subscrevem as suas notas:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Não está em nenhum grupo."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Está no grupo:"
 msgstr[1] "Está nos grupos:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6519,9 +6455,9 @@ msgstr ""
 "conversa com outros utilizadores. Outros podem enviar-lhe mensagens, a que "
 "só você terá acesso."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr "de"
+msgstr "a partir de"
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6608,11 +6544,11 @@ msgstr "Enviar uma nota directa"
 msgid "To"
 msgstr "Para"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caracteres disponíveis"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Enviar"
@@ -6621,28 +6557,28 @@ msgstr "Enviar"
 msgid "Send a notice"
 msgstr "Enviar uma nota"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Novidades, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Anexar"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Anexar um ficheiro"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Partilhar a minha localização."
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Não partilhar a minha localização"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6679,23 +6615,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "coords."
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "no contexto"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Repetida por"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Responder a esta nota"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Responder"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Nota repetida"
 
@@ -7023,11 +6963,6 @@ msgstr "Deixar de subscrever este utilizador"
 msgid "Unsubscribe"
 msgstr "Abandonar"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Utilizador %s (%d) não tem perfil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Editar Avatar"
@@ -7075,56 +7010,56 @@ msgid "Moderator"
 msgstr "Moderador"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "há alguns segundos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "há cerca de um minuto"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "há cerca de %d minutos"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "há cerca de uma hora"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "há cerca de %d horas"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "há cerca de um dia"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "há cerca de %d dias"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "há cerca de um mês"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "há cerca de %d meses"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "há cerca de um ano"
 
@@ -7137,8 +7072,3 @@ msgstr "%s não é uma cor válida!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s não é uma cor válida! Use 3 ou 6 caracteres hexadecimais."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Mensagem demasiado extensa - máx. %1$d caracteres, enviou %2$d."
index 53468a0649dd8352053d10f5f33e4b7d90804457..3bc3b07cbba085a37e9d57003ffe41f7b852fb11 100644 (file)
@@ -1,6 +1,7 @@
 # Translation of StatusNet to Brazilian Portuguese
 #
 # Author@translatewiki.net: Aracnus
+# Author@translatewiki.net: Brion
 # Author@translatewiki.net: Ewout
 # Author@translatewiki.net: Giro720
 # Author@translatewiki.net: Luckas Blade
@@ -13,12 +14,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:55+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:20+0000\n"
 "Language-Team: Brazilian Portuguese\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: pt-br\n"
 "X-Message-Group: out-statusnet\n"
@@ -93,6 +94,7 @@ msgstr "Salvar"
 msgid "No such page."
 msgstr "Esta página não existe."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -112,7 +114,7 @@ msgstr "Esta página não existe."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Este usuário não existe."
@@ -171,23 +173,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Você pode tentar [chamar a atenção de %1$s](../%2$s) em seu perfil ou "
-"[publicar alguma coisa que desperte seu interesse](%%%%action.newnotice%%%%?"
-"status_textarea=%3$s)."
+"Seja o primeiro a [publicar sobre este tópico](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"Por que não [registrar uma conta](%%%%action.register%%%%) e então chamar a "
-"atenção de %s ou publicar uma mensagem para sua atenção."
+"Por que você não [registra uma conta](%%action.register%%) pra ser o "
+"primeiro a publicar?"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -356,7 +357,8 @@ msgstr "Não foi encontrado nenhum status com esse ID."
 msgid "This status is already a favorite."
 msgstr "Esta mensagem já é favorita!"
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Não foi possível criar a favorita."
 
@@ -369,9 +371,8 @@ msgid "Could not delete favorite."
 msgstr "Não foi possível excluir a favorita."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Não é possível seguir o usuário: Usuário não encontrado."
+msgstr "Não é possível deixar de seguir o usuário: Usuário não encontrado."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -387,9 +388,8 @@ msgid "You cannot unfollow yourself."
 msgstr "Você não pode deixar de seguir você mesmo!"
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Duas IDs de usuário ou screen_names devem ser informados."
+msgstr "Devem ser fornecidos dois IDs ou nomes de usuários válidos."
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -472,15 +472,19 @@ msgstr "O apelido não pode ser igual à identificação."
 msgid "Group not found."
 msgstr "O grupo não foi encontrado."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Você já é membro desse grupo."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "O administrador desse grupo bloqueou sua inscrição."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Não foi possível associar o usuário %1$s ao grupo %2$s."
@@ -489,7 +493,10 @@ msgstr "Não foi possível associar o usuário %1$s ao grupo %2$s."
 msgid "You are not a member of this group."
 msgstr "Você não é membro deste grupo."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Não foi possível remover o usuário %1$s do grupo %2$s."
@@ -519,9 +526,8 @@ msgid "groups on %s"
 msgstr "grupos no %s"
 
 #: actions/apimediaupload.php:99
-#, fuzzy
 msgid "Upload failed."
-msgstr "Enviar arquivo"
+msgstr "O upload falhou."
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
@@ -654,11 +660,13 @@ msgstr "Você não pode excluir uma mensagem de outro usuário."
 msgid "No such notice."
 msgstr "Essa mensagem não existe."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Você não pode repetir a sua própria mensagem."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Você já repetiu essa mensagem."
 
@@ -672,22 +680,22 @@ msgstr "Não foi encontrada nenhuma mensagem com esse ID."
 
 #: actions/apistatusesupdate.php:221
 msgid "Client must provide a 'status' parameter with a value."
-msgstr ""
+msgstr "O cliente tem de fornecer um parâmetro 'status' com um valor."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
-msgstr "Está muito extenso. O tamanho máximo é de %s caracteres."
+msgstr "Está muito extenso. O tamanho máximo é de %d caracteres."
 
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Não encontrado."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
-msgstr "O tamanho máximo da mensagem é de %s caracteres"
+msgstr "O tamanho máximo da mensagem é de %d caracteres"
 
 #: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
 msgid "Unsupported format."
@@ -800,7 +808,7 @@ msgid "Preview"
 msgstr "Visualização"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Excluir"
 
@@ -894,6 +902,8 @@ msgstr "Bloquear este usuário"
 msgid "Failed to save block information."
 msgstr "Não foi possível salvar a informação de bloqueio."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -903,8 +913,8 @@ msgstr "Não foi possível salvar a informação de bloqueio."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Esse grupo não existe."
 
@@ -1082,7 +1092,7 @@ msgid "Do not delete this notice"
 msgstr "Não excluir esta mensagem."
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Excluir esta mensagem"
 
@@ -2183,7 +2193,7 @@ msgstr "Você já está assinando esses usuários:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2306,9 +2316,7 @@ msgstr "Você deve estar autenticado para se associar a um grupo."
 msgid "No nickname or ID."
 msgstr "Nenhum apelido ou identificação."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s associou-se ao grupo %2$s"
@@ -2317,13 +2325,12 @@ msgstr "%1$s associou-se ao grupo %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Você deve estar autenticado para sair de um grupo."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Você não é um membro desse grupo."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s deixou o grupo %2$s"
@@ -2439,12 +2446,15 @@ msgstr "Utilize este formulário para criar um novo grupo."
 msgid "New message"
 msgstr "Nova mensagem"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Você não pode enviar mensagens para este usuário."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Nenhum conteúdo!"
 
@@ -2452,7 +2462,8 @@ msgstr "Nenhum conteúdo!"
 msgid "No recipient specified."
 msgstr "Não foi especificado nenhum destinatário."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2463,12 +2474,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "A mensagem foi enviada"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "A mensagem direta para %s foi enviada."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Erro no Ajax"
 
@@ -2476,7 +2489,7 @@ msgstr "Erro no Ajax"
 msgid "New notice"
 msgstr "Nova mensagem"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "A mensagem foi publicada"
 
@@ -2528,12 +2541,11 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
 msgstr "Mensagens correspondentes aos termos \"%1$s\" no %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Esse usuário não permite ser chamado à atenção ou ainda não confirmou ou "
-"configurou seu e-mail."
+"Este usuário não aceita toques ou ainda não confirmou ou forneceu um correio "
+"eletrônico."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2609,8 +2621,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Por favor, somente URLs %s sobre HTTP puro."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Não é um formato de dados suportado."
 
@@ -3526,7 +3538,7 @@ msgstr "Você não pode repetir sua própria mensagem."
 msgid "You already repeated that notice."
 msgstr "Você já repetiu essa mensagem."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Repetida"
 
@@ -3561,13 +3573,13 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Fonte de respostas para %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
 msgstr ""
-"Esse é o fluxo de mensagens de resposta para %1$s, mas %2$s ainda não "
-"recebeu nenhuma mensagem direcionada a ele(a)."
+"Este é o fluxo público de mensagens de %1$s, mas %2$s não publicou nada "
+"ainda."
 
 #: actions/replies.php:204
 #, php-format
@@ -3579,14 +3591,13 @@ msgstr ""
 "pessoas ou [associe-se a grupos](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Você pode tentar [chamar a atenção de %1$s](../%2$s) ou [publicar alguma "
-"coisa que desperte seu interesse](%%%%action.newnotice%%%%?status_textarea=%3"
-"$s)."
+"Seja o primeiro a [publicar sobre este tópico](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3762,24 +3773,23 @@ msgstr ""
 "para destacar."
 
 #: actions/showfavorites.php:208
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
 msgstr ""
-"%s não adicionou nenhuma mensagem às suas favoritas. Publique alguma coisa "
-"interessante para para as pessoas marcarem como favorita. :)"
+"%s ainda não adicionou nenhuma nota às favoritas. Publique algo interessante "
+"para que as pessoas as marcarem como favorita. :)"
 
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s não adicionou nenhuma mensagem às suas favoritas. Por que você não "
-"[registra uma conta](%%%%action.register%%%%) e publica alguma coisa "
-"interessante para as pessoas marcarem como favorita?  :)"
+"Por que você não [registra uma conta](%%action.register%%) pra ser o "
+"primeiro a adicionar uma mensagem aos favoritos?"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3961,13 +3971,13 @@ msgstr ""
 "mensagem. Que tal começar agora? :)"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Você pode tentar chamar a atenção de %1$s ou [publicar alguma coisa que "
-"desperte seu interesse](%%%%action.newnotice%%%%?status_textarea=%2$s)."
+"Seja o primeiro a [publicar sobre este tópico](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/showstream.php:243
 #, php-format
@@ -4847,23 +4857,23 @@ msgstr "Autor(es)"
 #: classes/File.php:143
 #, php-format
 msgid "Cannot process URL '%s'"
-msgstr ""
+msgstr "Não é possível processar a URL '$s'"
 
 #. TRANS: Server exception thrown when... Robin thinks something is impossible!
 #: classes/File.php:175
 msgid "Robin thinks something is impossible."
-msgstr ""
+msgstr "o Robin acha que algo é impossível."
 
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
 #: classes/File.php:190
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
-"Nenhum arquivo pode ser maior que %d bytes e o arquivo que você enviou "
-"possui %d bytes. Experimente enviar uma versão menor."
+"Nenhum arquivo pode ter mais de %1$d bytes e o que você enviou tinha %2$d "
+"bytes. Tente enviar uma versão mais pequena."
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
@@ -4881,9 +4891,8 @@ msgstr "Um arquivo deste tamanho excederá a sua conta mensal de %d bytes."
 
 #. TRANS: Client exception thrown if a file upload does not have a valid name.
 #: classes/File.php:248 classes/File.php:263
-#, fuzzy
 msgid "Invalid filename."
-msgstr "Tamanho inválido."
+msgstr "Nome de arquivo inválido."
 
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
@@ -4915,7 +4924,7 @@ msgstr "Não foi possível criar o token de autenticação para %s"
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
-msgstr ""
+msgstr "Não foi encontrado nenhum nome de base de dados ou DSN."
 
 #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
 #: classes/Message.php:46
@@ -4937,26 +4946,26 @@ msgstr "Não foi possível atualizar a mensagem com a nova URI."
 #: classes/Notice.php:98
 #, php-format
 msgid "No such profile (%1$d) for notice (%2$d)."
-msgstr ""
+msgstr "Não existe o perfil (%1$d) para a nota (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Erro no banco de dados durante a inserção da hashtag: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problema no salvamento da mensagem. Ela é muito extensa."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problema no salvamento da mensagem. Usuário desconhecido."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4964,7 +4973,7 @@ msgstr ""
 "novamente daqui a alguns minutos."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4973,29 +4982,29 @@ msgstr ""
 "publique novamente daqui a alguns minutos."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Você está proibido de publicar mensagens neste site."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problema no salvamento da mensagem."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
-msgstr ""
+msgstr "O tipo fornecido ao método saveKnownGroups é incorreto"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problema no salvamento das mensagens recebidas do grupo."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5005,7 +5014,7 @@ msgstr "RT @%1$s %2$s"
 #: classes/Profile.php:737
 #, php-format
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
-msgstr ""
+msgstr "Não é possível revogar a função \"%1$s\" do usuário #%2$d; não existe."
 
 #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5013,18 +5022,18 @@ msgstr ""
 #, php-format
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
+"Não é possível revogar a função \"%1$s\" do usuário #%2$d; erro na base de "
+"dados."
 
 #. TRANS: Exception thrown when a right for a non-existing user profile is checked.
 #: classes/Remote_profile.php:54
-#, fuzzy
 msgid "Missing profile."
-msgstr "O usuário não tem perfil."
+msgstr "Perfil não existe."
 
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "Não foi possível salvar os avisos do site."
+msgstr "Não foi salvar gravar a categoria."
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
@@ -5048,21 +5057,18 @@ msgstr "Não assinado!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Não foi possível excluir a auto-assinatura."
+msgstr "Não foi possível salvar a assinatura."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Não foi possível excluir o token de assinatura OMB."
+msgstr "Não foi possível salvar a assinatura."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Não foi possível excluir a assinatura."
+msgstr "Não foi possível salvar a assinatura."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5343,7 +5349,7 @@ msgid ""
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
 "Ele funciona sobre o software de microblog [StatusNet](http://status.net/), "
-"versão %s, disponível sob a [GNU Affero General Public License] (http://www."
+"versão %s, disponível sob a [GNU Affero General Public License](http://www."
 "fsf.org/licensing/licenses/agpl-3.0.html)."
 
 #. TRANS: DT element for StatusNet site content license.
@@ -5651,44 +5657,21 @@ msgstr "O comando foi completado"
 msgid "Command failed"
 msgstr "O comando falhou"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Não existe uma mensagem com essa id"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "O usuário não tem uma \"última mensagem\""
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Não foi possível encontrar um usuário com a identificação %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Não foi possível encontrar um usuário local com a identificação %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Desculpe, mas esse comando ainda não foi implementado."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Não faz muito sentido chamar a sua própria atenção!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Foi enviada a chamada de atenção para %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5699,55 +5682,39 @@ msgstr ""
 "Assinantes: %2$s\n"
 "Mensagens: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Mensagem marcada como favorita."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Você já é um membro desse grupo."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Não foi possível associar o usuário %1$s ao grupo %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Não foi possível remover o usuário %1$s do grupo %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Nome completo: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Localização: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Site: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Sobre: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5758,146 +5725,103 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
-"A mensagem é muito extensa - o máximo são %1$d caracteres e você enviou %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "A mensagem direta para %s foi enviada"
+"A mensagem é muito extensa - o máximo são %1$d caracteres e você enviou %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Ocorreu um erro durante o envio da mensagem direta."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Você não pode repetir sua própria mensagem"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Você já repetiu essa mensagem"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Mensagem de %s repetida"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Erro na repetição da mensagem."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-"A mensagem é muito extensa - o máximo são %d caracteres e você enviou %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "A resposta a %s foi enviada"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Erro no salvamento da mensagem."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Especifique o nome do usuário que será assinado"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Não é possível assinar perfis OMB com comandos."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Efetuada a assinatura de %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Especifique o nome do usuário cuja assinatura será cancelada"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Cancelada a assinatura de %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "O comando não foi implementado ainda."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notificação desligada."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Não é possível desligar a notificação."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notificação ligada."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Não é possível ligar a notificação."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "O comando para autenticação está desabilitado"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Este link é utilizável somente uma vez e é válido somente por dois minutos: %"
-"s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Cancelada a assinatura de %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Você não está assinando ninguém."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Você já está assinando esta pessoa:"
 msgstr[1] "Você já está assinando estas pessoas:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Ninguém o assinou ainda."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Esta pessoa está assinando você:"
 msgstr[1] "Estas pessoas estão assinando você:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Você não é membro de nenhum grupo."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Você é membro deste grupo:"
 msgstr[1] "Você é membro destes grupos:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6561,7 +6485,7 @@ msgstr ""
 "privadas para envolver outras pessoas em uma conversa. Você também pode "
 "receber mensagens privadas."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "de"
 
@@ -6652,11 +6576,11 @@ msgstr "Enviar uma mensagem direta"
 msgid "To"
 msgstr "Para"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Caracteres disponíveis"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Enviar"
@@ -6665,28 +6589,28 @@ msgstr "Enviar"
 msgid "Send a notice"
 msgstr "Enviar uma mensagem"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "E aí, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Anexo"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Anexar um arquivo"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Divulgar minha localização"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Não divulgar minha localização"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6723,23 +6647,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "em"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "no contexto"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Repetida por"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Responder a esta mensagem"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Responder"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Mensagem repetida"
 
@@ -7066,11 +6994,6 @@ msgstr "Cancelar a assinatura deste usuário"
 msgid "Unsubscribe"
 msgstr "Cancelar"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "O usuário %s (%d) não tem nenhum registro do perfil."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Editar o avatar"
@@ -7118,56 +7041,56 @@ msgid "Moderator"
 msgstr "Moderador"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "alguns segundos atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "cerca de 1 minuto atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "cerca de %d minutos atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "cerca de 1 hora atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "cerca de %d horas atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "cerca de 1 dia atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "cerca de %d dias atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "cerca de 1 mês atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "cerca de %d meses atrás"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "cerca de 1 ano atrás"
 
@@ -7180,9 +7103,3 @@ msgstr "%s não é uma cor válida!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s não é uma cor válida! Utilize 3 ou 6 caracteres hexadecimais."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"A mensagem é muito extensa - o máximo são %1$d caracteres e você enviou %2$d."
index 7027150bdf7237ad0acfbddc3b3b4a0e68240c0d..e7b69c84b7546368e1cfa27cf6f9dccf54046a71 100644 (file)
@@ -1,6 +1,7 @@
 # Translation of StatusNet to Russian
 #
 # Author@translatewiki.net: Brion
+# Author@translatewiki.net: Eleferen
 # Author@translatewiki.net: Kirill
 # Author@translatewiki.net: Lockal
 # Author@translatewiki.net: Rubin
@@ -12,12 +13,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:57+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:25+0000\n"
 "Language-Team: Russian\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: ru\n"
 "X-Message-Group: out-statusnet\n"
@@ -94,6 +95,7 @@ msgstr "Сохранить"
 msgid "No such page."
 msgstr "Нет такой страницы."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -113,7 +115,7 @@ msgstr "Нет такой страницы."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Нет такого пользователя."
@@ -354,7 +356,8 @@ msgstr "Нет статуса с таким ID."
 msgid "This status is already a favorite."
 msgstr "Этот статус уже входит в число любимых."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Не удаётся создать любимую запись."
 
@@ -469,15 +472,19 @@ msgstr "Алиас не может совпадать с именем."
 msgid "Group not found."
 msgstr "Группа не найдена."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Вы уже являетесь членом этой группы."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Вы заблокированы из этой группы администратором."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Не удаётся присоединить пользователя %1$s к группе %2$s."
@@ -486,7 +493,10 @@ msgstr "Не удаётся присоединить пользователя %1
 msgid "You are not a member of this group."
 msgstr "Вы не являетесь членом этой группы."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Не удаётся удалить пользователя %1$s из группы %2$s."
@@ -646,11 +656,13 @@ msgstr "Вы не можете удалять статус других поль
 msgid "No such notice."
 msgstr "Нет такой записи."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Невозможно повторить собственную запись."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Запись уже повторена."
 
@@ -666,7 +678,7 @@ msgstr "Не найдено статуса с таким ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Клиент должен предоставить параметр «status» со значением."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -676,7 +688,7 @@ msgstr "Слишком длинная запись. Максимальная д
 msgid "Not found."
 msgstr "Не найдено."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Максимальная длина записи — %d символов, включая URL вложения."
@@ -792,7 +804,7 @@ msgid "Preview"
 msgstr "Просмотр"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Удалить"
 
@@ -885,6 +897,8 @@ msgstr "Заблокировать пользователя."
 msgid "Failed to save block information."
 msgstr "Не удаётся сохранить информацию о блокировании."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -894,8 +908,8 @@ msgstr "Не удаётся сохранить информацию о блок
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Нет такой группы."
 
@@ -1073,7 +1087,7 @@ msgid "Do not delete this notice"
 msgstr "Не удалять эту запись"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Удалить эту запись"
 
@@ -2176,7 +2190,7 @@ msgstr "Вы уже подписаны на пользователя:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2299,9 +2313,7 @@ msgstr "Вы должны авторизоваться для вступлени
 msgid "No nickname or ID."
 msgstr "Нет имени или ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s вступил в группу %2$s"
@@ -2310,13 +2322,12 @@ msgstr "%1$s вступил в группу %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Вы должны авторизоваться, чтобы покинуть группу."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Вы не являетесь членом этой группы."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s покинул группу %2$s"
@@ -2429,12 +2440,15 @@ msgstr "Используйте эту форму для создания нов
 msgid "New message"
 msgstr "Новое сообщение"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Вы не можете послать сообщение этому пользователю."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Нет контента!"
 
@@ -2442,7 +2456,8 @@ msgstr "Нет контента!"
 msgid "No recipient specified."
 msgstr "Нет адресата."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "Не посылайте сообщения сами себе; просто потихоньку скажите это себе."
@@ -2451,12 +2466,14 @@ msgstr "Не посылайте сообщения сами себе; прост
 msgid "Message sent"
 msgstr "Сообщение отправлено"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Прямое сообщение для %s послано."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ошибка AJAX"
 
@@ -2464,7 +2481,7 @@ msgstr "Ошибка AJAX"
 msgid "New notice"
 msgstr "Новая запись"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Запись опубликована"
 
@@ -2593,8 +2610,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Только %s URL в простом HTTP, пожалуйста."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Неподдерживаемый формат данных."
 
@@ -3501,7 +3518,7 @@ msgstr "Вы не можете повторить собственную зап
 msgid "You already repeated that notice."
 msgstr "Вы уже повторили эту запись."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Повторено"
 
@@ -4916,23 +4933,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Нет такого профиля (%1$d) для записи (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Ошибка баз данных при вставке хеш-тегов: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Проблемы с сохранением записи. Слишком длинно."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Проблема при сохранении записи. Неизвестный пользователь."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4940,7 +4957,7 @@ msgstr ""
 "попробуйте вновь через пару минут."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4949,29 +4966,29 @@ msgstr ""
 "и попробуйте вновь через пару минут."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Вам запрещено поститься на этом сайте (бан)"
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Проблемы с сохранением записи."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Для saveKnownGroups указан неверный тип"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Проблемы с сохранением входящих сообщений группы."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5625,44 +5642,21 @@ msgstr "Команда завершена"
 msgid "Command failed"
 msgstr "Команда неудачна"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Записи с таким id не существует"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "У пользователя нет последней записи."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Не удаётся найти пользователя с именем %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Не удаётся найти пользователя с именем %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Простите, эта команда ещё не выполнена."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Нет смысла «подталкивать» самого себя!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "«Подталкивание» послано %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5673,55 +5667,39 @@ msgstr ""
 "Подписчиков: %2$s\n"
 "Записей: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Запись помечена как любимая."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Вы уже являетесь членом этой группы."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Не удаётся присоединить пользователя %1$s к группе %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Не удаётся удалить пользователя %1$s из группы %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Полное имя: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Месторасположение: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Домашняя страница: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "О пользователе: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5732,147 +5710,106 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
-"Сообщение слишком велико. Предельно допустимая длина составляет %1$d "
-"символов, вы отправили %2$d."
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Прямое сообщение для %s послано."
+"Сообщение слишком длинное — не больше %1$d символов, вы отправили %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Ошибка при отправке прямого сообщения."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Невозможно повторить собственную запись."
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Эта запись уже повторена"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Запись %s повторена"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Ошибка при повторении записи."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Запись слишком длинная — не больше %d символов, вы посылаете %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Ответ %s отправлен"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Проблемы с сохранением записи."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Укажите имя пользователя для подписки."
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Невозможно подписаться командой на профили OMB."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Подписано на %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Укажите имя пользователя для отмены подписки."
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Отписано от %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Команда ещё не выполнена."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Оповещение отсутствует."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Нет оповещения."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Есть оповещение."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Есть оповещение."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Команда входа отключена"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr "Эта ссылка действительна только один раз в течение 2 минут: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Отписано %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Вы ни на кого не подписаны."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Вы подписаны на этих людей:"
 msgstr[1] "Вы подписаны на этих людей:"
 msgstr[2] "Вы подписаны на этих людей:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Никто не подписан на вас."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Эти люди подписались на вас:"
 msgstr[1] "Эти люди подписались на вас:"
 msgstr[2] "Эти люди подписались на вас:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Вы не состоите ни в одной группе."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Вы являетесь участником следующих групп:"
 msgstr[1] "Вы являетесь участником следующих групп:"
 msgstr[2] "Вы являетесь участником следующих групп:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6533,7 +6470,7 @@ msgstr ""
 "вовлечения других пользователей в разговор. Сообщения, получаемые от других "
 "людей, видите только вы."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "от"
 
@@ -6621,11 +6558,11 @@ msgstr "Послать прямую запись"
 msgid "To"
 msgstr "Для"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "6 или больше знаков"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Отправить"
@@ -6634,28 +6571,28 @@ msgstr "Отправить"
 msgid "Send a notice"
 msgstr "Послать запись"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Что нового, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Прикрепить"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Прикрепить файл"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Поделиться своим местоположением."
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Не публиковать своё местоположение"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6692,23 +6629,27 @@ msgstr "%1$u°%2$u'%3$u\" %4$s %5$u°%6$u'%7$u\" %8$s"
 msgid "at"
 msgstr "из"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "web"
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "переписка"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Повторено"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Ответить на эту запись"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Ответить"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Запись повторена"
 
@@ -7035,11 +6976,6 @@ msgstr "Отписаться от этого пользователя"
 msgid "Unsubscribe"
 msgstr "Отписаться"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "У пользователя %s (%d) нет профильной записи."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Изменить аватару"
@@ -7087,56 +7023,56 @@ msgid "Moderator"
 msgstr "Модератор"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "пару секунд назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "около минуты назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "около %d минут(ы) назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "около часа назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "около %d часа(ов) назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "около дня назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "около %d дня(ей) назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "около месяца назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "около %d месяца(ев) назад"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "около года назад"
 
@@ -7151,9 +7087,3 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
 "%s не является допустимым цветом! Используйте 3 или 6 шестнадцатеричных "
 "символов."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Сообщение слишком длинное — не больше %1$d символов, вы отправили %2$d."
index 822d4fcf88877919a8957492692d35087e1d2d18..012a39fbdb25f68d8480defeb178bc7625f4c2d9 100644 (file)
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:48+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -86,6 +86,7 @@ msgstr ""
 msgid "No such page."
 msgstr ""
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -105,7 +106,7 @@ msgstr ""
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr ""
@@ -334,7 +335,8 @@ msgstr ""
 msgid "This status is already a favorite."
 msgstr ""
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr ""
 
@@ -446,15 +448,19 @@ msgstr ""
 msgid "Group not found."
 msgstr ""
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr ""
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr ""
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr ""
@@ -463,7 +469,10 @@ msgstr ""
 msgid "You are not a member of this group."
 msgstr ""
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr ""
@@ -618,11 +627,13 @@ msgstr ""
 msgid "No such notice."
 msgstr ""
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr ""
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr ""
 
@@ -638,7 +649,7 @@ msgstr ""
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -648,7 +659,7 @@ msgstr ""
 msgid "Not found."
 msgstr ""
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -853,6 +864,8 @@ msgstr ""
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -862,8 +875,8 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr ""
 
@@ -2081,7 +2094,7 @@ msgstr ""
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr ""
@@ -2174,9 +2187,7 @@ msgstr ""
 msgid "No nickname or ID."
 msgstr ""
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr ""
@@ -2185,13 +2196,12 @@ msgstr ""
 msgid "You must be logged in to leave a group."
 msgstr ""
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr ""
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr ""
@@ -2299,12 +2309,15 @@ msgstr ""
 msgid "New message"
 msgstr ""
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr ""
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr ""
 
@@ -2312,7 +2325,8 @@ msgstr ""
 msgid "No recipient specified."
 msgstr ""
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2321,12 +2335,14 @@ msgstr ""
 msgid "Message sent"
 msgstr ""
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
@@ -2334,7 +2350,7 @@ msgstr ""
 msgid "New notice"
 msgstr ""
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr ""
 
@@ -2455,8 +2471,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr ""
 
@@ -4628,58 +4644,58 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr ""
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr ""
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr ""
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -5318,44 +5334,53 @@ msgstr ""
 msgid "Command failed"
 msgstr ""
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
 msgstr ""
 
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
+#. TRANS: Command exception text shown when a last user notice is requested and it does not exist.
+#. TRANS: Error text shown when a last user notice is requested and it does not exist.
+#: lib/command.php:101 lib/command.php:630
+msgid "User has no last notice."
 msgstr ""
 
 #. TRANS: Message given requesting a profile for a non-existing user.
 #. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
+#: lib/command.php:130
 #, php-format
-msgid "Could not find a user with nickname %s"
+msgid "Could not find a user with nickname %s."
 msgstr ""
 
 #. TRANS: Message given getting a non-existing user.
 #. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
+#: lib/command.php:150
 #, php-format
-msgid "Could not find a local user with nickname %s"
+msgid "Could not find a local user with nickname %s."
 msgstr ""
 
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
+#: lib/command.php:240
 #, php-format
-msgid "Nudge sent to %s"
+msgid "Nudge sent to %s."
 msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5363,55 +5388,53 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr ""
-
-#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: Message given having added a user to a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
+#: lib/command.php:360
 #, php-format
-msgid "Could not join user %1$s to group %2$s"
+msgid "%1$s joined group %2$s."
 msgstr ""
 
-#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: Message given having removed a user from a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
+#: lib/command.php:408
 #, php-format
-msgid "Could not remove user %1$s from group %2$s"
+msgid "%1$s left group %2$s."
 msgstr ""
 
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr ""
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr ""
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr ""
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr ""
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5420,142 +5443,167 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr ""
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr ""
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr ""
-
 #. TRANS: Message given having repeated a notice from another user.
 #. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
+#: lib/command.php:554
 #, php-format
-msgid "Notice from %s repeated"
+msgid "Notice from %s repeated."
 msgstr ""
 
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr ""
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
+#. TRANS: Text shown having sent a reply to a notice successfully.
+#. TRANS: %s is the nickname of the user of the notice the reply was sent to.
+#: lib/command.php:603
 #, php-format
-msgid "Reply to %s sent"
+msgid "Reply to %s sent."
 msgstr ""
 
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr ""
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
+#. TRANS: Text shown after having subscribed to another user successfully.
+#. TRANS: %s is the name of the user the subscription was requested for.
+#: lib/command.php:672
 #, php-format
-msgid "Subscribed to %s"
+msgid "Subscribed to %s."
 msgstr ""
 
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
+#. TRANS: Text shown after having unsubscribed from another user successfully.
+#. TRANS: %s is the name of the user the unsubscription was requested for.
+#: lib/command.php:705
 #, php-format
-msgid "Unsubscribed from %s"
+msgid "Unsubscribed from %s."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr ""
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr ""
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
+#. TRANS: Text shown after issuing the lose command successfully (stop another user from following the current user).
+#. TRANS: %s is the name of the user the unsubscription was requested for.
+#: lib/command.php:813
 #, php-format
-msgid "Unsubscribed  %s"
+msgid "Unsubscribed %s."
 msgstr ""
 
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr ""
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr ""
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr ""
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] ""
 msgstr[1] ""
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6156,11 +6204,11 @@ msgstr ""
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr ""
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr ""
@@ -6169,28 +6217,28 @@ msgstr ""
 msgid "Send a notice"
 msgstr ""
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr ""
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr ""
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6225,6 +6273,10 @@ msgstr ""
 msgid "at"
 msgstr ""
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr ""
@@ -6564,11 +6616,6 @@ msgstr ""
 msgid "Unsubscribe"
 msgstr ""
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr ""
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr ""
@@ -6616,56 +6663,56 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
@@ -6678,8 +6725,3 @@ msgstr ""
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 16a0858ea7c95bbefbe12a6c8c36afc58d88b68e..7adc559918e938e5826f26fd6e3af55ac7e84109 100644 (file)
@@ -10,12 +10,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:24:59+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:27+0000\n"
 "Language-Team: Swedish\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: sv\n"
 "X-Message-Group: out-statusnet\n"
@@ -91,6 +91,7 @@ msgstr "Spara"
 msgid "No such page."
 msgstr "Ingen sådan sida"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -110,7 +111,7 @@ msgstr "Ingen sådan sida"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Ingen sådan användare."
@@ -167,23 +168,22 @@ msgstr ""
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Du kan prova att [knuffa %1$s](../%2$s) från dennes profil eller [skriva "
-"någonting för hans eller hennes uppmärksamhet](%%%%action.newnotice%%%%?"
-"status_textarea=%3$s)."
+"Var den första att [skriva i detta ämne](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
-"Varför inte [registrera ett konto](%%%%action.register%%%%) och sedan knuffa "
-"%s eller skriva en notis för hans eller hennes uppmärksamhet."
+"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
+"posta en!"
 
 #. TRANS: H1 text
 #: actions/all.php:182
@@ -348,7 +348,8 @@ msgstr "Ingen status hittad med det ID:t."
 msgid "This status is already a favorite."
 msgstr "Denna status är redan en favorit."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Kunde inte skapa favorit."
 
@@ -361,9 +362,8 @@ msgid "Could not delete favorite."
 msgstr "Kunde inte ta bort favoriten."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Kunde inte följa användare: användare hittades inte."
+msgstr "Kunde inte sluta följa användaren: användaren hittades inte."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -379,9 +379,8 @@ msgid "You cannot unfollow yourself."
 msgstr "Du kan inte sluta följa dig själv."
 
 #: actions/apifriendshipsexists.php:91
-#, fuzzy
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr "Två användar-ID:n eller screen_names måste tillhandahållas."
+msgstr ""
 
 #: actions/apifriendshipsshow.php:134
 msgid "Could not determine source user."
@@ -427,7 +426,7 @@ msgstr "Fullständigt namn är för långt (max 255 tecken)."
 #: actions/newapplication.php:172
 #, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "Beskrivning är för lång (max 140 tecken)."
+msgstr "Beskrivning är för lång (max %d tecken)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -463,15 +462,19 @@ msgstr "Alias kan inte vara samma som smeknamn."
 msgid "Group not found."
 msgstr "Grupp hittades inte."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Du är redan en medlem i denna grupp."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Du har blivit blockerad från denna grupp av administratören."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Kunde inte ansluta användare %1$s till grupp %2$s."
@@ -480,7 +483,10 @@ msgstr "Kunde inte ansluta användare %1$s till grupp %2$s."
 msgid "You are not a member of this group."
 msgstr "Du är inte en medlem i denna grupp."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Kunde inte ta bort användare %1$s från grupp %2$s."
@@ -509,11 +515,6 @@ msgstr "%s grupper"
 msgid "groups on %s"
 msgstr "grupper på %s"
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Ladda upp fil"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr "Ingen oauth_token-parameter angiven."
@@ -639,11 +640,13 @@ msgstr "Du kan inte ta bort en annan användares status."
 msgid "No such notice."
 msgstr "Ingen sådan notis."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Kan inte upprepa din egen notis."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Redan upprepat denna notis."
 
@@ -659,7 +662,7 @@ msgstr "Ingen status med det ID:t hittades."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -669,7 +672,7 @@ msgstr "Det är för långt. Maximal notisstorlek är %d tecken."
 msgid "Not found."
 msgstr "Hittades inte."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "Maximal notisstorlek är %d tecken, inklusive webbadress för bilaga."
@@ -785,7 +788,7 @@ msgid "Preview"
 msgstr "Förhandsgranska"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Ta bort"
 
@@ -878,6 +881,8 @@ msgstr "Blockera denna användare"
 msgid "Failed to save block information."
 msgstr "Misslyckades att spara blockeringsinformation."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -887,8 +892,8 @@ msgstr "Misslyckades att spara blockeringsinformation."
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Ingen sådan grupp."
 
@@ -1067,7 +1072,7 @@ msgid "Do not delete this notice"
 msgstr "Ta inte bort denna notis"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "Ta bort denna notis"
 
@@ -2157,7 +2162,7 @@ msgstr "Du prenumererar redan på dessa användare:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2282,9 +2287,7 @@ msgstr "Du måste vara inloggad för att kunna gå med i en grupp."
 msgid "No nickname or ID."
 msgstr "Inget smeknamn eller ID."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s gick med i grupp %2$s"
@@ -2293,13 +2296,12 @@ msgstr "%1$s gick med i grupp %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Du måste vara inloggad för att lämna en grupp."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Du är inte en medlem i den gruppen."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s lämnade grupp %2$s"
@@ -2411,12 +2413,15 @@ msgstr "Använd detta formulär för att skapa en ny grupp."
 msgid "New message"
 msgstr "Nytt meddelande"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Du kan inte skicka ett meddelande till den användaren."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Inget innehåll!"
 
@@ -2424,7 +2429,8 @@ msgstr "Inget innehåll!"
 msgid "No recipient specified."
 msgstr "Ingen mottagare angiven."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2435,12 +2441,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Meddelande skickat"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Direktmeddelande till %s skickat."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "AJAX-fel"
 
@@ -2448,7 +2456,7 @@ msgstr "AJAX-fel"
 msgid "New notice"
 msgstr "Ny notis"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Notis postad"
 
@@ -2499,12 +2507,9 @@ msgid "Updates matching search term \"%1$s\" on %2$s!"
 msgstr "Uppdateringar som matchar söksträngen \"%1$s\" på %2$s!"
 
 #: actions/nudge.php:85
-#, fuzzy
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
-"Denna användare har inte tillåtit knuffar eller har inte bekräftat eller "
-"angett sitt e-post än."
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
@@ -2579,8 +2584,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "Endast %s-webbadresser över vanlig HTTP."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Ett dataformat som inte stödjs"
 
@@ -3492,7 +3497,7 @@ msgstr "Du kan inte upprepa din egna notis."
 msgid "You already repeated that notice."
 msgstr "Du har redan upprepat denna notis."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
 msgstr "Upprepad"
 
@@ -3527,13 +3532,11 @@ msgid "Replies feed for %s (Atom)"
 msgstr "Flöde med svar för %s (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr ""
-"Detta är tidslinjen som visar svar till %s1$ men %2$s har inte tagit emot en "
-"notis för dennes uppmärksamhet än."
+msgstr "Detta är tidslinjen för %1$s men %2$s har inte postat något än."
 
 #: actions/replies.php:204
 #, php-format
@@ -3545,13 +3548,13 @@ msgstr ""
 "personer eller [gå med i grupper](%%action.groups%%)."
 
 #: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
-"Du kan prova att [knuffa %1$s](../%2$s) eller [posta någonting för hans "
-"eller hennes uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+"Var den första att [skriva i detta ämne](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/repliesrss.php:72
 #, php-format
@@ -3727,25 +3730,15 @@ msgstr ""
 "bredvid någon notis du skulle vilja bokmärka för senare tillfälle eller för "
 "att sätta strålkastarljuset på."
 
-#: actions/showfavorites.php:208
-#, fuzzy, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Post something interesting they "
-"would add to their favorites :)"
-msgstr ""
-"%s har inte lagt till några notiser till sina favoriter ännu. Posta något "
-"intressant de skulle lägga till sina favoriter :)"
-
 #: actions/showfavorites.php:212
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
-"%s har inte lagt till några notiser till sina favoriter ännu. Varför inte "
-"[registrera ett konto](%%%%action.register%%%%) och posta något intressant "
-"de skulle lägga till sina favoriter :)"
+"Varför inte [registrera ett konto](%%action.register%%) och vara först med "
+"att lägga en notis till dina favoriter!"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
@@ -3924,13 +3917,13 @@ msgstr ""
 "inte börja nu?"
 
 #: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
-"Du kan prova att knuffa %1$s eller [posta något för hans eller hennes "
-"uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%2$s)."
+"Var den första att [skriva i detta ämne](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
 
 #: actions/showstream.php:243
 #, php-format
@@ -4819,13 +4812,11 @@ msgstr "Robin tycker att något är omöjligt"
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
 #: classes/File.php:190
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
-"Inga filer får vara större än %d byte och filen du skickade var %d byte. "
-"Prova att ladda upp en mindre version."
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
@@ -4841,12 +4832,6 @@ msgstr "En så här stor fil skulle överskrida din användarkvot på %d byte."
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr "En sådan här stor fil skulle överskrida din månatliga kvot på %d byte."
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Ogiltig storlek."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
@@ -4902,23 +4887,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Databasfel vid infogning av hashtag: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Problem vid sparande av notis. För långt."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Problem vid sparande av notis. Okänd användare."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4926,7 +4911,7 @@ msgstr ""
 "minuter."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4935,29 +4920,29 @@ msgstr ""
 "om ett par minuter."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Du är utestängd från att posta notiser på denna webbplats."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Problem med att spara notis."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Problem med att spara gruppinkorg."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4976,18 +4961,6 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Användaren har ingen profil."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Kunde inte spara webbplatsnotis."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
@@ -5010,21 +4983,18 @@ msgstr "Inte prenumerant!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Kunde inte ta bort själv-prenumeration."
+msgstr "Kunde inte spara prenumeration."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Kunde inte radera OMB prenumerations-token."
+msgstr "Kunde inte spara prenumeration."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Kunde inte ta bort prenumeration."
+msgstr "Kunde inte spara prenumeration."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5609,44 +5579,21 @@ msgstr "Kommando komplett"
 msgid "Command failed"
 msgstr "Kommando misslyckades"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Notis med den ID:n finns inte"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Användare har ingen sista notis"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Kunde inte hitta en användare med smeknamnet %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Kunde inte hitta en lokal användare med smeknamnet %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Tyvärr, detta kommando är inte implementerat än."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Det verkar inte vara särskilt meningsfullt att knuffa dig själv!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Knuff skickad till %s"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5657,55 +5604,39 @@ msgstr ""
 "Prenumeranter: %2$s\n"
 "Notiser: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Notis markerad som favorit."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Du är redan en medlem i denna grupp"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Kunde inte ansluta användare %1$s till grupp %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Kunde inte ta bort användare %1$s från grupp %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Fullständigt namn: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Plats: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Hemsida: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Om: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5716,143 +5647,102 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "Meddelande för långt - maximum är %1$d tecken, du skickade %2$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "Direktmeddelande till %s skickat"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "Meddelande för långt - maximum är %1$d tecken, du skickade %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Fel vid sändning av direktmeddelande."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Kan inte upprepa din egen notis"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Redan upprepat denna notis"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Notis fron %s upprepad"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Fel vid upprepning av notis."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Notis för långt - maximum är %d tecken, du skickade %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Svar på %s skickat"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Fel vid sparande av notis."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Ange namnet på användaren att prenumerara på"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Kan inte prenumera på OMB-profiler via kommando."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Prenumerar på %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Ange namnet på användaren att avsluta prenumeration på"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Prenumeration hos %s avslutad"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Kommando inte implementerat än."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Notifikation av."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Kan inte sätta på notifikation."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Notifikation på."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Kan inte stänga av notifikation."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Inloggningskommando är inaktiverat"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Denna länk är endast användbar en gång, och gäller bara i 2 minuter: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Prenumeration avslutad %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Du prenumererar inte på någon."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Du prenumererar på denna person:"
 msgstr[1] "Du prenumererar på dessa personer:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "Ingen prenumerar på dig."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Denna person prenumererar på dig:"
 msgstr[1] "Dessa personer prenumererar på dig:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Du är inte medlem i några grupper."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Du är en medlem i denna grupp:"
 msgstr[1] "Du är en medlem i dessa grupper:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6510,7 +6400,7 @@ msgstr ""
 "engagera andra användare i konversationen. Folk kan skicka meddelanden till "
 "dig som bara du ser."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "från"
 
@@ -6599,11 +6489,11 @@ msgstr "Skicka en direktnotis"
 msgid "To"
 msgstr "Till"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Tillgängliga tecken"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Skicka"
@@ -6612,28 +6502,28 @@ msgstr "Skicka"
 msgid "Send a notice"
 msgstr "Skicka en notis"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Vad är på gång, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Bifoga"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Bifoga en fil"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Dela min plats"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Dela inte min plats"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6670,23 +6560,27 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "på"
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "i sammanhang"
 
-#: lib/noticelist.php:602
+#: lib/noticelist.php:603
 msgid "Repeated by"
 msgstr "Upprepad av"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "Svara på denna notis"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Svara"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "Notis upprepad"
 
@@ -7012,11 +6906,6 @@ msgstr "Avsluta prenumerationen på denna användare"
 msgid "Unsubscribe"
 msgstr "Avsluta pren."
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Användare %s (%d) har inga profiluppgifter."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Redigera avatar"
@@ -7064,56 +6953,56 @@ msgid "Moderator"
 msgstr "Moderator"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "ett par sekunder sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "för nån minut sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "för %d minuter sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "för en timma sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "för %d timmar sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "för en dag sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "för %d dagar sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "för en månad sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "för %d månader sedan"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "för ett år sedan"
 
@@ -7126,8 +7015,3 @@ msgstr "%s är inte en giltig färg!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s är inte en giltig färg! Använd 3 eller 6 hexadecimala tecken."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "Meddelande för långt - maximum är %1$d tecken, du skickade %2$d."
index bd506b98a0bafc40079069870fe914976c849674..8bed78d3bd8a3bdffc994c0f8d3ac144ad78e7b1 100644 (file)
@@ -9,12 +9,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:25:01+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:30+0000\n"
 "Language-Team: Telugu\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: te\n"
 "X-Message-Group: out-statusnet\n"
@@ -89,6 +89,7 @@ msgstr "భద్రపరచు"
 msgid "No such page."
 msgstr "అటువంటి పేజీ లేదు."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -108,7 +109,7 @@ msgstr "అటువంటి పేజీ లేదు."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "అటువంటి వాడుకరి లేరు."
@@ -161,22 +162,6 @@ msgid ""
 "something yourself."
 msgstr "ఇతరులకి చందా చేరండి, [ఏదైనా గుంపులో చేరండి](%%action.groups%%) లేదా మీరే ఏదైనా వ్రాయండి."
 
-#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
-#: actions/all.php:146
-#, fuzzy, php-format
-msgid ""
-"You can try to [nudge %1$s](../%2$s) from their profile or [post something "
-"to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
-msgstr ""
-"[ఈ విషయంపై](%%%%action.newnotice%%%%?status_textarea=%s) వ్రాసే మొదటివారు మీరే అవ్వండి!"
-
-#: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
-#, fuzzy, php-format
-msgid ""
-"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
-"post a notice to them."
-msgstr "[ఒక ఖాతాని నమోదుచేసుకుని](%%action.register%%) మీరే మొదట వ్రాసేవారు ఎందుకు కాకూడదు!"
-
 #. TRANS: H1 text
 #: actions/all.php:182
 msgid "You and friends"
@@ -190,32 +175,6 @@ msgstr "మీరు మరియు మీ స్నేహితులు"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr "%2$sలో %1$s మరియు స్నేహితుల నుండి తాజాకరణలు!"
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "నిర్ధారణ సంకేతం కనబడలేదు."
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -236,11 +195,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "వాడుకరిని తాజాకరించలేకున్నాం."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -251,11 +205,6 @@ msgstr "వాడుకరిని తాజాకరించలేకున
 msgid "User has no profile."
 msgstr "వాడుకరికి ప్రొఫైలు లేదు."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "ప్రొఫైలుని భద్రపరచలేకున్నాం."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -278,12 +227,6 @@ msgstr ""
 msgid "Unable to save your design settings."
 msgstr "మీ రూపురేఖల అమరికలని భద్రపరచలేకున్నాం."
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "వాడుకరిని తాజాకరించలేకున్నాం."
-
 #: actions/apiblockcreate.php:105
 msgid "You cannot block yourself!"
 msgstr "మిమ్మల్ని మీరే నిరోధించుకోలేరు!"
@@ -292,10 +235,6 @@ msgstr "మిమ్మల్ని మీరే నిరోధించుక
 msgid "Block user failed."
 msgstr "వాడుకరి నిరోధం విఫలమైంది."
 
-#: actions/apiblockdestroy.php:114
-msgid "Unblock user failed."
-msgstr ""
-
 #: actions/apidirectmessage.php:89
 #, php-format
 msgid "Direct messages from %s"
@@ -342,7 +281,8 @@ msgstr "ఆ IDతో ఏ నోటీసూ కనబడలేదు."
 msgid "This status is already a favorite."
 msgstr "ఈ నోటీసు ఇప్పటికే మీ ఇష్టాంశం."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "ఇష్టాంశాన్ని సృష్టించలేకపోయాం."
 
@@ -355,9 +295,8 @@ msgid "Could not delete favorite."
 msgstr "ఇష్టాంశాన్ని తొలగించలేకపోయాం."
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "వాడుకరిని అనుసరించలేకపోయాం: వాడుకరి కనబడలేదు."
+msgstr "వాడుకరిని అనుసరించలేకపోయాం: %s ఇప్పటికే మీ జాబితాలో ఉన్నారు."
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
@@ -365,9 +304,8 @@ msgid "Could not follow user: %s is already on your list."
 msgstr "వాడుకరిని అనుసరించలేకపోయాం: %s ఇప్పటికే మీ జాబితాలో ఉన్నారు."
 
 #: actions/apifriendshipsdestroy.php:109
-#, fuzzy
 msgid "Could not unfollow user: User not found."
-msgstr "à°\93à°ªà±\86à°¨à±\8dà°\90à°¡à±\80 à°«à°¾à°°à°®à±\81à°¨à±\81 à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82: %s"
+msgstr "వాడà±\81à°\95రిని à°\85à°¨à±\81సరిà°\82à°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82: %s à°\87à°ªà±\8dà°ªà°\9fà°¿à°\95à±\87 à°®à±\80 à°\9cాబితాలà±\8b à°\89à°¨à±\8dనారà±\81."
 
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
@@ -378,9 +316,8 @@ msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "వాడà±\81à°\95రిని à°¤à°¾à°\9cà°¾à°\95à°°à°¿à°\82à°\9aà°²à±\87à°\95à±\81à°¨à±\8dà°¨ాం."
+msgstr "à°²à°\95à±\8dà°·à±\8dయిత à°µà°¾à°¡à±\81à°\95రిని à°\95à°¨à±\81à°\97à±\8aనలà±\87à°\95à°ªà±\8bà°¯ాం."
 
 #: actions/apifriendshipsshow.php:142
 msgid "Could not find target user."
@@ -457,15 +394,19 @@ msgstr "మారుపేరు పేరుతో సమానంగా ఉం
 msgid "Group not found."
 msgstr "గుంపు దొరకలేదు."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "మీరు ఇప్పటికే ఆ గుంపులో సభ్యులు."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "నిర్వాహకులు ఆ గుంపు నుండి మిమ్మల్ని నిరోధించారు."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "వాడుకరి %1$sని %2$s గుంపులో చేర్చలేకపోయాం"
@@ -474,7 +415,10 @@ msgstr "వాడుకరి %1$sని %2$s గుంపులో చేర్
 msgid "You are not a member of this group."
 msgstr "మీరు ఈ గుంపులో సభ్యులు కాదు."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "వాడుకరి %1$sని %2$s గుంపు నుండి తొలగించలేకపోయాం."
@@ -504,18 +448,16 @@ msgid "groups on %s"
 msgstr "%s పై గుంపులు"
 
 #: actions/apimediaupload.php:99
-#, fuzzy
 msgid "Upload failed."
-msgstr "à°«à±\88à°²à±\81ని à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aà±\81"
+msgstr "à°\8eà°\95à±\8dà°\95à°¿à°\82à°ªà±\81 à°µà°¿à°«à°²à°®à±\88à°\82ది."
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "తపà±\8dà°ªà±\81à°¡à±\81 à°ªà°°à°¿à°®à°¾à°£à°\82."
+msgstr "తపà±\8dà°ªà±\81à°¡à±\81 à°ªà°¾à°¤à±\8dà°°."
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
@@ -540,14 +482,8 @@ msgid "Invalid nickname / password!"
 msgstr "తప్పుడు పేరు / సంకేతపదం!"
 
 #: actions/apioauthauthorize.php:159
-#, fuzzy
 msgid "Database error deleting OAuth application user."
-msgstr "అవతారాన్ని పెట్టడంలో పొరపాటు"
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "అవతారాన్ని పెట్టడంలో పొరపాటు"
+msgstr "ఈ ఉపకరణాన్ని తొలగించకు"
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -633,11 +569,13 @@ msgstr "ఇతర వాడుకరుల స్థితిని మీరు
 msgid "No such notice."
 msgstr "అటువంటి సందేశమేమీ లేదు."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "మీ నోటీసుని మీరే పునరావృతించలేరు."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "ఇప్పటికే ఆ నోటీసుని పునరావృతించారు."
 
@@ -653,7 +591,7 @@ msgstr "ఆ IDతో ఏ నోటీసు కనబడలేదు."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -663,7 +601,7 @@ msgstr "అది చాలా పొడవుంది. గరిష్ఠ న
 msgid "Not found."
 msgstr "కనబడలేదు."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr "గరిష్ఠ నోటీసు పొడవు %d అక్షరాలు, జోడింపు URLని కలుపుకుని."
@@ -672,16 +610,6 @@ msgstr "గరిష్ఠ నోటీసు పొడవు %d అక్షర
 msgid "Unsupported format."
 msgstr ""
 
-#: actions/apitimelinefavorites.php:110
-#, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr ""
-
-#: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s యొక్క మైక్రోబ్లాగు"
-
 #: actions/apitimelinementions.php:118
 #, php-format
 msgid "%1$s / Updates mentioning %2$s"
@@ -703,29 +631,20 @@ msgid "%s updates from everyone!"
 msgstr "అందరి నుండి %s తాజాకరణలు!"
 
 #: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
 msgid "Repeated to %s"
-msgstr "%sకి స్పందనలు"
+msgstr "%s యొక్క పునరావృతం"
 
 #: actions/apitimelineretweetsofme.php:114
 #, php-format
 msgid "Repeats of %s"
 msgstr "%s యొక్క పునరావృతాలు"
 
-#: actions/apitimelinetag.php:105 actions/tag.php:67
-#, php-format
-msgid "Notices tagged with %s"
-msgstr ""
-
 #: actions/apitimelinetag.php:107 actions/tagrss.php:65
 #, php-format
 msgid "Updates tagged with %1$s on %2$s!"
 msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!"
 
-#: actions/apitrends.php:87
-msgid "API method under construction."
-msgstr ""
-
 #: actions/attachment.php:73
 msgid "No such attachment."
 msgstr "అటువంటి జోడింపు లేదు."
@@ -734,9 +653,8 @@ msgstr "అటువంటి జోడింపు లేదు."
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
 #: actions/grouplogo.php:86 actions/groupmembers.php:76
 #: actions/grouprss.php:91 actions/showgroup.php:121
-#, fuzzy
 msgid "No nickname."
-msgstr "పేరు లేదు."
+msgstr "పేరు"
 
 #: actions/avatarbynickname.php:64
 msgid "No size."
@@ -757,13 +675,6 @@ msgstr "అవతారం"
 msgid "You can upload your personal avatar. The maximum file size is %s."
 msgstr "మీ వ్యక్తిగత అవతారాన్ని మీరు ఎక్కించవచ్చు. గరిష్ఠ ఫైలు పరిమాణం %s."
 
-#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
-#: actions/grouplogo.php:181 actions/remotesubscribe.php:191
-#: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
-msgid "User without matching profile."
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
-
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
 msgid "Avatar settings"
@@ -780,7 +691,7 @@ msgid "Preview"
 msgstr "మునుజూపు"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "తొలగించు"
 
@@ -800,10 +711,6 @@ msgstr "ఏ దస్త్రమూ ఎక్కింపబడలేదు."
 msgid "Pick a square area of the image to be your avatar"
 msgstr "మీ అవతారానికి గానూ ఈ చిత్రం నుండి ఒక చతురస్రపు ప్రదేశాన్ని ఎంచుకోండి"
 
-#: actions/avatarsettings.php:347 actions/grouplogo.php:380
-msgid "Lost our file data."
-msgstr ""
-
 #: actions/avatarsettings.php:370
 msgid "Avatar updated."
 msgstr "అవతారాన్ని తాజాకరించాం."
@@ -872,6 +779,8 @@ msgstr "ఈ వాడుకరిని నిరోధించు"
 msgid "Failed to save block information."
 msgstr "నిరోధపు సమాచారాన్ని భద్రపరచడంలో విఫలమయ్యాం."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -881,38 +790,32 @@ msgstr "నిరోధపు సమాచారాన్ని భద్రప
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "అటువంటి గుంపు లేదు."
 
 #: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
+msgstr "%s నిరోధిత వాడుకరులు"
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s మరియు మిత్రులు"
+msgstr "%1$s మరియు మిత్రులు, పేజీ %2$d"
 
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
 msgstr "ఈ గుంపు లోనికి చేరకుండా నిరోధించిన వాడుకరుల యొక్క జాబితా."
 
 #: actions/blockedfromgroup.php:288
-#, fuzzy
 msgid "Unblock user from group"
-msgstr "అటువంటి వాడుకరి లేరు."
-
-#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
-msgid "Unblock"
-msgstr ""
+msgstr "వాడుకరిని గుంపు నుండి నిరోధించు"
 
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-#, fuzzy
 msgid "Unblock this user"
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°µà°¾à°¡à±\81à°\95à°°à°¿ à°²à±\87à°°à±\81."
+msgstr "à°\88 à°µà°¾à°¡à±\81à°\95రిని à°¨à°¿à°°à±\8bధిà°\82à°\9aà±\81"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
@@ -1059,7 +962,7 @@ msgid "Do not delete this notice"
 msgstr "ఈ నోటీసుని తొలగించకు"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr "ఈ నోటీసుని తొలగించు"
 
@@ -1128,11 +1031,6 @@ msgstr "సైటు అలంకారం"
 msgid "Theme for the site."
 msgstr "సైటుకి అలంకారం."
 
-#: actions/designadminpanel.php:467
-#, fuzzy
-msgid "Custom theme"
-msgstr "సైటు అలంకారం"
-
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
@@ -1163,14 +1061,6 @@ msgstr ""
 msgid "Off"
 msgstr ""
 
-#: actions/designadminpanel.php:545 lib/designsettings.php:156
-msgid "Turn background image on or off."
-msgstr ""
-
-#: actions/designadminpanel.php:550 lib/designsettings.php:161
-msgid "Tile background image"
-msgstr ""
-
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
 msgid "Change colours"
 msgstr "రంగులను మార్చు"
@@ -1203,14 +1093,6 @@ msgstr ""
 msgid "Use defaults"
 msgstr "అప్రమేయాలని ఉపయోగించు"
 
-#: actions/designadminpanel.php:677 lib/designsettings.php:248
-msgid "Restore default designs"
-msgstr ""
-
-#: actions/designadminpanel.php:683 lib/designsettings.php:254
-msgid "Reset back to default"
-msgstr ""
-
 #. TRANS: Submit button title
 #: actions/designadminpanel.php:685 actions/othersettings.php:126
 #: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
@@ -1235,9 +1117,9 @@ msgid "Add to favorites"
 msgstr "ఇష్టాంశాలకు చేర్చు"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°ªà°¤à±\8dà°°à°®à±\87à°®à±\80 లేదు."
+msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°\9cà±\8bà°¡à°¿à°\82à°ªà±\81 లేదు."
 
 #: actions/editapplication.php:54
 msgid "Edit Application"
@@ -1276,11 +1158,6 @@ msgstr "వివరణ తప్పనిసరి."
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "హోమ్ పేజీ URL సరైనది కాదు."
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr "సంస్థ తప్పనిసరి."
@@ -1289,10 +1166,6 @@ msgstr "సంస్థ తప్పనిసరి."
 msgid "Organization is too long (max 255 chars)."
 msgstr "సంస్థ పేరు మరీ పెద్దగా ఉంది (255 అక్షరాలు గరిష్ఠం)."
 
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
@@ -1419,18 +1292,6 @@ msgstr "చేర్చు"
 msgid "Incoming email"
 msgstr ""
 
-#. TRANS: Form instructions for incoming e-mail form in e-mail settings.
-#. TRANS: Form instructions for incoming SMS e-mail address form in SMS settings.
-#: actions/emailsettings.php:155 actions/smssettings.php:178
-msgid "Send email to this address to post new notices."
-msgstr ""
-
-#. TRANS: Instructions for incoming e-mail address input form.
-#. TRANS: Instructions for incoming SMS e-mail address input form.
-#: actions/emailsettings.php:164 actions/smssettings.php:186
-msgid "Make a new email address for posting to; cancels the old one."
-msgstr ""
-
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
@@ -1448,11 +1309,6 @@ msgstr "ఈమెయిలు అభిరుచులు"
 msgid "Send me notices of new subscriptions through email."
 msgstr ""
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:186
-msgid "Send me email when someone adds my notice as a favorite."
-msgstr ""
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:193
 msgid "Send me email when someone sends me a private message."
@@ -1473,11 +1329,6 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr "నేను ఈమెయిలు ద్వారా నోటీసులు పంపాలనుకుంటున్నాను."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-msgid "Publish a MicroID for my email address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful e-mail preferences save.
 #: actions/emailsettings.php:334
 msgid "Email preferences saved."
@@ -1488,11 +1339,6 @@ msgstr "ఈమెయిలు అభిరుచులు భద్రమయ్
 msgid "No email address."
 msgstr "ఈమెయిలు చిరునామా లేదు."
 
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-msgid "Cannot normalize that email address"
-msgstr ""
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
@@ -1517,13 +1363,6 @@ msgstr "ఆ ఈమెయిల్ చిరునామా ఇప్పటేక
 msgid "Couldn't insert confirmation code."
 msgstr "నిర్ధారణ సంకేతాన్ని చేర్చలేకపోయాం."
 
-#. TRANS: Message given saving valid e-mail address that is to be confirmed.
-#: actions/emailsettings.php:398
-msgid ""
-"A confirmation code was sent to the email address you added. Check your "
-"inbox (and spam box!) for the code and instructions on how to use it."
-msgstr ""
-
 #. TRANS: Message given canceling e-mail address confirmation that is not pending.
 #. TRANS: Message given canceling IM address confirmation that is not pending.
 #. TRANS: Message given canceling SMS phone number confirmation that is not pending.
@@ -1553,35 +1392,10 @@ msgstr "అది మీ ఈమెయిలు చిరునామా కా
 msgid "The email address was removed."
 msgstr "ఆ ఈమెయిలు చిరునామాని తొలగించాం."
 
-#: actions/emailsettings.php:493 actions/smssettings.php:568
-msgid "No incoming email address."
-msgstr ""
-
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-msgid "Couldn't update user record."
-msgstr ""
-
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-msgid "Incoming email address removed."
-msgstr ""
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
-
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr "ఈ నోటీసు ఇప్పటికే మీ ఇష్టాంశం!"
 
-#: actions/favor.php:92 lib/disfavorform.php:140
-msgid "Disfavor favorite"
-msgstr ""
-
 #: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
 msgid "Popular notices"
@@ -1606,13 +1420,6 @@ msgid ""
 "next to any notice you like."
 msgstr ""
 
-#: actions/favorited.php:156
-#, php-format
-msgid ""
-"Why not [register an account](%%action.register%%) and be the first to add a "
-"notice to your favorites!"
-msgstr ""
-
 #: actions/favoritesrss.php:111 actions/showfavorites.php:77
 #: lib/personalgroupnav.php:115
 #, php-format
@@ -1620,9 +1427,9 @@ msgid "%s's favorite notices"
 msgstr "%sకి ఇష్టమైన నోటీసులు"
 
 #: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
 msgid "Updates favored by %1$s on %2$s!"
-msgstr "%s యొక్క మైక్రోబ్లాగు"
+msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!"
 
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
@@ -1640,9 +1447,8 @@ msgid "A selection of some great users on %s"
 msgstr "%sలో కొందరు గొప్ప వాడుకరుల యొక్క ఎంపిక"
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "సందేశం లేదు"
+msgstr "సందేశం లేదు."
 
 #: actions/file.php:38
 msgid "No notice."
@@ -1684,11 +1490,6 @@ msgstr ""
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "దూరపు ప్రొపైలుని తాజాకరించటంలో పొరపాటు"
-
 #: actions/getfile.php:79
 msgid "No such file."
 msgstr "అటువంటి ఫైలు లేదు."
@@ -1713,18 +1514,6 @@ msgstr "ఈ సైటులో మీరు వాడుకరలకి పా
 msgid "User already has this role."
 msgstr "వాడుకరికి ఇప్పటికే ఈ పాత్ర ఉంది."
 
-#: actions/groupblock.php:71 actions/groupunblock.php:71
-#: actions/makeadmin.php:71 actions/subedit.php:46
-#: lib/profileformaction.php:79
-msgid "No profile specified."
-msgstr ""
-
-#: actions/groupblock.php:76 actions/groupunblock.php:76
-#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
-#: actions/unsubscribe.php:84 lib/profileformaction.php:86
-msgid "No profile with that ID."
-msgstr ""
-
 #: actions/groupblock.php:81 actions/groupunblock.php:81
 #: actions/makeadmin.php:81
 msgid "No group specified."
@@ -1766,12 +1555,7 @@ msgstr "ఈ వాడుకరిని ఈ గుంపు నుండి న
 msgid "Block this user from this group"
 msgstr "ఈ గుంపునుండి ఈ వాడుకరిని నిరోధించు"
 
-#: actions/groupblock.php:206
-msgid "Database error blocking user from group."
-msgstr ""
-
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
 msgstr "ఐడీ లేదు."
 
@@ -1795,9 +1579,8 @@ msgid "Couldn't update your design."
 msgstr "మీ రూపురేఖలని తాజాకరించలేకపోయాం."
 
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
 msgid "Design preferences saved."
-msgstr "అభిరుచులు భద్రమయ్యాయి."
+msgstr "à°\88à°®à±\86యిలà±\81 à°\85à°­à°¿à°°à±\81à°\9aà±\81à°²à±\81 à°­à°¦à±\8dరమయà±\8dయాయి."
 
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
@@ -1866,9 +1649,9 @@ msgstr "%s కాలరేఖ"
 
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #: actions/grouprss.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Updates from members of %1$s on %2$s!"
-msgstr "%s యొక్క మైక్రోబ్లాగు"
+msgstr "%2$sలో %1$s మరియు స్నేహితుల నుండి తాజాకరణలు!"
 
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
@@ -1975,15 +1758,6 @@ msgstr "IM చిరునామా"
 msgid "Current confirmed Jabber/GTalk address."
 msgstr "ప్రస్తుతం నిర్ధారించిన Jabber/GTalk చిరునామా"
 
-#. TRANS: Form note in IM settings form.
-#. TRANS: %s is the IM address set for the site.
-#: actions/imsettings.php:124
-#, php-format
-msgid ""
-"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
-"message with further instructions. (Did you add %s to your buddy list?)"
-msgstr ""
-
 #. TRANS: IM address input field instructions in IM settings form.
 #. TRANS: %s is the IM address set for the site.
 #: actions/imsettings.php:140
@@ -2013,11 +1787,6 @@ msgstr ""
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
 msgstr ""
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -2028,11 +1797,6 @@ msgstr "అభిరుచులు భద్రమయ్యాయి."
 msgid "No Jabber ID."
 msgstr "Jabber ID లేదు."
 
-#. TRANS: Message given saving IM address that cannot be normalised.
-#: actions/imsettings.php:317
-msgid "Cannot normalize that Jabber ID"
-msgstr ""
-
 #. TRANS: Message given saving IM address that not valid.
 #: actions/imsettings.php:322
 msgid "Not a valid Jabber ID"
@@ -2062,12 +1826,6 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "ఆ IM చిరునామా సరైనది కాదు."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "ఈమెయిల్ నిర్ధారణని తొలగించలేకున్నాం."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
 msgid "IM confirmation cancelled."
@@ -2126,7 +1884,7 @@ msgstr "మీరు ఇప్పటికే ఈ వాడుకరులకు
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2241,13 +1999,10 @@ msgid "You must be logged in to join a group."
 msgstr "గుంపుల్లో చేరడానికి మీరు ప్రవేశించి ఉండాలి."
 
 #: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
 msgid "No nickname or ID."
-msgstr "పేరు లేదు."
+msgstr "Jabber ID లేదు."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s %2$s గుంపులో చేరారు"
@@ -2256,13 +2011,12 @@ msgstr "%1$s %2$s గుంపులో చేరారు"
 msgid "You must be logged in to leave a group."
 msgstr "గుంపుని వదిలివెళ్ళడానికి మీరు ప్రవేశించి ఉండాలి."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "మీరు ఆ గుంపులో సభ్యులు కాదు."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%2$s గుంపు నుండి %1$s వైదొలిగారు"
@@ -2326,9 +2080,9 @@ msgid "%1$s is already an admin for group \"%2$s\"."
 msgstr "%1$s ఇప్పటికే \"%2$s\" గుంపు యొక్క ఒక నిర్వాకులు."
 
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "వాడుకరి %sని %s గుంపు నుండి తొలగించలేకపోయాం"
+msgstr "%1$sని %2$s గుంపు యొక్క నిర్వాహకున్ని చేయలేకపోయాం."
 
 #: actions/makeadmin.php:146
 #, php-format
@@ -2351,10 +2105,6 @@ msgstr "ఉపకరణాలని నమోదుచేసుకోడాన
 msgid "Use this form to register a new application."
 msgstr "కొత్త ఉపకరణాన్ని నమోదుచేసుకోడానికి ఈ ఫారాన్ని ఉపయోగించండి."
 
-#: actions/newapplication.php:176
-msgid "Source URL is required."
-msgstr ""
-
 #: actions/newapplication.php:258 actions/newapplication.php:267
 msgid "Could not create application."
 msgstr "ఉపకరణాన్ని సృష్టించలేకపోయాం."
@@ -2371,12 +2121,15 @@ msgstr "కొత్త గుంపుని సృష్టిండాని
 msgid "New message"
 msgstr "కొత్త సందేశం"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "ఈ వాడుకరికి మీరు సందేశాన్ని పంపించలేరు."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "విషయం లేదు!"
 
@@ -2384,7 +2137,8 @@ msgstr "విషయం లేదు!"
 msgid "No recipient specified."
 msgstr "ఎవరికి పంపించాలో పేర్కొనలేదు."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "మీకు మీరే సందేశాన్ని పంపుకోకండి; దాని బదులు మీలో మీరే మెల్లగా చెప్పుకోండి."
@@ -2393,12 +2147,14 @@ msgstr "మీకు మీరే సందేశాన్ని పంపుక
 msgid "Message sent"
 msgstr "సందేశాన్ని పంపించాం"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "%sకి నేరు సందేశాన్ని పంపించాం."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "అజాక్స్ పొరపాటు"
 
@@ -2406,10 +2162,9 @@ msgstr "అజాక్స్ పొరపాటు"
 msgid "New notice"
 msgstr "కొత్త సందేశం"
 
-#: actions/newnotice.php:217
-#, fuzzy
+#: actions/newnotice.php:227
 msgid "Notice posted"
-msgstr "à°¸à°\82à°¦à±\87శాలు"
+msgstr "à°¨à±\8bà°\9fà±\80à°¸à±\81ని à°ªà±\81నరావà±\83తిà°\82à°\9aారు"
 
 #: actions/noticesearch.php:68
 #, php-format
@@ -2447,28 +2202,20 @@ msgstr ""
 "newnotice%%%%?status_textarea=%s) మొదటివారు ఎందుకుకాకూడదు!"
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "%s యొక్క మైక్రోబ్లాగు"
+msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!"
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "\"%s\"తో సరిపోలే అన్ని తాజాకరణలు"
+msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!"
 
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
 
-#: actions/nudge.php:94
-msgid "Nudge sent"
-msgstr ""
-
-#: actions/nudge.php:97
-msgid "Nudge sent!"
-msgstr ""
-
 #: actions/oauthappssettings.php:59
 msgid "You must be logged in to list your applications."
 msgstr "మీ ఉపకరణాలను చూడడానికి మీరు ప్రవేశించి ఉండాలి."
@@ -2522,9 +2269,9 @@ msgstr "%2$sలో %1$s యొక్క స్థితి"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "విషయ రకం "
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2533,8 +2280,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr ""
 
@@ -2567,51 +2314,20 @@ msgid "Automatic shortening service to use."
 msgstr "ఉపయోగించాల్సిన యాంత్రిక కుదింపు సేవ."
 
 #: actions/othersettings.php:122
-#, fuzzy
 msgid "View profile designs"
-msgstr "ఫ్రొఫైలు అమరికలు"
-
-#: actions/othersettings.php:123
-msgid "Show or hide profile designs."
-msgstr ""
+msgstr "ఫ్రొఫైలు రూపురేఖలు"
 
 #: actions/othersettings.php:153
 msgid "URL shortening service is too long (max 50 chars)."
 msgstr "URL కుదింపు సేవ మరీ పెద్దగా ఉంది (50 అక్షరాలు గరిష్ఠం)."
 
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶à°\82"
+msgstr "à°\97à±\81à°\82à°ªà±\81 à°\8fà°®à±\80 à°ªà±\87à°°à±\8dà°\95à±\8aనలà±\87à°¦à±\81."
 
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "కొత్త సందేశం"
-
-#: actions/otp.php:90
-msgid "No login token requested."
-msgstr ""
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "సందేశపు విషయం సరైనది కాదు"
-
-#: actions/otp.php:104
-#, fuzzy
-msgid "Login token expired."
-msgstr "సైటు లోనికి ప్రవేశించు"
-
-#: actions/outbox.php:58
-#, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr ""
-
-#: actions/outbox.php:61
-#, php-format
-msgid "Outbox for %s"
-msgstr ""
+msgstr "గుంపు ఏమీ పేర్కొనలేదు."
 
 #: actions/outbox.php:116
 msgid "This is your outbox, which lists private messages you have sent."
@@ -2683,33 +2399,15 @@ msgstr "సంకేతపదం భద్రమయ్యింది."
 msgid "Paths"
 msgstr "త్రోవలు"
 
-#: actions/pathsadminpanel.php:70
-msgid "Path and server settings for this StatusNet site."
-msgstr ""
-
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "à°¹à±\8bà°®à±\8d à°ªà±\87à°\9cà±\80 URL à°¸à°°à±\88నది à°\95ాదà±\81."
+msgstr "à°\85à°²à°\82à°\95ారà°\82 à°\85à°\82à°¦à±\81బాà°\9fà±\81à°²à±\8b à°²à±\87à°¦à±\81: %s."
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "హోమ్ పేజీ URL సరైనది కాదు."
-
-#: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
-msgid "Background directory not writable: %s."
-msgstr "నేపథ్యాల సంచయం"
-
-#: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
-msgid "Locales directory not readable: %s."
-msgstr "హోమ్ పేజీ URL సరైనది కాదు."
-
-#: actions/pathsadminpanel.php:183
-msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "అవతారాల సంచయం"
 
 #: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
 msgid "Site"
@@ -2724,13 +2422,8 @@ msgid "Site's server hostname."
 msgstr ""
 
 #: actions/pathsadminpanel.php:242
-msgid "Path"
-msgstr ""
-
-#: actions/pathsadminpanel.php:242
-#, fuzzy
 msgid "Site path"
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶ం"
+msgstr "à°¸à±\88à°\9fà±\81 à°\85à°²à°\82à°\95ారం"
 
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
@@ -2756,10 +2449,6 @@ msgstr "అలంకారం"
 msgid "Theme server"
 msgstr "అలంకారాల సేవకి"
 
-#: actions/pathsadminpanel.php:268
-msgid "Theme path"
-msgstr ""
-
 #: actions/pathsadminpanel.php:272
 msgid "Theme directory"
 msgstr "అలంకార సంచయం"
@@ -2772,11 +2461,6 @@ msgstr "అవతారాలు"
 msgid "Avatar server"
 msgstr "అవతారాల సేవకి"
 
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "అవతారాన్ని తాజాకరించాం."
-
 #: actions/pathsadminpanel.php:292
 msgid "Avatar directory"
 msgstr "అవతారాల సంచయం"
@@ -2789,23 +2473,13 @@ msgstr "నేపథ్యాలు"
 msgid "Background server"
 msgstr "నేపథ్యాల సేవకి"
 
-#: actions/pathsadminpanel.php:309
-#, fuzzy
-msgid "Background path"
-msgstr "నేపథ్యం"
-
 #: actions/pathsadminpanel.php:313
 msgid "Background directory"
 msgstr "నేపథ్యాల సంచయం"
 
-#: actions/pathsadminpanel.php:320
-msgid "SSL"
-msgstr ""
-
 #: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
 msgid "Never"
-msgstr "à°µà±\88à°¦à±\8aà°²à°\97à±\81"
+msgstr "à°¸à±\87à°µà°\95à°¿"
 
 #: actions/pathsadminpanel.php:324
 msgid "Sometimes"
@@ -2824,19 +2498,13 @@ msgid "When to use SSL"
 msgstr "SSLని ఎప్పుడు ఉపయోగించాలి"
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
-msgstr "à°µà±\88à°¦à±\8aà°²à°\97à±\81"
+msgstr "à°¸à±\87à°µà°\95à°¿"
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
-#: actions/pathsadminpanel.php:352
-#, fuzzy
-msgid "Save paths"
-msgstr "కొత్త సందేశం"
-
 #: actions/peoplesearch.php:52
 #, php-format
 msgid ""
@@ -2850,20 +2518,14 @@ msgstr ""
 msgid "People search"
 msgstr "వ్యక్తుల అన్వేషణ"
 
-#: actions/peopletag.php:68
-#, fuzzy, php-format
-msgid "Not a valid people tag: %s."
-msgstr "సరైన ఈమెయిల్ చిరునామా కాదు:"
-
 #: actions/peopletag.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "%s యొక్క మైక్రోబ్లాగు"
+msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!"
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "à°¸à°\82à°¦à±\87శపà±\81 à°µà°¿à°·à°¯à°\82 à°¸à°°à±\88నది à°\95ాదà±\81"
+msgstr "తపà±\8dà°ªà±\81à°¡à±\81 à°¦à°¸à±\8dà°¤à±\8dà°°à°ªà±\81à°ªà±\87à°°à±\81.."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -2979,18 +2641,9 @@ msgid "Language is too long (max 50 chars)."
 msgstr "భాష మరీ పెద్దగా ఉంది (50 అక్షరాలు గరిష్ఠం)."
 
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
-msgstr "'%s' అనే హోమ్ పేజీ సరైనదికాదు"
-
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "ట్యాగులని భద్రపరచలేకున్నాం."
+msgstr "తప్పుడు మారుపేరు: \"%s\""
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
@@ -3010,10 +2663,6 @@ msgstr "అమరికలు భద్రమయ్యాయి."
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
 #: actions/public.php:130
 #, php-format
 msgid "Public timeline, page %d"
@@ -3035,13 +2684,6 @@ msgstr "ప్రజా వాహిని ఫీడు (RSS 2.0)"
 msgid "Public Stream Feed (Atom)"
 msgstr "ప్రజా వాహిని ఫీడు (ఆటమ్)"
 
-#: actions/public.php:188
-#, php-format
-msgid ""
-"This is the public timeline for %%site.name%% but no one has posted anything "
-"yet."
-msgstr ""
-
 #: actions/public.php:191
 msgid "Be the first to post!"
 msgstr ""
@@ -3052,15 +2694,6 @@ msgid ""
 "Why not [register an account](%%action.register%%) and be the first to post!"
 msgstr "[ఖాతా నమోదు చేసుకుని](%%action.register%%) మొదటగా వ్రాసేది మీరే ఎందుకు కాకూడదు!"
 
-#: actions/public.php:242
-#, php-format
-msgid ""
-"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
-"blogging) service based on the Free Software [StatusNet](http://status.net/) "
-"tool. [Join now](%%action.register%%) to share notices about yourself with "
-"friends, family, and colleagues! ([Read more](%%doc.help%%))"
-msgstr ""
-
 #: actions/public.php:247
 #, php-format
 msgid ""
@@ -3072,9 +2705,8 @@ msgstr ""
 "ఆధారపడిన ఒక [మైక్రో-బ్లాగింగు](http://en.wikipedia.org/wiki/Micro-blogging) సేవ."
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "à°ªà±\8dà°°à°\9cà°¾ à°µà°¾à°¹à°¿à°¨à°¿ à°«à±\80à°¡à±\81"
+msgstr "à°\9fà±\8dయాà°\97à±\81 à°®à±\87à°\98à°\82"
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3105,14 +2737,6 @@ msgstr "ట్యాగు మేఘం"
 msgid "You are already logged in!"
 msgstr "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
 
-#: actions/recoverpassword.php:62
-msgid "No such recovery code."
-msgstr ""
-
-#: actions/recoverpassword.php:66
-msgid "Not a recovery code."
-msgstr ""
-
 #: actions/recoverpassword.php:73
 msgid "Recovery code for unknown user."
 msgstr ""
@@ -3140,10 +2764,6 @@ msgstr ""
 msgid "You have been identified. Enter a new password below. "
 msgstr "మిమ్మల్ని గుర్తించాం. మీ కొత్త సంకేతపదాన్ని క్రింత ఇవ్వండి. "
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
 #: actions/recoverpassword.php:191
 msgid "Nickname or email address"
 msgstr "ముద్దుపేరు లేదా ఈమెయిలు చిరునామా"
@@ -3152,18 +2772,6 @@ msgstr "ముద్దుపేరు లేదా ఈమెయిలు చి
 msgid "Your nickname on this server, or your registered email address."
 msgstr "ఈ సర్వరులో మీ పేరు, లేదా నమౌదైన మీ ఈమెయిల్ చిరునామా."
 
-#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
-msgid "Recover"
-msgstr ""
-
-#: actions/recoverpassword.php:208
-msgid "Reset password"
-msgstr ""
-
-#: actions/recoverpassword.php:209
-msgid "Recover password"
-msgstr ""
-
 #: actions/recoverpassword.php:210 actions/recoverpassword.php:335
 msgid "Password recovery requested"
 msgstr ""
@@ -3176,10 +2784,6 @@ msgstr "తెలియని చర్య"
 msgid "6 or more characters, and don't forget it!"
 msgstr "6 లేదా అంతకంటే ఎక్కువ అక్షరాలు, మర్చిపోకండి!"
 
-#: actions/recoverpassword.php:243
-msgid "Reset"
-msgstr ""
-
 #: actions/recoverpassword.php:252
 msgid "Enter a nickname or email address."
 msgstr "పేరు లేదా ఈమెయిల్ చిరునామా ఇవ్వండి."
@@ -3214,10 +2818,6 @@ msgstr "సంకేతపదం 6 లేదా అంతకంటే ఎక్
 msgid "Password and confirmation do not match."
 msgstr "సంకేతపదం మరియు నిర్ధారణ సరిపోలేదు."
 
-#: actions/recoverpassword.php:388 actions/register.php:255
-msgid "Error setting user."
-msgstr ""
-
 #: actions/recoverpassword.php:395
 msgid "New password successfully saved. You are now logged in."
 msgstr "మీ కొత్త సంకేతపదం భద్రమైంది. మీరు ఇప్పుడు లోనికి ప్రవేశించారు."
@@ -3372,9 +2972,8 @@ msgid "Remote subscribe"
 msgstr "సుదూర చందా"
 
 #: actions/remotesubscribe.php:124
-#, fuzzy
 msgid "Subscribe to a remote user"
-msgstr "à°\9aà°\82దాదారà±\8dà°²ు"
+msgstr "à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿à°\95à°¿ à°\9aà°\82దాà°\9aà±\87à°°ు"
 
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
@@ -3418,9 +3017,8 @@ msgid "Only logged-in users can repeat notices."
 msgstr "కేవలం ప్రవేశించిన వాడుకరులు మాత్రమే నోటీసులని పునరావృతించగలరు."
 
 #: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
 msgid "No notice specified."
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶à°\82"
+msgstr "à°\97à±\81à°\82à°ªà±\81 à°\8fà°®à±\80 à°ªà±\87à°°à±\8dà°\95à±\8aనలà±\87à°¦à±\81."
 
 #: actions/repeat.php:76
 msgid "You can't repeat your own notice."
@@ -3430,16 +3028,6 @@ msgstr "మీ నోటీసుని మీరే పునరావృతి
 msgid "You already repeated that notice."
 msgstr "మీరు ఇప్పటికే ఆ నోటీసుని పునరావృతించారు."
 
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
-msgid "Repeated"
-msgstr "సృష్టితం"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "సృష్టితం"
-
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
 #, php-format
@@ -3467,11 +3055,11 @@ msgid "Replies feed for %s (Atom)"
 msgstr "%s కొరకు స్పందనల ఫీడు (ఆటమ్)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr "ఇది %1$sకి వచ్చిన స్పందనలని చూపించే కాలరేఖ కానీ %2$s దృష్టికి ఇంకా ఎవరూ ఏమీ పంపించలేదు."
+msgstr "ఇది %1$s యొక్క కాలరేఖ కానీ %2$s ఇంకా ఏమీ రాయలేదు."
 
 #: actions/replies.php:204
 #, php-format
@@ -3482,23 +3070,14 @@ msgstr ""
 "మీరు ఇతర వాడుకరులతో సంభాషించవచ్చు, మరింత మంది వ్యక్తులకు చందాచేరవచ్చు లేదా [గుంపులలో చేరవచ్చు]"
 "(%%action.groups%%)."
 
-#: actions/replies.php:206
-#, fuzzy, php-format
-msgid ""
-"You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
-"newnotice%%%%?status_textarea=%3$s)."
-msgstr ""
-"[ఈ విషయంపై](%%%%action.newnotice%%%%?status_textarea=%s) వ్రాసే మొదటివారు మీరే అవ్వండి!"
-
 #: actions/repliesrss.php:72
 #, php-format
 msgid "Replies to %1$s on %2$s!"
 msgstr "%2$sలో %1$sకి స్పందనలు!"
 
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "à°®à±\80à°°à±\81 à°\87à°ªà±\8dà°ªà°\9fà°¿à°\95à±\87 à°²à±\8bనిà°\95à°¿ à°ªà±\8dà°°à°µà±\87శిà°\82à°\9aారà±\81!"
+msgstr "à°\88 à°¸à±\88à°\9fà±\81à°²à±\8b à°®à±\80à°°à±\81 à°µà°¾à°¡à±\81à°\95à°°à°²à°\95à°¿ à°ªà°¾à°¤à±\8dరలనà±\81 à°\87à°µà±\8dవలà±\87à°°à±\81."
 
 #: actions/revokerole.php:82
 msgid "User doesn't have this role."
@@ -3509,34 +3088,13 @@ msgid "StatusNet"
 msgstr "స్టేటస్‌నెట్"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
 msgid "You cannot sandbox users on this site."
-msgstr "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
-
-#: actions/sandbox.php:72
-#, fuzzy
-msgid "User is already sandboxed."
-msgstr "వాడుకరిని ఇప్పటికే గుంపునుండి నిరోధించారు."
-
-#. TRANS: Menu item for site administration
-#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
-#: lib/adminpanelaction.php:392
-msgid "Sessions"
-msgstr ""
-
-#: actions/sessionsadminpanel.php:65
-#, fuzzy
-msgid "Session settings for this StatusNet site."
-msgstr "ఈ స్టేటస్&zwnj;నెట్ సైటుకి రూపురేఖల అమరికలు."
+msgstr "ఈ సైటులో మీరు వాడుకరలకి పాత్రలను ఇవ్వలేరు."
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
 msgstr ""
 
-#: actions/sessionsadminpanel.php:177
-msgid "Whether to handle sessions ourselves."
-msgstr ""
-
 #: actions/sessionsadminpanel.php:181
 msgid "Session debugging"
 msgstr ""
@@ -3618,35 +3176,21 @@ msgstr ""
 msgid "Access token URL"
 msgstr ""
 
-#: actions/showapplication.php:283
-#, fuzzy
-msgid "Authorize URL"
-msgstr "రచయిత"
-
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "మీరు నిజంగానే ఈ నోటీసుని తొలగించాలనుకుంటున్నారా?"
-
 #: actions/showfavorites.php:79
 #, php-format
 msgid "%1$s's favorite notices, page %2$d"
 msgstr "%1$sకి ఇష్టమైన నోటీసులు, పేజీ %2$d"
 
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
-msgstr ""
-
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°®à°¿à°¤à±\8dà°°à±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°\87à°·à±\8dà°\9fà°¾à°\82శాల à°«à±\80à°¡à±\81 (RSS 2.0)"
 
 #: actions/showfavorites.php:178
 #, php-format
@@ -3671,16 +3215,6 @@ msgid ""
 "would add to their favorites :)"
 msgstr ""
 
-#: actions/showfavorites.php:212
-#, fuzzy, php-format
-msgid ""
-"%s hasn't added any favorite notices yet. Why not [register an account](%%%%"
-"action.register%%%%) and then post something interesting they would add to "
-"their favorites :)"
-msgstr ""
-"%sకి చందాదార్లు ఎవరూ లేరు. [ఒక ఖాతాని నమోదు చేసుకుని](%%%%action.register%%%%) మీరు "
-"ఎందుకు మొదటి చందాదారు కాకూడదు?"
-
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
 msgstr "మీకు నచ్చినవి పంచుకోడానికి ఇదొక మార్గం."
@@ -3718,19 +3252,19 @@ msgid "Group actions"
 msgstr "గుంపు చర్యలు"
 
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 1.0)"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 2.0)"
 
 #: actions/showgroup.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (Atom)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (à°\86à°\9fà°®à±\8d)"
 
 #: actions/showgroup.php:355
 #, php-format
@@ -3771,15 +3305,6 @@ msgstr ""
 "చాల వాటిలో భాగస్తులవ్వడానికి [ఇప్పుడే చేరండి](%%%%action.register%%%%)! ([మరింత చదవండి](%%%%"
 "doc.help%%%%))"
 
-#: actions/showgroup.php:461
-#, php-format
-msgid ""
-"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. Its members share short messages about "
-"their life and interests. "
-msgstr ""
-
 #: actions/showgroup.php:489
 msgid "Admins"
 msgstr "నిర్వాహకులు"
@@ -3792,16 +3317,6 @@ msgstr "అటువంటి సందేశం లేదు."
 msgid "Only the sender and recipient may read this message."
 msgstr "పంపినవారు మరియు అందుకున్నవారు మాత్రమే ఈ సందేశాన్ని చదవవచ్చు."
 
-#: actions/showmessage.php:108
-#, php-format
-msgid "Message to %1$s on %2$s"
-msgstr ""
-
-#: actions/showmessage.php:113
-#, php-format
-msgid "Message from %1$s on %2$s"
-msgstr ""
-
 #: actions/shownotice.php:90
 msgid "Notice deleted."
 msgstr "నోటీసుని తొలగించాం."
@@ -3817,29 +3332,24 @@ msgid "%1$s, page %2$d"
 msgstr "%1$s, %2$dవ పేజీ"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 1.0)"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 1.0)"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 2.0)"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr "%s యొక్క సందేశముల ఫీడు"
-
-#: actions/showstream.php:148
 #, php-format
-msgid "FOAF for %s"
-msgstr ""
+msgid "Notice feed for %s (Atom)"
+msgstr "%s కొరకు స్పందనల ఫీడు (ఆటమ్)"
 
 #: actions/showstream.php:200
 #, php-format
@@ -3853,45 +3363,11 @@ msgid ""
 msgstr ""
 "ఈమధ్యే ఏదైనా ఆసక్తికరమైనది చూసారా? మీరు ఇంకా నోటీసులేమీ వ్రాయలేదు, మొదలుపెట్టడానికి ఇదే మంచి సమయం :)"
 
-#: actions/showstream.php:207
-#, fuzzy, php-format
-msgid ""
-"You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
-"%?status_textarea=%2$s)."
-msgstr ""
-"[ఈ విషయంపై](%%%%action.newnotice%%%%?status_textarea=%s) వ్రాసే మొదటివారు మీరే అవ్వండి!"
-
-#: actions/showstream.php:243
-#, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
-"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
-msgstr ""
-
-#: actions/showstream.php:248
-#, php-format
-msgid ""
-"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
-"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
-"[StatusNet](http://status.net/) tool. "
-msgstr ""
-
 #: actions/showstream.php:305
 #, php-format
 msgid "Repeat of %s"
 msgstr "%s యొక్క పునరావృతం"
 
-#: actions/silence.php:65 actions/unsilence.php:65
-msgid "You cannot silence users on this site."
-msgstr ""
-
-#: actions/silence.php:72
-#, fuzzy
-msgid "User is already silenced."
-msgstr "వాడుకరిని ఇప్పటికే గుంపునుండి నిరోధించారు."
-
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
 msgstr "ఈ స్టేటస్&zwnj;నెట్ సైటుకి ప్రాధమిక అమరికలు"
@@ -3981,10 +3457,6 @@ msgstr "పాఠ్యపు పరిమితి"
 msgid "Maximum number of characters for notices."
 msgstr "సందేశాలలోని అక్షరాల గరిష్ఠ సంఖ్య."
 
-#: actions/siteadminpanel.php:278
-msgid "Dupe limit"
-msgstr ""
-
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr "అదే విషయాన్ని మళ్ళీ టపా చేయడానికి వాడుకరులు ఎంత సమయం (క్షణాల్లో) వేచివుండాలి."
@@ -3993,15 +3465,9 @@ msgstr "అదే విషయాన్ని మళ్ళీ టపా చే
 msgid "Site Notice"
 msgstr "సైటు గమనిక"
 
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "కొత్త సందేశం"
-
 #: actions/sitenoticeadminpanel.php:103
-#, fuzzy
 msgid "Unable to save site notice."
-msgstr "à°¸à°\82à°¦à±\87శానà±\8dని à°­à°¦à±\8dరపరà°\9aà°¡à°\82à°²à±\8b à°ªà±\8aరపాà°\9fà±\81."
+msgstr "à°¸à±\88à°\9fà±\81 à°\97మనిà°\95ని à°­à°¦à±\8dరపరà°\9aà±\81"
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
@@ -4024,29 +3490,16 @@ msgstr "సైటు గమనికని భద్రపరచు"
 msgid "SMS settings"
 msgstr "SMS అమరికలు"
 
-#. TRANS: SMS settings page instructions.
-#. TRANS: %%site.name%% is the name of the site.
-#: actions/smssettings.php:74
-#, php-format
-msgid "You can receive SMS messages through email from %%site.name%%."
-msgstr ""
-
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "హోమ్ పేజీ URL సరైనది కాదు."
+msgstr "IM అందుబాటులో లేదు."
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
 msgid "SMS address"
 msgstr "SMS చిరునామా"
 
-#. TRANS: Form guide in SMS settings form.
-#: actions/smssettings.php:120
-msgid "Current confirmed SMS-enabled phone number."
-msgstr ""
-
 #. TRANS: Form guide in IM settings form.
 #: actions/smssettings.php:133
 msgid "Awaiting confirmation on this phone number."
@@ -4068,16 +3521,6 @@ msgctxt "BUTTON"
 msgid "Confirm"
 msgstr "నిర్థారించు"
 
-#. TRANS: Field label for SMS phone number input in SMS settings form.
-#: actions/smssettings.php:153
-msgid "SMS phone number"
-msgstr ""
-
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr ""
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
 msgid "SMS preferences"
@@ -4090,22 +3533,11 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "అభిరుచులు భద్రమయ్యాయి."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
 msgstr "ఫోను నెంబరు లేదు."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
 #. TRANS: Message given saving SMS phone number that is already set.
 #: actions/smssettings.php:352
 msgid "That is already your phone number."
@@ -4118,11 +3550,10 @@ msgstr "ఆ ఫోను నంబరు ఇప్పటికే వేరే 
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
-msgstr "ఆ నిర్ధారణా సంకేతం మీది కాదు!"
+msgstr ""
 
 #. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
 #: actions/smssettings.php:413
@@ -4131,9 +3562,8 @@ msgstr "అది తప్పుడు నిర్ధారణ సంఖ్య
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "నిర్ధారణ రద్దయింది."
+msgstr "IM నిర్ధారణ రద్దయింది."
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4143,9 +3573,8 @@ msgstr "అది మీ ఫోను నంబర్ కాదు."
 
 #. TRANS: Message given after successfully removing a registered SMS phone number.
 #: actions/smssettings.php:470
-#, fuzzy
 msgid "The SMS phone number was removed."
-msgstr "ఆ చిరునామాని తొలగించాం."
+msgstr "ఆ IM చిరునామాని తొలగించాం."
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
@@ -4166,11 +3595,6 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-msgid "No code entered"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
@@ -4178,22 +3602,13 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "చందాలు"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "సైటు స్వరూపణాన్ని మార్చండి"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
 msgstr ""
 
-#: actions/snapshotadminpanel.php:144
-msgid "Invalid snapshot report URL."
-msgstr ""
-
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
 msgstr ""
@@ -4226,30 +3641,15 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "సైటు అమరికలను భద్రపరచు"
-
-#: actions/subedit.php:70
-msgid "You are not subscribed to that profile."
-msgstr ""
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "à°\9aà°\82దాని à°¸à±\83à°·à±\8dà°\9fà°¿à°\82చలేకపోయాం."
+msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°\9aà°\82దాని à°\9aà±\87à°°à±\8dచలేకపోయాం."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "అటువంటి ఫైలు లేదు."
-
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
@@ -4341,34 +3741,28 @@ msgid "SMS"
 msgstr ""
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "%s యొక్క మైక్రోబ్లాగు"
+msgstr "%2$sలో %1$s అనే ట్యాగుతో ఉన్న నోటీసులు!"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 1.0)"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (RSS 2.0)"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr "%s à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°¦à±\87శమà±\81à°² à°«à±\80à°¡à±\81"
+msgstr "%s à°\95à±\8aà°°à°\95à±\81 à°¸à±\8dà°ªà°\82దనల à°«à±\80à°¡à±\81 (à°\86à°\9fà°®à±\8d)"
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "అటువంటి పత్రమేమీ లేదు."
-
-#: actions/tagother.php:65
-#, php-format
-msgid "Tag %s"
-msgstr ""
+msgstr "జోడింపులు లేవు."
 
 #: actions/tagother.php:77 lib/userprofile.php:76
 msgid "User profile"
@@ -4379,10 +3773,6 @@ msgstr "వాడుకరి ప్రొఫైలు"
 msgid "Photo"
 msgstr "ఫొటో"
 
-#: actions/tagother.php:141
-msgid "Tag user"
-msgstr ""
-
 #: actions/tagother.php:151
 msgid ""
 "Tags for this user (letters, numbers, -, ., and _), comma- or space- "
@@ -4398,10 +3788,6 @@ msgstr ""
 msgid "Could not save tags."
 msgstr "ట్యాగులని భద్రపరచలేకపోయాం."
 
-#: actions/tagother.php:236
-msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr ""
-
 #: actions/tagrss.php:35
 msgid "No such tag."
 msgstr "అటువంటి ట్యాగు లేదు."
@@ -4411,24 +3797,12 @@ msgid "You haven't blocked that user."
 msgstr "మీరు ఆ వాడుకరిని నిరోధించలేదు."
 
 #: actions/unsandbox.php:72
-#, fuzzy
 msgid "User is not sandboxed."
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
-
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "అధీకరణ అభ్యర్థన లేదు!"
+msgstr "వాడుకరిని గుంపు నుండి నిరోధించలేదు."
 
 #: actions/unsubscribe.php:98
-#, fuzzy
 msgid "Unsubscribed"
-msgstr "à°\9aà°\82దాదారà±\8dà°²ు"
+msgstr "à°\9aà°\82దామాను"
 
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
@@ -4489,11 +3863,6 @@ msgstr "కొత్త వాడుకరులకై స్వాగత సం
 msgid "Default subscription"
 msgstr "అప్రమేయ చందా"
 
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "ఉపయోగించాల్సిన యాంత్రిక కుదింపు సేవ."
-
 #: actions/useradminpanel.php:251
 msgid "Invitations"
 msgstr "ఆహ్వానాలు"
@@ -4590,25 +3959,19 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "'%s' అనే అవతారపు URL తప్పు"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "'%s' కొరకు తప్పుడు బొమ్మ రకం"
+msgstr ""
 
 #: actions/userdesignsettings.php:76 lib/designsettings.php:65
 msgid "Profile design"
 msgstr "ఫ్రొఫైలు రూపురేఖలు"
 
-#: actions/userdesignsettings.php:87 lib/designsettings.php:76
-msgid ""
-"Customize the way your profile looks with a background image and a colour "
-"palette of your choice."
-msgstr ""
-
 #: actions/userdesignsettings.php:282
 msgid "Enjoy your hotdog!"
 msgstr ""
@@ -4633,17 +3996,6 @@ msgstr "%s ఏ గుంపు లోనూ సభ్యులు కాదు."
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
 msgstr "[గుంపులని వెతికి](%%action.groupsearch%%) వాటిలో చేరడానికి ప్రయత్నించండి."
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom group notice feed.
-#. TRANS: %1$s is a group name, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom user notice feed.
-#. TRANS: %1$s is a user name, %2$s is a site name.
-#: actions/userrss.php:97 lib/atomgroupnoticefeed.php:70
-#: lib/atomusernoticefeed.php:76
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
 #: actions/version.php:75
 #, php-format
 msgid "StatusNet %s"
@@ -4656,10 +4008,6 @@ msgid ""
 "Inc. and contributors."
 msgstr ""
 
-#: actions/version.php:163
-msgid "Contributors"
-msgstr ""
-
 #: actions/version.php:170
 msgid ""
 "StatusNet is free software: you can redistribute it and/or modify it under "
@@ -4755,13 +4103,6 @@ msgstr "గుంపు నుండి వైదొలగడం విఫలమ
 msgid "Could not update local group."
 msgstr "స్థానిక గుంపుని తాజాకరించలేకున్నాం."
 
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "మారుపేర్లని సృష్టించలేకపోయాం."
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
@@ -4772,16 +4113,6 @@ msgstr ""
 msgid "You are banned from sending direct messages."
 msgstr "నేరుగా సందేశాలు పంపడం నుండి మిమ్మల్ని నిషేధించారు."
 
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-msgid "Could not insert message."
-msgstr ""
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4789,60 +4120,41 @@ msgstr ""
 msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
-#. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
-msgid "Database error inserting hashtag: %s"
-msgstr "అవతారాన్ని పెట్టడంలో పొరపాటు"
-
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "నోటీసుని భద్రపరచడంలో పొరపాటు. చాలా పొడవుగా ఉంది."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "నోటీసుని భద్రపరచడంలో పొరపాటు. గుర్తుతెలియని వాడుకరి."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr "చాలా ఎక్కువ నోటీసులు అంత వేగంగా; కాస్త ఊపిరి తీసుకుని మళ్ళీ కొన్ని నిమిషాల తర్వాత వ్రాయండి."
 
-#. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-msgid ""
-"Too many duplicate messages too quickly; take a breather and post again in a "
-"few minutes."
-msgstr ""
-
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "ఈ సైటులో నోటీసులు రాయడం నుండి మిమ్మల్ని నిషేధించారు."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -4861,17 +4173,10 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
-
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "à°¸à°\82à°¦à±\87శానà±\8dని à°­à°¦à±\8dరపరà°\9aà°¡à°\82à°²à±\8b à°ªà±\8aరపాà°\9fà±\81."
+msgstr "à°\9fà±\8dయాà°\97à±\81లని à°­à°¦à±\8dరపరà°\9aà°²à±\87à°\95à°ªà±\8bయాà°\82."
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
@@ -4888,29 +4193,20 @@ msgstr "ఇప్పటికే చందాచేరారు!"
 msgid "User has blocked you."
 msgstr "వాడుకరి మిమ్మల్ని నిరోధించారు."
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "చందాదార్లు"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "à°\9aà°\82దాని à°¤à±\8aà°²à°\97à°¿à°\82చలేకపోయాం."
+msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°\9aà°\82దాని à°\9aà±\87à°°à±\8dచలేకపోయాం."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "à°\9aà°\82దాని à°¤à±\8aà°²à°\97à°¿à°\82చలేకపోయాం."
+msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°\9aà°\82దాని à°\9aà±\87à°°à±\8dచలేకపోయాం."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "à°\9aà°\82దాని à°¤à±\8aà°²à°\97à°¿à°\82చలేకపోయాం."
+msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°\9aà°\82దాని à°\9aà±\87à°°à±\8dచలేకపోయాం."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -4926,9 +4222,8 @@ msgstr "గుంపుని సృష్టించలేకపోయాం."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "గుంపు సభ్యత్వాన్ని అమర్చలేకపోయాం."
+msgstr "గుంపుని సృష్టించలేకపోయాం."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
@@ -4937,14 +4232,8 @@ msgstr "గుంపు సభ్యత్వాన్ని అమర్చల
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "చందాని సృష్టించలేకపోయాం."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:109
-msgid "Change your profile settings"
-msgstr ""
+msgstr "స్థానిక గుంపుని తాజాకరించలేకున్నాం."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:116
@@ -4963,9 +4252,8 @@ msgstr ""
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:137
-#, fuzzy
 msgid "Design your profile"
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
+msgstr "వాడుకరి ప్రొఫైలు"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
@@ -5011,13 +4299,6 @@ msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
 msgstr "మీ ఈమెయిలు, అవతారం, సంకేతపదం మరియు ప్రౌఫైళ్ళను మార్చుకోండి"
 
-#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:452
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Connect to services"
-msgstr "అనుసంధానాలు"
-
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
@@ -5037,10 +4318,10 @@ msgstr "నిర్వాహకులు"
 
 #. TRANS: Tooltip for main menu option "Invite"
 #: lib/action.php:465
-#, fuzzy, php-format
+#, php-format
 msgctxt "TOOLTIP"
 msgid "Invite friends and colleagues to join you on %s"
-msgstr "ఈ ఫారాన్ని ఉపయోగించి మీ స్నేహితులను మరియు సహోద్యోగులను ఈ సేవను వినియోగించుకోమని ఆహ్వానించండి."
+msgstr "%sలో తోడుకై మీ స్నేహితులని మరియు సహోద్యోగులని ఆహ్వానించండి"
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
@@ -5200,9 +4481,8 @@ msgstr ""
 
 #. TRANS: DT element for StatusNet site content license.
 #: lib/action.php:850
-#, fuzzy
 msgid "Site content license"
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶à°\82"
+msgstr "à°¸à±\8dà°\9fà±\87à°\9fà°¸à±\8dâ\80\8cà°¨à±\86à°\9fà±\8d à°®à±\83à°¦à±\82à°ªà°\95à°°à°£ à°²à±\88à°¸à±\86à°¨à±\8dà°¸à±\81"
 
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
@@ -5268,11 +4548,6 @@ msgstr ""
 msgid "You cannot make changes to this site."
 msgstr "ఈ సైటుకి మీరు మార్పులు చేయలేరు."
 
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-msgid "Changes to that panel are not allowed."
-msgstr ""
-
 #. TRANS: Client error message.
 #: lib/adminpanelaction.php:229
 msgid "showForm() not implemented."
@@ -5283,12 +4558,6 @@ msgstr ""
 msgid "saveSettings() not implemented."
 msgstr ""
 
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-msgid "Unable to delete design setting."
-msgstr ""
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
 msgid "Basic site configuration"
@@ -5323,33 +4592,23 @@ msgstr "వాడుకరి"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:374
-#, fuzzy
 msgid "Access configuration"
-msgstr "SMS నిర్ధారణ"
+msgstr "రూపకల్పన స్వరూపణం"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
-#, fuzzy
 msgid "Paths configuration"
-msgstr "SMS నిర్ధారణ"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "రూపకల్పన స్వరూపణం"
+msgstr "వాడుకరి స్వరూపణం"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:398
-#, fuzzy
 msgid "Edit site notice"
-msgstr "సైటు గమనిక"
+msgstr "సైటు గమనికని భద్రపరచు"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:406
-#, fuzzy
 msgid "Snapshots configuration"
-msgstr "SMS నిర్ధారణ"
+msgstr "వాడుకరి స్వరూపణం"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
@@ -5382,12 +4641,6 @@ msgstr "మీ ఉపకరణాన్ని వివరించండి"
 msgid "URL of the homepage of this application"
 msgstr "ఈ ఉపకరణం యొక్క హోమ్&zwnj;పేజీ చిరునామా"
 
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "మూలము"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
 msgid "Organization responsible for this application"
@@ -5395,9 +4648,8 @@ msgstr "ఈ ఉపకరణానికి బాధ్యతాయుతమై
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
-#, fuzzy
 msgid "URL for the homepage of the organization"
-msgstr "à°®à±\80 à°¹à±\8bà°®à±\8d à°ªà±\87à°\9cà±\80, à°¬à±\8dలాà°\97à±\81, à°²à±\87దా à°µà±\87à°°à±\87 à°¸à±\87à°\9fà±\81à°²à±\8bని à°®à±\80 à°ªà±\8dà°°à±\8aà°«à±\88à°²à±\81 à°¯à±\8aà°\95à±\8dà°\95 చిరునామా"
+msgstr "à°\88 à°\89à°ªà°\95à°°à°£à°\82 à°¯à±\8aà°\95à±\8dà°\95 à°¹à±\8bà°®à±\8d&zwnj;à°ªà±\87à°\9cà±\80 చిరునామా"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5455,13 +4707,6 @@ msgstr "చదవడం-మాత్రమే"
 msgid "Approved %1$s - \"%2$s\" access."
 msgstr ""
 
-#. TRANS: Button label
-#: lib/applicationlist.php:159
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Revoke"
-msgstr "తొలగించు"
-
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
 msgid "Attachments"
@@ -5474,28 +4719,13 @@ msgstr "రచయిత"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
-#, fuzzy
 msgid "Provider"
-msgstr "à°ªà±\8dà°°à±\8aà°«à±\88à°²ు"
+msgstr "à°®à±\81à°¨à±\81à°\9cà±\82à°ªు"
 
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "సంకేతపదం మార్పు"
-
-#: lib/authenticationplugin.php:236
-#, fuzzy
-msgid "Password changing is not allowed"
-msgstr "సంకేతపదం మార్పు"
-
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
 msgstr "ఆదేశ ఫలితాలు"
@@ -5508,45 +4738,21 @@ msgstr "ఆదేశం పూర్తయ్యింది"
 msgid "Command failed"
 msgstr "ఆదేశం విఫలమైంది"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "ఆ గుర్తింపుతో ఏ నోటీసు లేదు"
-
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "వాడుకరికి ప్రొఫైలు లేదు."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "వాడుకరిని తాజాకరించలేకున్నాం."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "వాడుకరిని తాజాకరించలేకున్నాం."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "క్షమించండి, ఈ ఆదేశం ఇంకా అమలుపరచబడలేదు."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "%sకి స్పందనలు"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5557,55 +4763,39 @@ msgstr ""
 "చందాదార్లు: %2$s\n"
 "నోటీసులు: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "నోటీసుని ఇష్టాంశంగా గుర్తించాం."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "మీరు ఇప్పటికే ఆ గుంపులో సభ్యులు"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "వాడుకరి %1$sని %2$s గుంపులో చేర్చలేకపోయాం"
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "వాడుకరి %1$sని %2$s గుంపు నుండి తొలగించలేకపోయాం"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "పూర్తిపేరు: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "ప్రాంతం: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "హోంపేజీ: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "గురించి: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5614,142 +4804,81 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr "సందేశం చాలా పొడవుగా ఉంది - %1$d అక్షరాలు గరిష్ఠం, మీరు %2$d పంపించారు"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr "%sకి నేరు సందేశాన్ని పంపించాం"
-
-#: lib/command.php:494
-msgid "Error sending direct message."
-msgstr ""
-
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "మీ నోటిసుని మీరే పునరావృతించలేరు"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "ఇప్పటికే ఈ నోటీసుని పునరావృతించారు"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "సందేశాలు"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "నోటిసు చాలా పొడవుగా ఉంది - %1$d అక్షరాలు గరిష్ఠం, మీరు %2$d పంపించారు."
 
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "నోటీసుని పునరావృతించడంలో పొరపాటు."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "నోటిసు చాలా పొడవుగా ఉంది - %d అక్షరాలు గరిష్ఠం, మీరు %d పంపించారు"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "%sకి స్పందనని పంపించాం"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "నోటీసుని భద్రపరచడంలో పొరపాటు."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "ఏవరికి చందా చేరాలనుకుంటున్నారో ఆ వాడుకరి పేరు తెలియజేయండి"
-
-#: lib/command.php:628
-msgid "Can't subscribe to OMB profiles by command."
-msgstr ""
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "%sకి చందా చేరారు"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "ఎవరి నుండి చందా విరమించాలనుకుంటున్నారో ఆ వాడుకరి పేరు తెలియజేయండి"
-
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "%s నుండి చందా విరమించారు"
-
-#: lib/command.php:682 lib/command.php:705
-msgid "Command not yet implemented."
-msgstr ""
-
-#: lib/command.php:685
-msgid "Notification off."
+msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
-msgstr ""
-
-#: lib/command.php:710
-msgid "Can't turn on notification."
-msgstr ""
-
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr "ఈ లంకెని ఒకే సారి ఉపయోగించగలరు, మరియు అది పనిచేసేది 2 నిమిషాలు మాత్రమే: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "%s నుండి చందా విరమించారు"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "మీరు ఎవరికీ చందాచేరలేదు."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "%sకి స్పందనలు"
 msgstr[1] "%sకి స్పందనలు"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "మీకు చందాదార్లు ఎవరూ లేరు."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "%sకి స్పందనలు"
 msgstr[1] "%sకి స్పందనలు"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "మీరు ఏ గుంపులోనూ సభ్యులు కాదు."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
 msgstr[1] "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5803,10 +4932,6 @@ msgstr "స్వరూపణపు దస్త్రాల కొరకు ఈ
 msgid "You may wish to run the installer to fix this."
 msgstr ""
 
-#: lib/common.php:139
-msgid "Go to the installer."
-msgstr ""
-
 #: lib/connectsettingsaction.php:110
 msgid "IM"
 msgstr ""
@@ -5840,18 +4965,9 @@ msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
 msgstr "మీ వ్యక్తిగత నేపథ్యపు చిత్రాన్ని మీరు ఎక్కించవచ్చు. గరిష్ఠ ఫైలు పరిమాణం 2మెబై."
 
-#: lib/designsettings.php:418
-msgid "Design defaults restored."
-msgstr ""
-
-#: lib/disfavorform.php:114 lib/disfavorform.php:140
-msgid "Disfavor this notice"
-msgstr ""
-
 #: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
 msgid "Favor this notice"
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°¸à°\82à°¦à±\87శమà±\87à°®à±\80 à°²à±\87à°¦à±\81."
+msgstr "à°\88 à°¨à±\8bà°\9fà±\80à°¸à±\81ని à°ªà±\81నరావà±\83తిà°\82à°\9aà±\81"
 
 #: lib/favorform.php:140
 msgid "Favor"
@@ -5889,10 +5005,6 @@ msgstr "అన్నీ"
 msgid "Select tag to filter"
 msgstr ""
 
-#: lib/galleryaction.php:140
-msgid "Tag"
-msgstr ""
-
 #: lib/galleryaction.php:141
 msgid "Choose a tag to narrow list"
 msgstr ""
@@ -5907,9 +5019,8 @@ msgid "Grant this user the \"%s\" role"
 msgstr ""
 
 #: lib/groupeditform.php:163
-#, fuzzy
 msgid "URL of the homepage or blog of the group or topic"
-msgstr "à°®à±\80 à°¹à±\8bà°®à±\8d à°ªà±\87à°\9cà±\80, à°¬à±\8dలాà°\97à±\81, à°²à±\87దా à°µà±\87à°°à±\87 à°¸à±\87à°\9fà±\81à°²à±\8bని à°®à±\80 à°ªà±\8dà°°à±\8aà°«à±\88à°²à±\81 à°¯à±\8aà°\95à±\8dà°\95 చిరునామా"
+msgstr "à°\88 à°\89à°ªà°\95à°°à°£à°\82 à°¯à±\8aà°\95à±\8dà°\95 à°¹à±\8bà°®à±\8d&zwnj;à°ªà±\87à°\9cà±\80 చిరునామా"
 
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
@@ -5970,11 +5081,6 @@ msgstr "ఎక్కువమంది సభ్యులున్న గుం
 msgid "Groups with most posts"
 msgstr "ఎక్కువ టపాలున్న గుంపులు"
 
-#: lib/grouptagcloudsection.php:56
-#, php-format
-msgid "Tags in %s group's notices"
-msgstr ""
-
 #. TRANS: Client exception 406
 #: lib/htmloutputter.php:104
 msgid "This page is not available in a media type you accept"
@@ -5984,11 +5090,6 @@ msgstr ""
 msgid "Unsupported image file format."
 msgstr ""
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr "ఇది చాలా పొడవుంది. గరిష్ఠ సందేశ పరిమాణం 140 అక్షరాలు."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "పాక్షిక ఎగుమతి."
@@ -6002,9 +5103,8 @@ msgid "Not an image or corrupt file."
 msgstr "బొమ్మ కాదు లేదా పాడైపోయిన ఫైలు."
 
 #: lib/imagefile.php:122
-#, fuzzy
 msgid "Lost our file."
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°¸à°\82à°¦à±\87శమà±\87à°®à±\80 లేదు."
+msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°«à±\88à°²à±\81 లేదు."
 
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
@@ -6024,9 +5124,9 @@ msgid "[%s]"
 msgstr "[%s]"
 
 #: lib/jabber.php:567
-#, fuzzy, php-format
+#, php-format
 msgid "Unknown inbox source %d."
-msgstr "గుర్తు తెలియని భాష \"%s\""
+msgstr "గుర్తు తెలియని భాష \"%s\"."
 
 #: lib/joinform.php:114
 msgid "Join"
@@ -6155,12 +5255,6 @@ msgstr "%s స్థితి"
 msgid "SMS confirmation"
 msgstr "SMS నిర్ధారణ"
 
-#. TRANS: Main body heading for SMS-by-email address confirmation message
-#: lib/mail.php:463
-#, fuzzy, php-format
-msgid "%s: confirm you own this phone number with this code:"
-msgstr "ఈ ఫోను నంబరు యొక్క నిర్ధారణకై వేచివుంది."
-
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
@@ -6358,14 +5452,10 @@ msgstr ""
 "మీకు అంతరంగిక సందేశాలు లేవు. ఇతర వాడుకరులతో సంభాషణకై మీరు వారికి అంతరంగిక సందేశాలు "
 "పంపించవచ్చు. మీ కంటికి మాత్రమే కనబడేలా వారు మీకు సందేశాలు పంపవచ్చు."
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr "నుండి"
 
-#: lib/mailhandler.php:37
-msgid "Could not parse message."
-msgstr ""
-
 #: lib/mailhandler.php:42
 msgid "Not a registered user."
 msgstr "నమోదైన వాడుకరి కాదు."
@@ -6374,15 +5464,6 @@ msgstr "నమోదైన వాడుకరి కాదు."
 msgid "Sorry, that is not your incoming email address."
 msgstr "క్షమించండి, అది మీ లోనికివచ్చు ఈమెయిలు చిరునామా కాదు."
 
-#: lib/mailhandler.php:50
-msgid "Sorry, no incoming email allowed."
-msgstr ""
-
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "%s కి నేరు సందేశాలు"
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6422,9 +5503,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "వాడà±\81à°\95రిని à°¤à°¾à°\9cà°¾à°\95à°°à°¿à°\82à°\9aà°²à±\87à°\95à±\81à°¨à±\8dà°¨ాం."
+msgstr "à°\87à°·à±\8dà°\9fà°¾à°\82శానà±\8dని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°²à±\87à°\95à°ªà±\8bà°¯ాం."
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6436,50 +5516,45 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-msgid "Send a direct notice"
-msgstr ""
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "అందుబాటులో ఉన్న అక్షరాలు"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "పంపించు"
 
 #: lib/noticeform.php:160
-#, fuzzy
 msgid "Send a notice"
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶à°\82"
+msgstr "à°¸à±\88à°\9fà±\81 à°\97మనిà°\95"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "%s, సంగతులేమిటి?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "జోడించు"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "ఒక ఫైలుని జోడించు"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "నేనున్న ప్రాంతాన్ని బహిరంగపరచు"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "నేనున్న ప్రాంతాన్ని బహిరంగపరచకు"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6516,47 +5591,37 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
+
+#: lib/noticelist.php:568
 msgid "in context"
 msgstr "సందర్భంలో"
 
-#: lib/noticelist.php:602
-#, fuzzy
+#: lib/noticelist.php:603
 msgid "Repeated by"
-msgstr "సృష్టితం"
+msgstr "%s యొక్క పునరావృతం"
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr "ఈ నోటీసుపై స్పందించండి"
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "స్పందించండి"
 
-#: lib/noticelist.php:674
+#: lib/noticelist.php:675
 msgid "Notice repeated"
 msgstr "నోటీసుని పునరావృతించారు"
 
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
-
-#: lib/nudgeform.php:128
-msgid "Nudge"
-msgstr ""
-
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "కొత్త ప్రొపైలుని చేర్చటంలో పొరపాటు"
 
 #: lib/oauthstore.php:291
-#, fuzzy
 msgid "Error inserting avatar"
-msgstr "à°\85వతారానà±\8dని à°ªà±\86à°\9fà±\8dà°\9fà°¡ంలో పొరపాటు"
+msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°ªà±\8dà°°à±\8aà°ªà±\88à°²à±\81ని à°\9aà±\87à°°à±\8dà°\9aà°\9fంలో పొరపాటు"
 
 #: lib/oauthstore.php:306
 msgid "Error updating remote profile"
@@ -6567,9 +5632,8 @@ msgid "Error inserting remote profile"
 msgstr "దూరపు ప్రొపైలుని చేర్చటంలో పొరపాటు"
 
 #: lib/oauthstore.php:345
-#, fuzzy
 msgid "Duplicate notice"
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶à°\82"
+msgstr "à°¨à±\8bà°\9fà±\80à°¸à±\81ని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà±\81"
 
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
@@ -6608,10 +5672,6 @@ msgstr "మీరు పంపిన సందేశాలు"
 msgid "Tags in %s's notices"
 msgstr ""
 
-#: lib/plugin.php:115
-msgid "Unknown"
-msgstr ""
-
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
 msgstr "చందాలు"
@@ -6670,9 +5730,8 @@ msgid "Popular"
 msgstr "ప్రాచుర్యం"
 
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°ªà°¤à±\8dà°°à°®à±\87à°®à±\80 à°²à±\87à°¦ు."
+msgstr "à°\9cà±\8bà°¡à°¿à°\82à°ªà±\81à°²à±\81 à°²à±\87à°µు."
 
 #: lib/repeatform.php:107
 msgid "Repeat this notice?"
@@ -6686,23 +5745,13 @@ msgstr "అవును"
 msgid "Repeat this notice"
 msgstr "ఈ నోటీసుని పునరావృతించు"
 
-#: lib/revokeroleform.php:91
-#, fuzzy, php-format
-msgid "Revoke the \"%s\" role from this user"
-msgstr "ఈ గుంపునుండి ఈ వాడుకరిని నిరోధించు"
-
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-msgid "Sandbox"
-msgstr ""
-
 #: lib/sandboxform.php:78
-#, fuzzy
 msgid "Sandbox this user"
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°µà°¾à°¡à±\81à°\95à°°à°¿ à°²à±\87à°°à±\81."
+msgstr "à°\88 à°µà°¾à°¡à±\81à°\95రిని à°¨à°¿à°°à±\8bధిà°\82à°\9aà±\81"
 
 #: lib/searchaction.php:120
 msgid "Search site"
@@ -6728,10 +5777,6 @@ msgstr "ప్రజలు"
 msgid "Find people on this site"
 msgstr "ఈ సైటులోని వ్యక్తులని కనుగొనండి"
 
-#: lib/searchgroupnav.php:83
-msgid "Find content of notices"
-msgstr ""
-
 #: lib/searchgroupnav.php:85
 msgid "Find groups on this site"
 msgstr "ఈ సైటులోని గుంపులని కనుగొనండి"
@@ -6745,14 +5790,12 @@ msgid "More..."
 msgstr "మరింత..."
 
 #: lib/silenceform.php:67
-#, fuzzy
 msgid "Silence"
-msgstr "à°\95à±\8aà°¤à±\8dà°¤ à°¸à°\82à°¦à±\87à°¶à°\82"
+msgstr "à°¸à±\88à°\9fà±\81 à°\97మనిà°\95"
 
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "à°\88 à°µà°¾à°¡à±\81à°\95రిని à°¨à°¿à°°à±\8bà°§ించు"
+msgstr "à°\88 à°µà°¾à°¡à±\81à°\95రిని à°¤à±\8aà°²à°\97ించు"
 
 #: lib/subgroupnav.php:83
 #, php-format
@@ -6800,13 +5843,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "అవతారపు తాజాకరణ విఫలమైంది."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6832,31 +5868,20 @@ msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "à°¦à±\82à°°à°ªà±\81 à°ªà±\8dà°°à±\8aà°ªà±\88à°²à±\81ని à°¤à°¾à°\9cà°¾à°\95à°°à°¿à°\82à°\9aà°\9fà°\82à°²à±\8b à°ªà±\8aరపాà°\9fà±\81"
+msgstr "నిరà±\8bధానà±\8dని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¡à°\82à°²à±\8b à°ªà±\8aరపాà°\9fà±\81."
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
 
-#: lib/unsandboxform.php:69
-msgid "Unsandbox"
-msgstr ""
-
 #: lib/unsandboxform.php:80
-#, fuzzy
 msgid "Unsandbox this user"
-msgstr "అటువంటి వాడుకరి లేరు."
-
-#: lib/unsilenceform.php:67
-msgid "Unsilence"
-msgstr ""
+msgstr "ఈ వాడుకరి నుండి చందామాను"
 
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "à°\85à°\9fà±\81à°µà°\82à°\9fà°¿ à°µà°¾à°¡à±\81à°\95à°°à°¿ à°²à±\87à°°à±\81."
+msgstr "à°\88 à°µà°¾à°¡à±\81à°\95రిని à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà±\81"
 
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
@@ -6866,11 +5891,6 @@ msgstr "ఈ వాడుకరి నుండి చందామాను"
 msgid "Unsubscribe"
 msgstr "చందామాను"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "వాడుకరి %s (%d) కి ప్రొఫైలు లేదు."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "అవతారాన్ని మార్చు"
@@ -6899,10 +5919,6 @@ msgstr "ఈ వాడుకరికి ఒక నేరు సందేశా
 msgid "Message"
 msgstr "సందేశం"
 
-#: lib/userprofile.php:326
-msgid "Moderate"
-msgstr ""
-
 #: lib/userprofile.php:364
 msgid "User role"
 msgstr "వాడుకరి పాత్ర"
@@ -6918,56 +5934,56 @@ msgid "Moderator"
 msgstr "సమన్వయకర్త"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "కొన్ని క్షణాల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "ఓ నిమిషం క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "%d నిమిషాల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "ఒక గంట క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "%d గంటల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "ఓ రోజు క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "%d రోజుల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "ఓ నెల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "%d నెలల క్రితం"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "ఒక సంవత్సరం క్రితం"
 
@@ -6980,8 +5996,3 @@ msgstr "%s అనేది సరైన రంగు కాదు!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s అనేది సరైన రంగు కాదు! 3 లేదా 6 హెక్స్ అక్షరాలను వాడండి."
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr "నోటిసు చాలా పొడవుగా ఉంది - %1$d అక్షరాలు గరిష్ఠం, మీరు %2$d పంపించారు."
index 029f36db162ddd4294a2bcb13baba1412a733aab..4208d10e0634610b60498848d288d58ef2c44b54 100644 (file)
@@ -9,48 +9,27 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:25:03+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:35+0000\n"
 "Language-Team: Turkish\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: tr\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "Kabul et"
-
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
-#, fuzzy
 msgid "Site access settings"
-msgstr "Ayarlar"
-
-#. TRANS: Form legend for registration form.
-#: actions/accessadminpanel.php:161
-#, fuzzy
-msgid "Registration"
-msgstr "Kayıt"
+msgstr "Profil ayarları"
 
 #. TRANS: Checkbox instructions for admin setting "Private"
 #: actions/accessadminpanel.php:165
 msgid "Prohibit anonymous users (not logged in) from viewing site?"
 msgstr ""
 
-#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
-#: actions/accessadminpanel.php:167
-#, fuzzy
-msgctxt "LABEL"
-msgid "Private"
-msgstr "Gizlilik"
-
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
 msgid "Make registration invitation only."
@@ -68,35 +47,16 @@ msgstr ""
 
 #. TRANS: Checkbox label for disabling new user registrations.
 #: actions/accessadminpanel.php:185
-#, fuzzy
 msgid "Closed"
-msgstr "Böyle bir kullanıcı yok."
-
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Ayarlar"
-
-#. TRANS: Button label to save e-mail preferences.
-#. TRANS: Button label to save IM preferences.
-#. TRANS: Button label to save SMS preferences.
-#. TRANS: Button label
-#: actions/accessadminpanel.php:203 actions/emailsettings.php:224
-#: actions/imsettings.php:184 actions/smssettings.php:209
-#: lib/applicationeditform.php:361
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Save"
-msgstr "Kaydet"
+msgstr ""
 
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
-msgstr "Böyle bir durum mesajı yok."
+msgstr "Böyle bir kullanıcı yok."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -116,17 +76,11 @@ msgstr "Böyle bir durum mesajı yok."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Böyle bir kullanıcı yok."
 
-#. TRANS: Page title. %1$s is user nickname, %2$d is page number
-#: actions/all.php:90
-#, fuzzy, php-format
-msgid "%1$s and friends, page %2$d"
-msgstr "%s ve arkadaşları"
-
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
 #. TRANS: Message is used as link title. %s is a user nickname.
@@ -139,21 +93,15 @@ msgstr "%s ve arkadaşları"
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:107
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
+msgstr ""
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:116
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, fuzzy, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
+msgstr ""
 
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
@@ -184,12 +132,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-#, fuzzy
-msgid "You and friends"
-msgstr "%s ve arkadaşları"
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -198,32 +140,6 @@ msgstr "%s ve arkadaşları"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr ""
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Onay kodu bulunamadı."
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -244,11 +160,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Kullanıcı güncellenemedi."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -259,11 +170,6 @@ msgstr "Kullanıcı güncellenemedi."
 msgid "User has no profile."
 msgstr "Kullanıcının profili yok."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Profil kaydedilemedi."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -286,16 +192,9 @@ msgstr ""
 msgid "Unable to save your design settings."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Kullanıcı güncellenemedi."
-
 #: actions/apiblockcreate.php:105
-#, fuzzy
 msgid "You cannot block yourself!"
-msgstr "Kullanıcı güncellenemedi."
+msgstr ""
 
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
@@ -329,16 +228,6 @@ msgstr ""
 msgid "No message text!"
 msgstr ""
 
-#: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
-msgid "That's too long. Max message size is %d chars."
-msgstr ""
-"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-
-#: actions/apidirectmessagenew.php:138
-msgid "Recipient user not found."
-msgstr ""
-
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
@@ -348,57 +237,22 @@ msgstr ""
 msgid "No status found with that ID."
 msgstr ""
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Bu zaten sizin Jabber ID'niz."
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
-msgid "Could not create favorite."
-msgstr ""
-
 #: actions/apifavoritedestroy.php:123
 msgid "That status is not a favorite."
 msgstr ""
 
-#: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
-msgid "Could not delete favorite."
-msgstr ""
-
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "Sunucuya yönlendirme yapılamadı: %s"
-
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
-msgid "Could not unfollow user: User not found."
-msgstr "Sunucuya yönlendirme yapılamadı: %s"
+msgstr "Profil kaydedilemedi."
 
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Kullanıcı güncellenemedi."
+msgstr ""
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-#, fuzzy
-msgid "Could not determine source user."
-msgstr "Kullanıcı güncellenemedi."
-
-#: actions/apifriendshipsshow.php:142
-#, fuzzy
-msgid "Could not find target user."
-msgstr "Kullanıcı güncellenemedi."
-
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
 #: actions/register.php:212
@@ -434,9 +288,9 @@ msgstr "Tam isim çok uzun (azm: 255 karakter)."
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
+msgstr "Yer bilgisi çok uzun (azm: %d karakter)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -451,15 +305,9 @@ msgid "Too many aliases! Maximum %d."
 msgstr ""
 
 #: actions/apigroupcreate.php:267
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\"."
-msgstr "%s Geçersiz başlangıç sayfası"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Takma ad kullanımda. Başka bir tane deneyin."
+msgstr "Geçersiz büyüklük."
 
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
@@ -469,51 +317,29 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
-msgstr "İstek bulunamadı!"
+msgstr "Onay kodu bulunamadı."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
-msgstr "Zaten giriş yapmış durumdasıznız!"
+msgstr "Bize o profili yollamadınız"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr ""
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s."
-msgstr "Sunucuya yönlendirme yapılamadı: %s"
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "Bize o profili yollamadınız"
-
-#: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s."
-msgstr "OpenID formu yaratılamadı: %s"
-
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "%s's groups"
-msgstr "Profil"
+msgstr ""
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
-msgid "%1$s groups %2$s is a member of."
-msgstr "Bize o profili yollamadınız"
-
-#. TRANS: Message is used as a title. %s is a site name.
-#. TRANS: Message is used as a page title. %s is a nick name.
-#: actions/apigrouplistall.php:92 actions/usergroups.php:63
 #, php-format
-msgid "%s groups"
+msgid "%1$s groups %2$s is a member of."
 msgstr ""
 
 #: actions/apigrouplistall.php:96
@@ -521,20 +347,10 @@ msgstr ""
 msgid "groups on %s"
 msgstr ""
 
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Yükle"
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Geçersiz büyüklük."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -553,21 +369,6 @@ msgstr "Geçersiz büyüklük."
 msgid "There was a problem with your session token. Try again, please."
 msgstr ""
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Geçersiz kullanıcı adı veya parola."
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Kullanıcı ayarlamada hata oluştu."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Cevap eklenirken veritabanı hatası: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -608,12 +409,6 @@ msgid ""
 "give access to your %4$s account to third parties you trust."
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to user settings
-#: actions/apioauthauthorize.php:310 lib/action.php:450
-#, fuzzy
-msgid "Account"
-msgstr "Hakkında"
-
 #: actions/apioauthauthorize.php:313 actions/login.php:252
 #: actions/profilesettings.php:106 actions/register.php:431
 #: actions/showgroup.php:245 actions/tagother.php:94
@@ -653,21 +448,6 @@ msgstr ""
 msgid "No such notice."
 msgstr "Böyle bir durum mesajı yok."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
-msgid "Cannot repeat your own notice."
-msgstr "Eğer lisansı kabul etmezseniz kayıt olamazsınız."
-
-#: actions/apistatusesretweet.php:91
-#, fuzzy
-msgid "Already repeated that notice."
-msgstr "Zaten giriş yapmış durumdasıznız!"
-
-#: actions/apistatusesshow.php:139
-#, fuzzy
-msgid "Status deleted."
-msgstr "Avatar güncellendi."
-
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
 msgstr ""
@@ -676,86 +456,39 @@ msgstr ""
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, fuzzy, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr ""
-"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-
-#: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
-#, fuzzy
-msgid "Not found."
-msgstr "İstek bulunamadı!"
-
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "Desteklenmeyen görüntü dosyası biçemi."
-
-#: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%1$s'in %2$s'deki durum mesajları "
-
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s adli kullanicinin durum mesajlari"
-
-#: actions/apitimelinementions.php:118
-#, fuzzy, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s'in %2$s'deki durum mesajları "
+msgstr ""
 
 #: actions/apitimelinementions.php:131
 #, php-format
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
 msgstr ""
 
-#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
-#, php-format
-msgid "%s public timeline"
-msgstr ""
-
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
 msgstr ""
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "%s için cevaplar"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "%s için cevaplar"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr ""
 
 #: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
+#, php-format
 msgid "Updates tagged with %1$s on %2$s!"
-msgstr "%s adli kullanicinin durum mesajlari"
-
-#: actions/apitrends.php:87
-msgid "API method under construction."
 msgstr ""
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "Böyle bir belge yok."
+msgstr "Böyle bir durum mesajı yok."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -764,10 +497,6 @@ msgstr "Böyle bir belge yok."
 msgid "No nickname."
 msgstr "Takma ad yok"
 
-#: actions/avatarbynickname.php:64
-msgid "No size."
-msgstr ""
-
 #: actions/avatarbynickname.php:69
 msgid "Invalid size."
 msgstr "Geçersiz büyüklük."
@@ -778,23 +507,10 @@ msgstr "Geçersiz büyüklük."
 msgid "Avatar"
 msgstr "Avatar"
 
-#: actions/avatarsettings.php:78
-#, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
-
-#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
-#: actions/grouplogo.php:181 actions/remotesubscribe.php:191
-#: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
-msgid "User without matching profile."
-msgstr "Kullanıcının profili yok."
-
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
-#, fuzzy
 msgid "Avatar settings"
-msgstr "Ayarlar"
+msgstr "Profil ayarları"
 
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:202 actions/grouplogo.php:262
@@ -807,7 +523,7 @@ msgid "Preview"
 msgstr ""
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr ""
 
@@ -819,11 +535,6 @@ msgstr "Yükle"
 msgid "Crop"
 msgstr ""
 
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Kısmi yükleme."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
@@ -840,20 +551,9 @@ msgstr "Avatar güncellendi."
 msgid "Failed updating avatar."
 msgstr "Avatar güncellemede hata."
 
-#: actions/avatarsettings.php:397
-#, fuzzy
-msgid "Avatar deleted."
-msgstr "Avatar güncellendi."
-
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "Zaten giriş yapmış durumdasıznız!"
-
-#: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
-#, fuzzy
-msgid "Block user"
-msgstr "Böyle bir kullanıcı yok."
+msgstr "Jabber ID başka bir kullanıcıya ait."
 
 #: actions/block.php:138
 msgid ""
@@ -870,17 +570,9 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Durum mesajları"
-
-#. TRANS: Submit button title for 'No' when blocking a user.
-#. TRANS: Submit button title for 'No' when deleting a user.
-#: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
-msgid "Do not block this user"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #. TRANS: Button label on the user block form.
 #. TRANS: Button label on the delete application form.
@@ -896,14 +588,15 @@ msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-#, fuzzy
 msgid "Block this user"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: actions/block.php:187
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -913,46 +606,33 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
-msgstr "Böyle bir durum mesajı yok."
+msgstr "Böyle bir kullanıcı yok."
 
 #: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked profiles"
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s ve arkadaşları"
+msgstr ""
 
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
 msgstr ""
 
 #: actions/blockedfromgroup.php:288
-#, fuzzy
 msgid "Unblock user from group"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr ""
 
-#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-#, fuzzy
-msgid "Unblock this user"
-msgstr "Böyle bir kullanıcı yok."
-
-#. TRANS: Title for mini-posting window loaded from bookmarklet.
-#: actions/bookmarklet.php:51
-#, fuzzy, php-format
-msgid "Post to %s"
-msgstr "%s için cevaplar"
-
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
 msgstr "Onay kodu yok."
@@ -967,9 +647,9 @@ msgstr "O onay kodu sizin için değil!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Tanınmayan adres türü %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -998,40 +678,22 @@ msgid "Couldn't delete email confirmation."
 msgstr "Eposta onayı silinemedi."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Adresi Onayla"
+msgstr "Onayla"
 
 #: actions/confirmaddress.php:161
 #, php-format
 msgid "The address \"%s\" has been confirmed for your account."
 msgstr "\"%s\" adresi hesabınız için onaylandı."
 
-#: actions/conversation.php:99
-#, fuzzy
-msgid "Conversation"
-msgstr "Yer"
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "Durum mesajları"
 
-#: actions/deleteapplication.php:63
-#, fuzzy
-msgid "You must be logged in to delete an application."
-msgstr "Kullanıcı güncellenemedi."
-
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Bize o profili yollamadınız"
+msgstr "Onay kodu bulunamadı."
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1039,11 +701,6 @@ msgstr "Bize o profili yollamadınız"
 msgid "There was a problem with your session token."
 msgstr ""
 
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Böyle bir durum mesajı yok."
-
 #: actions/deleteapplication.php:149
 msgid ""
 "Are you sure you want to delete this application? This will clear all data "
@@ -1051,18 +708,6 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "Böyle bir durum mesajı yok."
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
-
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1074,45 +719,26 @@ msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
 msgid "Not logged in."
 msgstr "Giriş yapılmadı."
 
-#: actions/deletenotice.php:71
-msgid "Can't delete this notice."
-msgstr ""
-
 #: actions/deletenotice.php:103
 msgid ""
 "You are about to permanently delete a notice. Once this is done, it cannot "
 "be undone."
 msgstr ""
 
-#: actions/deletenotice.php:109 actions/deletenotice.php:141
-msgid "Delete notice"
-msgstr ""
-
 #: actions/deletenotice.php:144
 msgid "Are you sure you want to delete this notice?"
 msgstr ""
 
 #. TRANS: Submit button title for 'No' when deleting a notice.
 #: actions/deletenotice.php:151
-#, fuzzy
 msgid "Do not delete this notice"
-msgstr "Böyle bir durum mesajı yok."
+msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
+#: actions/deletenotice.php:158 lib/noticelist.php:657
 msgid "Delete this notice"
 msgstr ""
 
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Kullanıcı güncellenemedi."
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "Yerel aboneliği kullanabilirsiniz!"
-
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
 msgid "Delete user"
 msgstr ""
@@ -1123,12 +749,6 @@ msgid ""
 "the user from the database, without a backup."
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when deleting a user.
-#: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
-msgid "Delete this user"
-msgstr "Böyle bir kullanıcı yok."
-
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
@@ -1140,44 +760,22 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Geçersiz büyüklük."
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
+msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Parolayı değiştir"
-
-#: actions/designadminpanel.php:431
-#, fuzzy
-msgid "Site logo"
-msgstr "Yeni durum mesajı"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
 msgstr "Değiştir"
 
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
-msgstr "Yeni durum mesajı"
-
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
 msgstr ""
 
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Yeni durum mesajı"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
@@ -1192,14 +790,6 @@ msgstr ""
 msgid "Background"
 msgstr ""
 
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
-msgstr ""
-"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
@@ -1218,30 +808,10 @@ msgstr ""
 msgid "Tile background image"
 msgstr ""
 
-#: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
-msgid "Change colours"
-msgstr "Parolayı değiştir"
-
-#: actions/designadminpanel.php:587 lib/designsettings.php:191
-#, fuzzy
-msgid "Content"
-msgstr "Bağlan"
-
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "Ara"
-
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr ""
 
-#: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
-msgid "Links"
-msgstr "Giriş"
-
 #: actions/designadminpanel.php:651
 msgid "Advanced"
 msgstr ""
@@ -1273,10 +843,6 @@ msgstr ""
 msgid "Save"
 msgstr "Kaydet"
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr ""
@@ -1286,70 +852,26 @@ msgid "Add to favorites"
 msgstr ""
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Böyle bir belge yok."
+msgstr "Böyle bir durum mesajı yok."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
-
-#: actions/editapplication.php:66
-msgid "You must be logged in to edit an application."
 msgstr ""
 
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Böyle bir durum mesajı yok."
-
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
 msgstr ""
 
-#: actions/editapplication.php:177 actions/newapplication.php:159
-msgid "Name is required."
-msgstr ""
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Tam isim çok uzun (azm: 255 karakter)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Takma ad kullanımda. Başka bir tane deneyin."
-
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "Abonelikler"
+msgstr "Abonelik reddedildi."
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Başlangıç sayfası adresi geçerli bir URL değil."
-
-#: actions/editapplication.php:203 actions/newapplication.php:188
-msgid "Organization is required."
-msgstr ""
-
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Yer bilgisi çok uzun (azm: 255 karakter)."
-
-#: actions/editapplication.php:209 actions/newapplication.php:194
-msgid "Organization homepage is required."
-msgstr ""
-
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
 msgstr ""
@@ -1358,20 +880,11 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Kullanıcı güncellenemedi."
-
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
 msgstr ""
 
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-msgid "You must be logged in to create a group."
-msgstr ""
-
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
 msgid "You must be an admin to edit the group."
@@ -1382,36 +895,14 @@ msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
-
-#: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\""
-msgstr "%s Geçersiz başlangıç sayfası"
-
-#: actions/editgroup.php:258
-#, fuzzy
-msgid "Could not update group."
-msgstr "Kullanıcı güncellenemedi."
+msgstr "Yer bilgisi çok uzun (azm: 255 karakter)."
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
-msgstr "Avatar bilgisi kaydedilemedi"
-
-#: actions/editgroup.php:280
-#, fuzzy
-msgid "Options saved."
-msgstr "Ayarlar kaydedildi."
-
-#. TRANS: Title for e-mail settings.
-#: actions/emailsettings.php:61
-#, fuzzy
-msgid "Email settings"
-msgstr "Profil ayarları"
+msgstr "Kullanıcı güncellenemedi."
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1420,18 +911,6 @@ msgstr "Profil ayarları"
 msgid "Manage how you get email from %%site.name%%."
 msgstr ""
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Eposta adresi onayı"
-
-#. TRANS: Form note in e-mail settings form.
-#: actions/emailsettings.php:112
-msgid "Current confirmed email address."
-msgstr ""
-
 #. TRANS: Button label to remove a confirmed e-mail address.
 #. TRANS: Button label for removing a set sender e-mail address to post notices from.
 #. TRANS: Button label to remove a confirmed IM address.
@@ -1440,27 +919,9 @@ msgstr ""
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "Kaldır"
-
-#: actions/emailsettings.php:122
-msgid ""
-"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
-"a message with further instructions."
-msgstr ""
-
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "İptal et"
+msgstr "Geri al"
 
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
@@ -1472,10 +933,9 @@ msgstr ""
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Ekle"
+msgstr ""
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
@@ -1502,17 +962,6 @@ msgctxt "BUTTON"
 msgid "New"
 msgstr ""
 
-#. TRANS: Form legend for e-mail preferences form.
-#: actions/emailsettings.php:174
-#, fuzzy
-msgid "Email preferences"
-msgstr "Tercihler"
-
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:180
-msgid "Send me notices of new subscriptions through email."
-msgstr ""
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:186
 msgid "Send me email when someone adds my notice as a favorite."
@@ -1538,43 +987,12 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr ""
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-msgid "Publish a MicroID for my email address."
-msgstr ""
-
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Tercihler kaydedildi."
-
-#. TRANS: Message given saving e-mail address without having provided one.
-#: actions/emailsettings.php:353
-msgid "No email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-msgid "Cannot normalize that email address"
-msgstr ""
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
 msgid "Not a valid email address."
 msgstr "Geçersiz bir eposta adresi."
 
-#. TRANS: Message given saving e-mail address that is already set.
-#: actions/emailsettings.php:370
-msgid "That is already your email address."
-msgstr ""
-
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-msgid "That email address already belongs to another user."
-msgstr ""
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
@@ -1583,13 +1001,6 @@ msgstr ""
 msgid "Couldn't insert confirmation code."
 msgstr "Onay kodu eklenemedi."
 
-#. TRANS: Message given saving valid e-mail address that is to be confirmed.
-#: actions/emailsettings.php:398
-msgid ""
-"A confirmation code was sent to the email address you added. Check your "
-"inbox (and spam box!) for the code and instructions on how to use it."
-msgstr ""
-
 #. TRANS: Message given canceling e-mail address confirmation that is not pending.
 #. TRANS: Message given canceling IM address confirmation that is not pending.
 #. TRANS: Message given canceling SMS phone number confirmation that is not pending.
@@ -1598,50 +1009,15 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "İptal etmek için beklenen onay yok."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Yanlış IM adresi."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Onaylama iptal edildi."
-
-#. TRANS: Message given trying to remove an e-mail address that is not
-#. TRANS: registered for the active user.
-#: actions/emailsettings.php:458
-msgid "That is not your email address."
-msgstr ""
+msgstr "İptal etmek için beklenen onay yok."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Bu adres kaldırılmıştı."
-
-#: actions/emailsettings.php:493 actions/smssettings.php:568
-msgid "No incoming email address."
-msgstr ""
-
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-msgid "Couldn't update user record."
-msgstr ""
-
-#. TRANS: Message given after successfully removing an incoming e-mail address.
-#: actions/emailsettings.php:508 actions/smssettings.php:581
-msgid "Incoming email address removed."
-msgstr ""
-
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-msgid "New incoming email address added."
-msgstr ""
+msgstr "Eposta adresi zaten var."
 
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
@@ -1651,16 +1027,10 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:91
-#: lib/publicgroupnav.php:93
-#, fuzzy
-msgid "Popular notices"
-msgstr "Böyle bir durum mesajı yok."
-
 #: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
 msgid "Popular notices, page %d"
-msgstr "Böyle bir durum mesajı yok."
+msgstr ""
 
 #: actions/favorited.php:79
 msgid "The most popular notices on the site right now."
@@ -1690,9 +1060,9 @@ msgid "%s's favorite notices"
 msgstr ""
 
 #: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
 msgid "Updates favored by %1$s on %2$s!"
-msgstr "%s adli kullanicinin durum mesajlari"
+msgstr ""
 
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
@@ -1710,24 +1080,12 @@ msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "Yeni durum mesajı"
+msgstr "Böyle bir durum mesajı yok."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Yeni durum mesajı"
-
-#: actions/file.php:42
-#, fuzzy
-msgid "No attachments."
-msgstr "Böyle bir belge yok."
-
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "Böyle bir belge yok."
+msgstr "Böyle bir durum mesajı yok."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
@@ -1746,52 +1104,28 @@ msgid "That user has blocked you from subscribing."
 msgstr ""
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Yetkilendirilmemiş."
+msgstr "Takip talebine izin verildi"
 
 #: actions/finishremotesubscribe.php:113
 msgid "Could not convert request token to access token."
 msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "OMB protokolünün bilinmeğen sürümü."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Uzaktaki profili güncellemede hata oluştu"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "Böyle bir durum mesajı yok."
+msgstr ""
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "Böyle bir durum mesajı yok."
-
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Geçersiz büyüklük."
+msgstr "Profil kaydedilemedi."
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "Bize o profili yollamadınız"
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1814,20 +1148,9 @@ msgstr ""
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-#, fuzzy
-msgid "User is already blocked from group."
-msgstr "Kullanıcının profili yok."
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "Bize o profili yollamadınız"
-
 #: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
 msgid "Block user from group"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: actions/groupblock.php:160
 #, php-format
@@ -1839,24 +1162,21 @@ msgstr ""
 
 #. TRANS: Submit button title for 'No' when blocking a user from a group.
 #: actions/groupblock.php:182
-#, fuzzy
 msgid "Do not block this user from this group"
-msgstr "Sunucuya yönlendirme yapılamadı: %s"
+msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
-#, fuzzy
 msgid "Block this user from this group"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Kullanıcı numarası yok"
+msgstr "JabberID yok."
 
 #: actions/groupdesignsettings.php:68
 msgid "You must be logged in to edit a group."
@@ -1872,46 +1192,10 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Kullanıcı güncellenemedi."
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "Tercihler kaydedildi."
-
-#: actions/grouplogo.php:142 actions/grouplogo.php:195
-msgid "Group logo"
-msgstr ""
-
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
-
 #: actions/grouplogo.php:365
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "Avatar güncellendi."
-
-#: actions/grouplogo.php:401
-#, fuzzy
-msgid "Failed updating logo."
-msgstr "Avatar güncellemede hata."
-
-#: actions/groupmembers.php:100 lib/groupnav.php:92
-#, php-format
-msgid "%s group members"
-msgstr ""
-
 #: actions/groupmembers.php:103
 #, php-format
 msgid "%1$s group members, page %2$d"
@@ -1941,20 +1225,11 @@ msgstr ""
 msgid "Make this user an admin"
 msgstr ""
 
-#. TRANS: Message is used as link title. %s is a user nickname.
-#. TRANS: Title in atom group notice feed. %s is a group name.
-#. TRANS: Title in atom user notice feed. %s is a user name.
-#: actions/grouprss.php:139 actions/userrss.php:94
-#: lib/atomgroupnoticefeed.php:63 lib/atomusernoticefeed.php:69
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #: actions/grouprss.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Updates from members of %1$s on %2$s!"
-msgstr "%s adli kullanicinin durum mesajlari"
+msgstr ""
 
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
@@ -1977,30 +1252,13 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "Yeni hesap oluştur"
-
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"%%site.name%% üyeleri arasında isim, yer ya da ilgi alanları içinde arama "
-"yap. Anahtar kelimeleri boşluk ile ayırın. Anahtar kelime 3 veya daha fazla "
-"karakterden oluşmalı. "
-
-#: actions/groupsearch.php:58
-#, fuzzy
-msgid "Group search"
-msgstr "Kişi Arama"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "Sonuç yok"
+msgstr ""
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -2021,20 +1279,13 @@ msgid "Only an admin can unblock group members."
 msgstr ""
 
 #: actions/groupunblock.php:95
-#, fuzzy
 msgid "User is not blocked from group."
-msgstr "Kullanıcının profili yok."
-
-#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
-msgid "Error removing the block."
-msgstr "Kullanıcıyı kaydetmede hata oluştu."
+msgstr ""
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "IM Ayarları"
+msgstr "Profil ayarları"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2050,16 +1301,8 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
-
-#. TRANS: Form legend for IM settings form.
-#. TRANS: Field label for IM address input in IM settings form.
-#: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
-msgid "IM address"
-msgstr "IM adresi"
+msgstr ""
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2089,9 +1332,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Tercihler"
+msgstr "Tercihler kaydedildi."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2104,16 +1346,6 @@ msgid "Post a notice when my Jabber/GTalk status changes."
 msgstr ""
 "Jabber/GTalk durum mesajim değiştiğinde nedurum.com'da durumumu güncelle"
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:172
-msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
-msgstr ""
-
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr ""
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -2160,17 +1392,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Yanlış IM adresi."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Eposta onayı silinemedi."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Onaylama iptal edildi."
+msgstr "Onay kodu yok."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2178,12 +1403,6 @@ msgstr "Onaylama iptal edildi."
 msgid "That is not your Jabber ID."
 msgstr "Bu sizin Jabber ID'niz değil."
 
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-#, fuzzy
-msgid "The IM address was removed."
-msgstr "Bu adres kaldırılmıştı."
-
 #: actions/inbox.php:59
 #, php-format
 msgid "Inbox for %1$s - page %2$d"
@@ -2203,13 +1422,8 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr "Kullanıcı güncellenemedi."
-
-#: actions/invite.php:72
 #, php-format
-msgid "Invalid email address: %s"
+msgid "You must be logged in to invite other users to use %s."
 msgstr ""
 
 #: actions/invite.php:110
@@ -2220,13 +1434,9 @@ msgstr ""
 msgid "Invite new users"
 msgstr ""
 
-#: actions/invite.php:128
-msgid "You are already subscribed to these users:"
-msgstr ""
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr ""
@@ -2251,33 +1461,18 @@ msgid ""
 "Use this form to invite your friends and colleagues to use this service."
 msgstr ""
 
-#: actions/invite.php:187
-msgid "Email addresses"
-msgstr ""
-
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
 msgstr ""
 
-#: actions/invite.php:192
-msgid "Personal message"
-msgstr ""
-
 #: actions/invite.php:194
 msgid "Optionally add a personal message to the invitation."
 msgstr ""
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Gönder"
-
-#. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
-#: actions/invite.php:228
-#, php-format
-msgid "%1$s has invited you to join them on %2$s"
 msgstr ""
 
 #. TRANS: Body text for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
@@ -2316,14 +1511,7 @@ msgstr ""
 msgid "You must be logged in to join a group."
 msgstr ""
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Takma ad yok"
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr ""
@@ -2332,18 +1520,6 @@ msgstr ""
 msgid "You must be logged in to leave a group."
 msgstr ""
 
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
-msgid "You are not a member of that group."
-msgstr "Bize o profili yollamadınız"
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
-msgid "%1$s left group %2$s"
-msgstr "%1$s'in %2$s'deki durum mesajları "
-
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
 msgstr "Zaten giriş yapılmış."
@@ -2352,11 +1528,6 @@ msgstr "Zaten giriş yapılmış."
 msgid "Incorrect username or password."
 msgstr "Yanlış kullanıcı adı veya parola."
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Yetkilendirilmemiş."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Giriş"
@@ -2387,50 +1558,40 @@ msgstr ""
 "ve parolanızı tekrar giriniz."
 
 #: actions/login.php:292
-#, fuzzy
 msgid "Login with your username and password."
-msgstr "Geçersiz kullanıcı adı veya parola."
+msgstr "Yanlış kullanıcı adı veya parola."
 
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Kullanıcı adı ve parolanızla giriş yapın. Henüz bir hesabınız yok mu? Ne "
-"duruyorsunuz, hemen bir [yeni hesap oluşturun](%%action.register%%) ya da "
-"[OpenID](%%action.openidlogin%%) ile giriş yapın."
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
 #: actions/makeadmin.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "OpenID formu yaratılamadı: %s"
+msgstr ""
 
 #: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
 msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "Sonuç yok"
+msgstr ""
 
 #: actions/newapplication.php:52
-#, fuzzy
 msgid "New Application"
-msgstr "Böyle bir durum mesajı yok."
-
-#: actions/newapplication.php:64
-msgid "You must be logged in to register an application."
 msgstr ""
 
 #: actions/newapplication.php:143
@@ -2442,13 +1603,8 @@ msgid "Source URL is required."
 msgstr ""
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
-msgstr "Avatar bilgisi kaydedilemedi"
-
-#: actions/newgroup.php:53
-msgid "New group"
-msgstr ""
+msgstr "Eposta onayı silinemedi."
 
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
@@ -2458,12 +1614,10 @@ msgstr ""
 msgid "New message"
 msgstr ""
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-msgid "You can't send a message to this user."
-msgstr ""
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "İçerik yok!"
 
@@ -2471,7 +1625,8 @@ msgstr "İçerik yok!"
 msgid "No recipient specified."
 msgstr ""
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2480,12 +1635,14 @@ msgstr ""
 msgid "Message sent"
 msgstr ""
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
@@ -2493,11 +1650,6 @@ msgstr ""
 msgid "New notice"
 msgstr "Yeni durum mesajı"
 
-#: actions/newnotice.php:217
-#, fuzzy
-msgid "Notice posted"
-msgstr "Durum mesajları"
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2512,9 +1664,9 @@ msgid "Text search"
 msgstr "Metin arama"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr " \"%s\" için arama sonuçları"
+msgstr ""
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2531,14 +1683,14 @@ msgid ""
 msgstr ""
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "%s adli kullanicinin durum mesajlari"
+msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "\"%s\" kelimesinin geçtiği tüm güncellemeler"
+msgstr ""
 
 #: actions/nudge.php:85
 msgid ""
@@ -2565,24 +1717,10 @@ msgstr ""
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Bize o profili yollamadınız"
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2597,9 +1735,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
+msgstr "Kullanıcının profili yok."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2608,9 +1745,9 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Bağlan"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2618,24 +1755,9 @@ msgstr "Bağlan"
 msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
-#. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
-msgid "Not a supported data format."
-msgstr ""
-
-#: actions/opensearch.php:64
-msgid "People Search"
-msgstr ""
-
-#: actions/opensearch.php:67
-msgid "Notice Search"
-msgstr ""
-
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Ayarlar"
+msgstr "Profil ayarları"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2653,39 +1775,21 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Profil ayarları"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Yer bilgisi çok uzun (azm: 255 karakter)."
-
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "Yeni durum mesajı"
+msgstr ""
 
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "Yeni durum mesajı"
-
-#: actions/otp.php:90
-#, fuzzy
-msgid "No login token requested."
-msgstr "Yetkilendirme isteği yok!"
+msgstr ""
 
 #: actions/otp.php:95
-#, fuzzy
 msgid "Invalid login token specified."
-msgstr "Geçersiz durum mesajı"
+msgstr ""
 
 #: actions/otp.php:104
 msgid "Login token expired."
@@ -2709,16 +1813,6 @@ msgstr ""
 msgid "Change password"
 msgstr "Parolayı değiştir"
 
-#: actions/passwordsettings.php:69
-#, fuzzy
-msgid "Change your password."
-msgstr "Parolayı değiştir"
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "Parola kaydedildi."
-
 #: actions/passwordsettings.php:104
 msgid "Old password"
 msgstr "Eski parola"
@@ -2744,10 +1838,6 @@ msgstr "yukarıdaki parolanın aynısı"
 msgid "Change"
 msgstr "Değiştir"
 
-#: actions/passwordsettings.php:154 actions/register.php:237
-msgid "Password must be 6 or more characters."
-msgstr ""
-
 #: actions/passwordsettings.php:157 actions/register.php:240
 msgid "Passwords don't match."
 msgstr "Parolalar birbirini tutmuyor."
@@ -2778,24 +1868,24 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2817,11 +1907,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Yeni durum mesajı"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2842,10 +1927,6 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
-#: actions/pathsadminpanel.php:264
-msgid "Theme server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:268
 msgid "Theme path"
 msgstr ""
@@ -2854,34 +1935,14 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Avatar"
-
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "Ayarlar"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Avatar güncellendi."
-
-#: actions/pathsadminpanel.php:292
-#, fuzzy
-msgid "Avatar directory"
-msgstr "Avatar güncellendi."
+msgstr "Avatar"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
 msgstr ""
 
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:309
 msgid "Background path"
 msgstr ""
@@ -2895,14 +1956,8 @@ msgid "SSL"
 msgstr ""
 
 #: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
 msgid "Never"
-msgstr "Geri al"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Durum mesajları"
+msgstr "Sunucu"
 
 #: actions/pathsadminpanel.php:325
 msgid "Always"
@@ -2917,18 +1972,16 @@ msgid "When to use SSL"
 msgstr ""
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
-msgstr "Geri al"
+msgstr "Sunucu"
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Yeni durum mesajı"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2944,20 +1997,14 @@ msgstr ""
 msgid "People search"
 msgstr "Kişi Arama"
 
-#: actions/peopletag.php:68
-#, fuzzy, php-format
-msgid "Not a valid people tag: %s."
-msgstr "Geçersiz bir eposta adresi."
-
 #: actions/peopletag.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "%s adli kullanicinin durum mesajlari"
+msgstr ""
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Geçersiz durum mesajı"
+msgstr "Geçersiz büyüklük."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -2976,9 +2023,8 @@ msgstr ""
 "hakkınızda daha fazla bilgi sahibi olur."
 
 #: actions/profilesettings.php:99
-#, fuzzy
 msgid "Profile information"
-msgstr "Profil bilinmiyor"
+msgstr "Profil ayarları"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -3004,14 +2050,13 @@ msgstr ""
 "Web Sitenizin, blogunuzun ya da varsa başka bir sitedeki profilinizin adresi"
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
+msgstr ""
 
 #: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
 msgid "Describe yourself and your interests"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
+msgstr ""
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3065,41 +2110,23 @@ msgid ""
 msgstr ""
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
+msgstr "Yer bilgisi çok uzun (azm: %d karakter)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-msgid "Language is too long (max 50 chars)."
-msgstr ""
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
-msgstr "%s Geçersiz başlangıç sayfası"
-
-#: actions/profilesettings.php:306
-msgid "Couldn't update user for autosubscribe."
-msgstr ""
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Profil kaydedilemedi."
+msgstr "Geçersiz büyüklük."
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Profil kaydedilemedi."
 
-#: actions/profilesettings.php:383
-#, fuzzy
-msgid "Couldn't save tags."
-msgstr "Profil kaydedilemedi."
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -3110,33 +2137,21 @@ msgstr "Ayarlar kaydedildi."
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-msgid "Could not retrieve public stream."
-msgstr ""
-
-#: actions/public.php:130
-#, fuzzy, php-format
-msgid "Public timeline, page %d"
-msgstr "Genel zaman çizgisi"
-
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
 msgstr "Genel zaman çizgisi"
 
 #: actions/public.php:160
-#, fuzzy
 msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Genel Durum Akış RSS Beslemesi"
+msgstr ""
 
 #: actions/public.php:164
-#, fuzzy
 msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Genel Durum Akış RSS Beslemesi"
+msgstr ""
 
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "Genel Durum Akış RSS Beslemesi"
+msgstr ""
 
 #: actions/public.php:188
 #, php-format
@@ -3173,9 +2188,8 @@ msgid ""
 msgstr ""
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "Genel Durum Akış RSS Beslemesi"
+msgstr ""
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3226,28 +2240,10 @@ msgstr "Onay kodu hatası."
 msgid "This confirmation code is too old. Please start again."
 msgstr "Onay kodu çok eski. Lütfen tekrar başlayınız."
 
-#: actions/recoverpassword.php:111
-msgid "Could not update user with confirmed email address."
-msgstr ""
-
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "Bu sunucudaki takma adınız  veya kaydedilmiş eposta adresiniz."
@@ -3284,10 +2280,6 @@ msgstr "Sıfırla"
 msgid "Enter a nickname or email address."
 msgstr "Bir takma ad veya eposta adresi girin."
 
-#: actions/recoverpassword.php:282
-msgid "No user with that email address or username."
-msgstr ""
-
 #: actions/recoverpassword.php:299
 msgid "No registered email address for that user."
 msgstr "Kullanıcı için kaydedilmiş eposta adresi yok."
@@ -3328,11 +2320,6 @@ msgstr "Yeni parola başarıyla kaydedildi. Şimdi giriş yaptınız."
 msgid "Sorry, only invited people can register."
 msgstr ""
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "Onay kodu hatası."
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr ""
@@ -3363,18 +2350,6 @@ msgid ""
 "link up to friends and colleagues. "
 msgstr ""
 
-#: actions/register.php:432
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr ""
-
-#: actions/register.php:437
-msgid "6 or more characters. Required."
-msgstr ""
-
-#: actions/register.php:441
-msgid "Same as password above. Required."
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
 #: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:132
@@ -3413,13 +2388,11 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
-"bu özel veriler haricinde: parola, eposta adresi, IM adresi, telefon "
-"numarası."
 
 #: actions/register.php:583
 #, php-format
@@ -3458,11 +2431,6 @@ msgstr ""
 msgid "Remote subscribe"
 msgstr "Uzaktan abonelik"
 
-#: actions/remotesubscribe.php:124
-#, fuzzy
-msgid "Subscribe to a remote user"
-msgstr "Takip talebine izin verildi"
-
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
 msgstr "Kullanıcı takma adı"
@@ -3489,9 +2457,8 @@ msgid "Invalid profile URL (bad format)"
 msgstr ""
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Geçersiz profil adresi (YADIS belgesi yok)."
+msgstr ""
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
@@ -3505,30 +2472,9 @@ msgstr ""
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Yeni durum mesajı"
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Eğer lisansı kabul etmezseniz kayıt olamazsınız."
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "Zaten giriş yapmış durumdasıznız!"
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "Yarat"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "Yarat"
+msgstr "Sıfırla"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3536,25 +2482,10 @@ msgstr "Yarat"
 msgid "Replies to %s"
 msgstr "%s için cevaplar"
 
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "%s için cevaplar"
-
-#: actions/replies.php:145
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 1.0)"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/replies.php:152
-#, fuzzy, php-format
-msgid "Replies feed for %s (RSS 2.0)"
-msgstr "%s için durum RSS beslemesi"
-
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "%s için durum RSS beslemesi"
+msgstr "%s için cevaplar"
 
 #: actions/replies.php:199
 #, php-format
@@ -3577,35 +2508,25 @@ msgid ""
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
 
-#: actions/repliesrss.php:72
-#, fuzzy, php-format
-msgid "Replies to %1$s on %2$s!"
-msgstr "%s için cevaplar"
-
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "Bize o profili yollamadınız"
+msgstr ""
 
 #: actions/revokerole.php:82
-#, fuzzy
 msgid "User doesn't have this role."
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Avatar güncellendi."
+msgstr "İstatistikler"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
 msgid "You cannot sandbox users on this site."
-msgstr "Bize o profili yollamadınız"
+msgstr ""
 
 #: actions/sandbox.php:72
-#, fuzzy
 msgid "User is already sandboxed."
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3635,43 +2556,18 @@ msgstr ""
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "Ayarlar"
-
-#: actions/showapplication.php:82
-msgid "You must be logged in to view an application."
-msgstr ""
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
+msgstr "Profil ayarları"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Takma ad"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "Yer"
-
-#. TRANS: Form input field label.
-#: actions/showapplication.php:187 actions/version.php:200
-#: lib/applicationeditform.php:216 lib/groupeditform.php:172
-#, fuzzy
-msgid "Description"
-msgstr "Abonelikler"
+msgstr ""
 
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
@@ -3683,18 +2579,10 @@ msgstr "İstatistikler"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3726,28 +2614,19 @@ msgid "Are you sure you want to reset your consumer key and secret?"
 msgstr ""
 
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s ve arkadaşları"
-
-#: actions/showfavorites.php:132
-msgid "Could not retrieve favorite notices."
 msgstr ""
 
 #: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
+msgstr ""
 
 #: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
-
-#: actions/showfavorites.php:185
-#, fuzzy, php-format
-msgid "Feed for favorites of %s (Atom)"
-msgstr "%s için arkadaş güncellemeleri RSS beslemesi"
+msgstr ""
 
 #: actions/showfavorites.php:206
 msgid ""
@@ -3774,64 +2653,38 @@ msgstr ""
 msgid "This is a way to share what you like."
 msgstr ""
 
-#: actions/showgroup.php:82 lib/groupnav.php:86
-#, php-format
-msgid "%s group"
-msgstr ""
-
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "Bütün abonelikler"
+msgstr ""
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "Böyle bir durum mesajı yok."
+msgstr "Kullanıcının profili yok."
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-#, fuzzy
-msgid "Note"
-msgstr "Durum mesajları"
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "%s için durum RSS beslemesi"
+msgstr ""
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/showgroup.php:350
-#, fuzzy, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr "%s için durum RSS beslemesi"
+msgstr ""
 
 #: actions/showgroup.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s group"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
-#, fuzzy
-msgid "Members"
-msgstr "Üyelik başlangıcı"
+msgstr ""
 
 #: actions/showgroup.php:398 lib/profileaction.php:117
 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
@@ -3843,11 +2696,6 @@ msgstr ""
 msgid "All members"
 msgstr ""
 
-#: actions/showgroup.php:439
-#, fuzzy
-msgid "Created"
-msgstr "Yarat"
-
 #: actions/showgroup.php:455
 #, php-format
 msgid ""
@@ -3871,10 +2719,6 @@ msgstr ""
 msgid "Admins"
 msgstr ""
 
-#: actions/showmessage.php:81
-msgid "No such message."
-msgstr ""
-
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
 msgstr ""
@@ -3890,9 +2734,8 @@ msgid "Message from %1$s on %2$s"
 msgstr ""
 
 #: actions/shownotice.php:90
-#, fuzzy
 msgid "Notice deleted."
-msgstr "Durum mesajları"
+msgstr ""
 
 #: actions/showstream.php:73
 #, php-format
@@ -3900,29 +2743,14 @@ msgid " tagged %s"
 msgstr ""
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%s ve arkadaşları"
+msgstr ""
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/showstream.php:129
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 1.0)"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/showstream.php:136
-#, fuzzy, php-format
-msgid "Notice feed for %s (RSS 2.0)"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/showstream.php:143
-#, fuzzy, php-format
-msgid "Notice feed for %s (Atom)"
-msgstr "%s için durum RSS beslemesi"
+msgstr ""
 
 #: actions/showstream.php:148
 #, php-format
@@ -3964,19 +2792,13 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "%s için cevaplar"
-
 #: actions/silence.php:65 actions/unsilence.php:65
 msgid "You cannot silence users on this site."
 msgstr ""
 
 #: actions/silence.php:72
-#, fuzzy
 msgid "User is already silenced."
-msgstr "Kullanıcının profili yok."
+msgstr ""
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
@@ -3986,11 +2808,6 @@ msgstr ""
 msgid "Site name must have non-zero length."
 msgstr ""
 
-#: actions/siteadminpanel.php:141
-#, fuzzy
-msgid "You must have a valid contact email address."
-msgstr "Geçersiz bir eposta adresi."
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -4008,11 +2825,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Yeni durum mesajı"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4033,16 +2845,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Kullanıcı için kaydedilmiş eposta adresi yok."
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Yer"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4080,42 +2882,25 @@ msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "Yeni durum mesajı"
+msgstr "Durum mesajları"
 
 #: actions/sitenoticeadminpanel.php:67
 msgid "Edit site-wide message"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Durum mesajını kaydederken hata oluştu."
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "Yeni durum mesajı"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "Yeni durum mesajı"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "IM Ayarları"
+msgstr "Profil ayarları"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4126,15 +2911,8 @@ msgstr ""
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
-
-#. TRANS: Form legend for SMS settings form.
-#: actions/smssettings.php:111
-#, fuzzy
-msgid "SMS address"
-msgstr "IM adresi"
+msgstr ""
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4146,38 +2924,20 @@ msgstr ""
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-msgid "Confirmation code"
-msgstr ""
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Onayla"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
 msgstr ""
 
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr ""
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Tercihler"
+msgstr "Tercihler kaydedildi."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4186,62 +2946,24 @@ msgid ""
 "from my carrier."
 msgstr ""
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Tercihler kaydedildi."
-
-#. TRANS: Message given saving SMS phone number without having provided one.
-#: actions/smssettings.php:338
-msgid "No phone number."
-msgstr ""
-
 #. TRANS: Message given saving SMS phone number without having selected a carrier.
 #: actions/smssettings.php:344
 msgid "No carrier selected."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-msgid "That is already your phone number."
-msgstr ""
-
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-msgid "That phone number already belongs to another user."
-msgstr ""
-
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
-msgstr "O onay kodu sizin için değil!"
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-msgid "That is the wrong confirmation number."
 msgstr ""
+"Eklemiş olduğunuz IM adresine bir onay kodu gönderildi. %s tarafından size "
+"mesaj yollanabilmesi için onaylamanız gerekmektedir."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Onaylama iptal edildi."
-
-#. TRANS: Message given trying to remove an SMS phone number that is not
-#. TRANS: registered for the active user.
-#: actions/smssettings.php:448
-msgid "That is not your phone number."
-msgstr ""
-
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "Bu adres kaldırılmıştı."
+msgstr "Onay kodu yok."
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
@@ -4262,11 +2984,6 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-msgid "No code entered"
-msgstr ""
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
@@ -4274,13 +2991,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Abonelikler"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Eposta adresi onayı"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4322,50 +3034,23 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Ayarlar"
-
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "Bize o profili yollamadınız"
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "Abonelik oluşturulamadı."
+msgstr "Yeni abonelik eklenemedi."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Böyle bir durum mesajı yok."
-
 #: actions/subscribe.php:117
-#, fuzzy
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Bize o profili yollamadınız"
-
-#: actions/subscribe.php:145
-#, fuzzy
-msgid "Subscribed"
-msgstr "Abone ol"
-
-#: actions/subscribers.php:50
-#, fuzzy, php-format
-msgid "%s subscribers"
-msgstr "Abone olanlar"
+msgstr ""
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "Bütün abonelikler"
+msgstr ""
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4394,16 +3079,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Bütün abonelikler"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "Bütün abonelikler"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr "Sizin durumlarını takip ettiğiniz kullanıcılar"
@@ -4423,55 +3098,34 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
-msgid "%s is not listening to anyone."
-msgstr "%1$s %2$s'da durumunuzu takip ediyor"
-
-#: actions/subscriptions.php:208
-#, fuzzy
-msgid "Jabber"
-msgstr "JabberID yok."
-
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
 msgstr ""
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "%s adli kullanicinin durum mesajlari"
+msgstr ""
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "%s için durum RSS beslemesi"
+msgstr ""
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "%s için durum RSS beslemesi"
-
-#: actions/tag.php:99
-#, fuzzy, php-format
-msgid "Notice feed for tag %s (Atom)"
-msgstr "%s için durum RSS beslemesi"
+msgstr ""
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Böyle bir belge yok."
+msgstr ""
 
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
 msgstr ""
 
-#: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
-msgid "User profile"
-msgstr "Kullanıcının profili yok."
-
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
@@ -4493,44 +3147,13 @@ msgid ""
 msgstr ""
 
 #: actions/tagother.php:200
-#, fuzzy
 msgid "Could not save tags."
-msgstr "Avatar bilgisi kaydedilemedi"
+msgstr "Profil kaydedilemedi."
 
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
 
-#: actions/tagrss.php:35
-#, fuzzy
-msgid "No such tag."
-msgstr "Böyle bir durum mesajı yok."
-
-#: actions/unblock.php:59
-#, fuzzy
-msgid "You haven't blocked that user."
-msgstr "Zaten giriş yapmış durumdasıznız!"
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Kullanıcının profili yok."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Kullanıcının profili yok."
-
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "Yetkilendirme isteği yok!"
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "Aboneliği sonlandır"
-
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
 msgid ""
@@ -4586,20 +3209,9 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Bütün abonelikler"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "Takip talebine izin verildi"
-
 #: actions/useradminpanel.php:251
-#, fuzzy
 msgid "Invitations"
-msgstr "Yer"
+msgstr ""
 
 #: actions/useradminpanel.php:256
 msgid "Invitations enabled"
@@ -4614,15 +3226,11 @@ msgid "Authorize subscription"
 msgstr "Takip isteğini onayla"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Lütfen bu kullanıcının durumunu takip etmek istediğinizden emin olmak için "
-"detayları gözden geçirin. Kimsenin durumunu taki etme isteğinde "
-"bulunmadıysanız \"İptal\" tuşuna basın. "
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4634,18 +3242,16 @@ msgstr "Kabul et"
 
 #: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
-#, fuzzy
 msgid "Subscribe to this user"
-msgstr "Takip talebine izin verildi"
+msgstr "Bize o profili yollamadınız"
 
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Reddet"
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "Bütün abonelikler"
+msgstr "Takip isteğini onayla"
 
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
@@ -4699,19 +3305,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Avatar URLi '%s' okunamıyor"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "%s için yanlış resim türü"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Profil ayarları"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4725,19 +3326,14 @@ msgstr ""
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "Bütün abonelikler"
+msgstr ""
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "Bize o profili yollamadınız"
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4754,11 +3350,6 @@ msgstr ""
 msgid "Updates from %1$s on %2$s!"
 msgstr ""
 
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "İstatistikler"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4797,12 +3388,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Kişisel"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4841,43 +3426,6 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Geçersiz büyüklük."
-
-#. TRANS: Exception thrown when joining a group fails.
-#: classes/Group_member.php:42
-#, fuzzy
-msgid "Group join failed."
-msgstr "Böyle bir durum mesajı yok."
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Kullanıcı güncellenemedi."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Böyle bir durum mesajı yok."
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Kullanıcı güncellenemedi."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Avatar bilgisi kaydedilemedi"
-
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
@@ -4888,16 +3436,6 @@ msgstr ""
 msgid "You are banned from sending direct messages."
 msgstr ""
 
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-msgid "Could not insert message."
-msgstr ""
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-msgid "Could not update message with new URI."
-msgstr ""
-
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
@@ -4906,61 +3444,43 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Cevap eklenirken veritabanı hatası: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Durum mesajını kaydederken hata oluştu."
-
-#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-#, fuzzy
-msgid "Problem saving notice. Unknown user."
-msgstr "Durum mesajını kaydederken hata oluştu."
+msgstr "Avatar eklemede hata oluştu"
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Durum mesajını kaydederken hata oluştu."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Durum mesajını kaydederken hata oluştu."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -4979,57 +3499,25 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Kullanıcının profili yok."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Durum mesajını kaydederken hata oluştu."
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
-
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-#, fuzzy
-msgid "User has blocked you."
-msgstr "Kullanıcının profili yok."
-
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Bu kullanıcıyı zaten takip etmiyorsunuz!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Abonelik silinemedi."
+msgstr "Yeni abonelik eklenemedi."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Abonelik silinemedi."
+msgstr "Yeni abonelik eklenemedi."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Abonelik silinemedi."
+msgstr "Yeni abonelik eklenemedi."
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
@@ -5040,71 +3528,34 @@ msgstr ""
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
-#, fuzzy
 msgid "Could not create group."
-msgstr "Avatar bilgisi kaydedilemedi"
+msgstr "Kullanıcı güncellenemedi."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Abonelik oluşturulamadı."
+msgstr "Profil kaydedilemedi."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "Abonelik oluşturulamadı."
+msgstr "Kullanıcı güncellenemedi."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "Abonelik oluşturulamadı."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:109
-msgid "Change your profile settings"
-msgstr ""
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "Avatar güncellemede hata."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:123
-msgid "Change your password"
-msgstr ""
+msgstr "Profil kaydedilemedi."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
 msgstr ""
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:137
-#, fuzzy
-msgid "Design your profile"
-msgstr "Kullanıcının profili yok."
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-msgid "Other options"
-msgstr ""
-
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
 msgstr ""
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1$s'in %2$s'deki durum mesajları "
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
@@ -5121,39 +3572,23 @@ msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Kişisel"
-
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "Parolayı değiştir"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Sunucuya yönlendirme yapılamadı: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "Bağlan"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Abonelikler"
-
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
 msgctxt "MENU"
@@ -5169,10 +3604,9 @@ msgstr ""
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
-#, fuzzy
 msgctxt "MENU"
 msgid "Invite"
-msgstr "Geçersiz büyüklük."
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
@@ -5180,26 +3614,11 @@ msgctxt "TOOLTIP"
 msgid "Logout from the site"
 msgstr ""
 
-#. TRANS: Main menu option when logged in to log out the current user
-#: lib/action.php:477
-#, fuzzy
-msgctxt "MENU"
-msgid "Logout"
-msgstr "Çıkış"
-
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Yeni hesap oluştur"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Kayıt"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
@@ -5207,60 +3626,21 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Giriş"
-
-#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:494
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Help me!"
-msgstr "Yardım"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
-msgstr "Yardım"
-
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
 msgstr ""
 
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Ara"
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Yeni durum mesajı"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Yeni durum mesajı"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "Abonelikler"
+msgstr ""
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5308,13 +3688,11 @@ msgstr ""
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** [%%site.broughtby%%](%%site.broughtbyurl%%)\" tarafından "
-"hazırlanan anında mesajlaşma ağıdır. "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5334,12 +3712,6 @@ msgstr ""
 "licenses/agpl-3.0.html) lisansı ile korunan [StatusNet](http://status.net/) "
 "microbloglama yazılımının %s. versiyonunu kullanmaktadır."
 
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "Yeni durum mesajı"
-
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
@@ -5373,16 +3745,14 @@ msgstr ""
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
-#, fuzzy
 msgid "After"
-msgstr "« Sonra"
+msgstr ""
 
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: past than the currently displayed information.
 #: lib/action.php:1213
-#, fuzzy
 msgid "Before"
-msgstr "Önce »"
+msgstr ""
 
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
@@ -5427,112 +3797,48 @@ msgstr ""
 msgid "Unable to delete design setting."
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Eposta adresi onayı"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
-#, fuzzy
 msgctxt "MENU"
 msgid "Site"
-msgstr "Yeni durum mesajı"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "Eposta adresi onayı"
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
-msgid "Design"
-msgstr "Kişisel"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "Eposta adresi onayı"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Eposta adresi onayı"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "Eposta adresi onayı"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Eposta adresi onayı"
+msgid "Design"
+msgstr ""
 
 #. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "Yeni durum mesajı"
+#: lib/adminpanelaction.php:366
+msgid "User configuration"
+msgstr "Onay kodu yok."
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Eposta adresi onayı"
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
+msgid "User"
+msgstr ""
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
-#, fuzzy, php-format
+#, php-format
 msgid "Describe your application in %d characters"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:224
-#, fuzzy
 msgid "URL of the homepage of this application"
 msgstr ""
-"Web Sitenizin, blogunuzun ya da varsa başka bir sitedeki profilinizin adresi"
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Kaynak"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
@@ -5541,10 +3847,8 @@ msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
-#, fuzzy
 msgid "URL for the homepage of the organization"
 msgstr ""
-"Web Sitenizin, blogunuzun ya da varsa başka bir sitedeki profilinizin adresi"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5604,47 +3908,21 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "Kaldır"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
+msgstr "Geri al"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
 msgstr ""
 
-#. TRANS: DT element label in attachment list item.
-#: lib/attachmentlist.php:279
-#, fuzzy
-msgid "Provider"
-msgstr "Profil"
-
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Parola kaydedildi."
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "Parola kaydedildi."
-
-#: lib/channel.php:157 lib/channel.php:177
-msgid "Command results"
 msgstr ""
 
 #: lib/channel.php:229 lib/mailhandler.php:142
@@ -5655,45 +3933,33 @@ msgstr ""
 msgid "Command failed"
 msgstr ""
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
 msgstr ""
 
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Kullanıcının profili yok."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Kullanıcı güncellenemedi."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Kullanıcı güncellenemedi."
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "%s için cevaplar"
+#: lib/command.php:240
+#, php-format
+msgid "Nudge sent to %s."
+msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5701,56 +3967,20 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "Zaten giriş yapmış durumdasıznız!"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Sunucuya yönlendirme yapılamadı: %s"
-
-#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: Message given having added a user to a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "OpenID formu yaratılamadı: %s"
-
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "Tam İsim"
-
-#. TRANS: Whois output. %s is the location of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, php-format
-msgid "Location: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the homepage of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
-#, php-format
-msgid "Homepage: %s"
-msgstr ""
-
-#. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:360
 #, php-format
-msgid "About: %s"
+msgid "%1$s joined group %2$s."
 msgstr ""
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5759,147 +3989,99 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr ""
-
-#: lib/command.php:494
-msgid "Error sending direct message."
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Eğer lisansı kabul etmezseniz kayıt olamazsınız."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Zaten giriş yapmış durumdasıznız!"
-
 #. TRANS: Message given having repeated a notice from another user.
 #. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Durum mesajları"
-
-#: lib/command.php:531
-#, fuzzy
-msgid "Error repeating notice."
-msgstr "Durum mesajını kaydederken hata oluştu."
-
-#: lib/command.php:562
+#: lib/command.php:554
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "%s için cevaplar"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Durum mesajını kaydederken hata oluştu."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+msgid "Notice from %s repeated."
 msgstr ""
 
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Bize o profili yollamadınız"
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
+msgid "Error repeating notice."
+msgstr "Kullanıcı ayarlamada hata oluştu."
 
-#: lib/command.php:634
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Subscribed to %s"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
+msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
-msgid "Command not yet implemented."
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:685
-msgid "Notification off."
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
+msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-msgid "Notification on."
-msgstr ""
-
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr ""
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Aboneliği sonlandır"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "Bize o profili yollamadınız"
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Bize o profili yollamadınız"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Uzaktan abonelik"
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Uzaktan abonelik"
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Bize o profili yollamadınız"
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Bize o profili yollamadınız"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5941,11 +4123,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Onay kodu yok."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5970,31 +4147,10 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Bağlan"
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Yükle"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr ""
-"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
@@ -6003,11 +4159,6 @@ msgstr ""
 msgid "Disfavor this notice"
 msgstr ""
 
-#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
-msgid "Favor this notice"
-msgstr "Böyle bir durum mesajı yok."
-
 #: lib/favorform.php:140
 msgid "Favor"
 msgstr ""
@@ -6061,27 +4212,14 @@ msgstr ""
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr ""
-"Web Sitenizin, blogunuzun ya da varsa başka bir sitedeki profilinizin adresi"
-
 #: lib/groupeditform.php:168
-#, fuzzy
 msgid "Describe the group or topic"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
+msgstr ""
 
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Kendinizi ve ilgi alanlarınızı 140 karakter ile anlatın"
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "Bulunduğunuz yer, \"Şehir, Eyalet (veya Bölge), Ülke\" gibi"
+msgstr ""
 
 #: lib/groupeditform.php:187
 #, php-format
@@ -6093,14 +4231,13 @@ msgid "Group"
 msgstr ""
 
 #: lib/groupnav.php:101
-#, fuzzy
 msgid "Blocked"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: lib/groupnav.php:102
-#, fuzzy, php-format
+#, php-format
 msgid "%s blocked users"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: lib/groupnav.php:108
 #, php-format
@@ -6108,9 +4245,8 @@ msgid "Edit %s group properties"
 msgstr ""
 
 #: lib/groupnav.php:113
-#, fuzzy
 msgid "Logo"
-msgstr "Çıkış"
+msgstr "Giriş"
 
 #: lib/groupnav.php:114
 #, php-format
@@ -6144,12 +4280,6 @@ msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
 msgid "Unsupported image file format."
 msgstr "Desteklenmeyen görüntü dosyası biçemi."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr ""
-"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Kısmi yükleme."
@@ -6162,11 +4292,6 @@ msgstr "Dosya yüklemede sistem hatası."
 msgid "Not an image or corrupt file."
 msgstr "Bu bir resim dosyası değil ya da dosyada hata var"
 
-#: lib/imagefile.php:122
-#, fuzzy
-msgid "Lost our file."
-msgstr "Böyle bir durum mesajı yok."
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
 msgstr ""
@@ -6189,25 +4314,9 @@ msgstr ""
 msgid "Unknown inbox source %d."
 msgstr ""
 
-#: lib/joinform.php:114
-#, fuzzy
-msgid "Join"
-msgstr "Giriş"
-
-#: lib/leaveform.php:114
-#, fuzzy
-msgid "Leave"
-msgstr "Kaydet"
-
-#: lib/logingroupnav.php:80
-#, fuzzy
-msgid "Login with a username and password"
-msgstr "Geçersiz kullanıcı adı veya parola."
-
 #: lib/logingroupnav.php:86
-#, fuzzy
 msgid "Sign up for a new account"
-msgstr "Yeni hesap oluştur"
+msgstr ""
 
 #. TRANS: Subject for address confirmation email
 #: lib/mail.php:174
@@ -6247,7 +4356,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6260,24 +4369,6 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1$s %2$s durum mesajlarınızı takip etmeye başladı.\n"
-"\n"
-"\t%3$s\n"
-"\n"
-"Kendisini durumsuz bırakmayın!,\n"
-"%4$s.\n"
-
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "Hakkında"
-
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, php-format
-msgid "New email address for posting to %s"
-msgstr ""
 
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
@@ -6299,11 +4390,6 @@ msgstr ""
 msgid "%s status"
 msgstr "%s durum"
 
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-msgid "SMS confirmation"
-msgstr ""
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6361,9 +4447,9 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%1$s %2$s'da durumunuzu takip ediyor"
+msgstr ""
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6439,31 +4525,14 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
 msgstr ""
 
-#: lib/mailhandler.php:37
-msgid "Could not parse message."
-msgstr ""
-
-#: lib/mailhandler.php:42
-msgid "Not a registered user."
-msgstr ""
-
-#: lib/mailhandler.php:46
-msgid "Sorry, that is not your incoming email address."
-msgstr ""
-
 #: lib/mailhandler.php:50
 msgid "Sorry, no incoming email allowed."
 msgstr ""
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Desteklenmeyen görüntü dosyası biçemi."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6503,9 +4572,8 @@ msgid "File could not be moved to destination directory."
 msgstr ""
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "Kullanıcı güncellenemedi."
+msgstr ""
 
 #: lib/mediafile.php:318
 #, php-format
@@ -6525,46 +4593,29 @@ msgstr ""
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "6 veya daha fazla karakter"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Gönder"
-
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "Yeni durum mesajı"
+msgstr ""
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "N'aber %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Profil kaydedilemedi."
-
-#: lib/noticeform.php:215
-#, fuzzy
-msgid "Do not share my location"
-msgstr "Profil kaydedilemedi."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6599,42 +4650,22 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "İçerik yok!"
-
-#: lib/noticelist.php:602
-#, fuzzy
-msgid "Repeated by"
-msgstr "Yarat"
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
-#: lib/noticelist.php:629
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
 msgstr ""
 
-#: lib/noticelist.php:630
-#, fuzzy
+#: lib/noticelist.php:631
 msgid "Reply"
-msgstr "cevapla"
-
-#: lib/noticelist.php:674
-#, fuzzy
-msgid "Notice repeated"
-msgstr "Durum mesajları"
-
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
+msgstr "Cevaplar"
 
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "Yeni profil eklemede hata oluştu"
@@ -6651,11 +4682,6 @@ msgstr "Uzaktaki profili güncellemede hata oluştu"
 msgid "Error inserting remote profile"
 msgstr "Uzak profil eklemede hata oluştu"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Yeni durum mesajı"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Yeni abonelik eklenemedi."
@@ -6709,11 +4735,6 @@ msgstr "Bütün abonelikler"
 msgid "Subscribers"
 msgstr "Abone olanlar"
 
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "Abone olanlar"
-
 #: lib/profileaction.php:191
 msgid "User ID"
 msgstr ""
@@ -6747,38 +4768,18 @@ msgstr ""
 msgid "Recent tags"
 msgstr ""
 
-#: lib/publicgroupnav.php:88
-msgid "Featured"
-msgstr ""
-
-#: lib/publicgroupnav.php:92
-#, fuzzy
-msgid "Popular"
-msgstr "Kişi Arama"
-
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "Böyle bir belge yok."
-
-#: lib/repeatform.php:107
-#, fuzzy
-msgid "Repeat this notice?"
-msgstr "Böyle bir durum mesajı yok."
+msgstr ""
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr ""
 
-#: lib/repeatform.php:132
-#, fuzzy
-msgid "Repeat this notice"
-msgstr "Böyle bir durum mesajı yok."
-
 #: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr "Böyle bir kullanıcı yok."
+msgstr ""
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
@@ -6788,16 +4789,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr ""
 
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Böyle bir kullanıcı yok."
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Ara"
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr ""
@@ -6806,15 +4797,6 @@ msgstr ""
 msgid "Search"
 msgstr "Ara"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Ara"
-
-#: lib/searchgroupnav.php:80
-msgid "People"
-msgstr ""
-
 #: lib/searchgroupnav.php:81
 msgid "Find people on this site"
 msgstr ""
@@ -6836,24 +4818,8 @@ msgid "More..."
 msgstr ""
 
 #: lib/silenceform.php:67
-#, fuzzy
 msgid "Silence"
-msgstr "Yeni durum mesajı"
-
-#: lib/silenceform.php:78
-#, fuzzy
-msgid "Silence this user"
-msgstr "Böyle bir kullanıcı yok."
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "Uzaktan abonelik"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "Uzaktan abonelik"
+msgstr ""
 
 #: lib/subgroupnav.php:99
 #, php-format
@@ -6891,13 +4857,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Avatar güncellemede hata."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6922,11 +4881,6 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Uzaktaki profili güncellemede hata oluştu"
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
@@ -6935,51 +4889,18 @@ msgstr ""
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Böyle bir kullanıcı yok."
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Böyle bir kullanıcı yok."
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-msgid "Unsubscribe from this user"
-msgstr ""
-
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
 msgstr "Aboneliği sonlandır"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Kullanıcının profili yok."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Avatar"
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-msgid "User actions"
-msgstr ""
-
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Profil ayarları"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
@@ -6996,11 +4917,6 @@ msgstr ""
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-#, fuzzy
-msgid "User role"
-msgstr "Kullanıcının profili yok."
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -7012,70 +4928,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "birkaç saniye önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "yaklaşık bir dakika önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "yaklaşık %d dakika önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "yaklaşık bir saat önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "yaklaşık %d saat önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "yaklaşık bir gün önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "yaklaşık %d gün önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "yaklaşık bir ay önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "yaklaşık %d ay önce"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "yaklaşık bir yıl önce"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "Başlangıç sayfası adresi geçerli bir URL değil."
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index e425f6c621393768c8c5f427457b1ff014dcee13..618c419643d50f859f600e47113b8679be48769d 100644 (file)
@@ -11,12 +11,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:13:19+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:39+0000\n"
 "Language-Team: Ukrainian\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: uk\n"
 "X-Message-Group: out-statusnet\n"
@@ -94,6 +94,7 @@ msgstr "Зберегти"
 msgid "No such page."
 msgstr "Немає такої сторінки."
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -113,7 +114,7 @@ msgstr "Немає такої сторінки."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Такого користувача немає."
@@ -352,7 +353,8 @@ msgstr "Жодних статусів з таким ID."
 msgid "This status is already a favorite."
 msgstr "Цей статус вже є обраним."
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Не можна позначити як обране."
 
@@ -466,15 +468,19 @@ msgstr "Додаткове ім’я не може бути таким сами
 msgid "Group not found."
 msgstr "Групу не знайдено."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
 msgstr "Ви вже є учасником цієї групи."
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr "Адмін цієї групи заблокував Вашу присутність в ній."
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
 msgstr "Не вдалось долучити користувача %1$s до групи %2$s."
@@ -483,7 +489,10 @@ msgstr "Не вдалось долучити користувача %1$s до г
 msgid "You are not a member of this group."
 msgstr "Ви не є учасником цієї групи."
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
 msgstr "Не вдалось видалити користувача %1$s з групи %2$s."
@@ -645,11 +654,13 @@ msgstr "Ви не можете видалити статус іншого кор
 msgid "No such notice."
 msgstr "Такого допису немає."
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr "Не можу повторити Ваш власний допис."
 
-#: actions/apistatusesretweet.php:91
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
 msgstr "Цей допис вже повторено."
 
@@ -665,7 +676,7 @@ msgstr "Не знайдено жодних статусів з таким ID."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr "Клієнт мусить надати параметр «статус» зі значенням."
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
 #, php-format
 msgid "That's too long. Max notice size is %d chars."
@@ -675,7 +686,7 @@ msgstr "Надто довго. Максимальний розмір допис
 msgid "Not found."
 msgstr "Не знайдено."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -885,6 +896,8 @@ msgstr "Блокувати користувача"
 msgid "Failed to save block information."
 msgstr "Збереження інформації про блокування завершилось невдачею."
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -894,8 +907,8 @@ msgstr "Збереження інформації про блокування з
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "Такої групи немає."
 
@@ -2161,7 +2174,7 @@ msgstr "Ви вже підписані до цих користувачів:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2286,9 +2299,7 @@ msgstr "Ви повинні спочатку увійти на сайт, аби
 msgid "No nickname or ID."
 msgstr "Немає імені або ІД."
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr "%1$s приєднався до групи %2$s"
@@ -2297,13 +2308,12 @@ msgstr "%1$s приєднався до групи %2$s"
 msgid "You must be logged in to leave a group."
 msgstr "Ви повинні спочатку увійти на сайт, аби залишити групу."
 
-#: actions/leavegroup.php:100 lib/command.php:373
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
 msgstr "Ви не є учасником цієї групи."
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
+#: actions/leavegroup.php:137
 #, php-format
 msgid "%1$s left group %2$s"
 msgstr "%1$s залишив групу %2$s"
@@ -2418,12 +2428,15 @@ msgstr "Скористайтесь цією формою для створенн
 msgid "New message"
 msgstr "Нове повідомлення"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "Ви не можете надіслати повідомлення цьому користувачеві."
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Немає змісту!"
 
@@ -2431,7 +2444,8 @@ msgstr "Немає змісту!"
 msgid "No recipient specified."
 msgstr "Жодного отримувача не визначено."
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2441,12 +2455,14 @@ msgstr ""
 msgid "Message sent"
 msgstr "Повідомлення надіслано"
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr "Пряме повідомлення для %s надіслано."
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Помилка в Ajax"
 
@@ -2454,7 +2470,7 @@ msgstr "Помилка в Ajax"
 msgid "New notice"
 msgstr "Новий допис"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "Допис надіслано"
 
@@ -2584,8 +2600,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr "URL-адреса %s лише в простому HTTP, будь ласка."
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Такий формат даних не підтримується."
 
@@ -4009,7 +4025,7 @@ msgstr "Назва сайту"
 
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr "Назва Вашого сайту, щось на зразок «Мікроблоґи компанії ...»"
+msgstr "Назва сайту, щось на зразок «Мікроблоґи компанії...»"
 
 #: actions/siteadminpanel.php:229
 msgid "Brought by"
@@ -4063,7 +4079,7 @@ msgstr "Текстові обмеження"
 
 #: actions/siteadminpanel.php:274
 msgid "Maximum number of characters for notices."
-msgstr "Максимальна кількість знаків у дописі."
+msgstr "Максимальна кількість знаків у дописі (0 — необмежено)."
 
 #: actions/siteadminpanel.php:278
 msgid "Dupe limit"
@@ -4905,23 +4921,23 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr "Немає такого профілю (%1$d) для повідомлення (%2$d)."
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
+#: classes/Notice.php:193
 #, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "Помилка бази даних при додаванні хеш-теґу: %s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
 msgstr "Проблема при збереженні допису. Надто довге."
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
 msgstr "Проблема при збереженні допису. Невідомий користувач."
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
@@ -4929,7 +4945,7 @@ msgstr ""
 "повертайтесь за кілька хвилин."
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
@@ -4938,29 +4954,29 @@ msgstr ""
 "повертайтесь за кілька хвилин."
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr "Вам заборонено надсилати дописи до цього сайту."
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Проблема при збереженні допису."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr "Задається невірний тип для saveKnownGroups"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr "Проблема при збереженні вхідних дописів для групи."
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr "RT @%1$s %2$s"
@@ -5610,44 +5626,21 @@ msgstr "Команду виконано"
 msgid "Command failed"
 msgstr "Команду не виконано"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr "Такого допису не існує"
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "Користувач не має останнього допису"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Не вдалося знайти користувача з іменем %s"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Не вдалося знайти локального користувача з іменем %s"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "Даруйте, але виконання команди ще не завершено."
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr "Гадаємо, користі від «розштовхування» самого себе небагато, чи не так?!"
 
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, php-format
-msgid "Nudge sent to %s"
-msgstr "Спробу «розштовхати» %s зараховано"
-
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5658,55 +5651,39 @@ msgstr ""
 "Підписчики: %2$s\n"
 "Дописи: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr "Допис позначено як обраний."
 
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "Ви вже є учасником цієї групи."
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Не вдалось долучити користувача %1$s до групи %2$s."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Не вдалось видалити користувача %1$s з групи %2$s"
-
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "Повне ім’я: %s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "Розташування: %s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "Веб-сторінка: %s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "Про мене: %s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5717,148 +5694,106 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
-"Повідомлення надто довге — максимум становить %1$d символів, Ви надсилаєте %2"
-"$d"
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "Пряме повідомлення для %s надіслано."
+"Повідомлення надто довге — максимум %1$d символів, а Ви надсилаєте %2$d."
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "Помилка при відправці прямого повідомлення."
 
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr "Не можу повторити Ваш власний допис"
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
-msgstr "Цей допис вже повторили"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, php-format
-msgid "Notice from %s repeated"
-msgstr "Допис %s повторили"
-
-#: lib/command.php:531
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
 msgstr "Помилка при повторенні допису."
 
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Допис надто довгий — максимум %d знаків, а ви надсилаєте %d"
-
-#: lib/command.php:571
-#, php-format
-msgid "Reply to %s sent"
-msgstr "Відповідь до %s надіслано"
-
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "Проблема при збереженні допису."
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "Зазначте ім’я користувача, до якого бажаєте підписатись"
-
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr "Не можу підписатись до  профілю OMB за командою."
 
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "Підписано до %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "Зазначте ім’я користувача, від якого бажаєте відписатись"
-
-#: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "Відписано від %s"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "Виконання команди ще не завершено."
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
 msgstr "Сповіщення вимкнуто."
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr "Не можна вимкнути сповіщення."
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
 msgstr "Сповіщення увімкнуто."
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr "Не можна увімкнути сповіщення."
 
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr "Команду входу відключено"
-
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-"Це посилання можна використати лише раз, воно дійсне протягом 2 хвилин: %s"
-
-#: lib/command.php:761
-#, php-format
-msgid "Unsubscribed  %s"
-msgstr "Відписано %s"
-
-#: lib/command.php:778
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
 msgstr "Ви не маєте жодних підписок."
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Ви підписані до цієї особи:"
 msgstr[1] "Ви підписані до цих людей:"
 msgstr[2] "Ви підписані до цих людей:"
 
-#: lib/command.php:800
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
 msgstr "До Вас ніхто не підписаний."
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Ця особа є підписаною до Вас:"
 msgstr[1] "Ці люди підписані до Вас:"
 msgstr[2] "Ці люди підписані до Вас:"
 
-#: lib/command.php:822
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
 msgstr "Ви не є учасником жодної групи."
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Ви є учасником групи:"
 msgstr[1] "Ви є учасником таких груп:"
 msgstr[2] "Ви є учасником таких груп:"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5916,7 +5851,7 @@ msgstr ""
 "reply #<notice_id> — відповісти на допис\n"
 "reply <nickname> — відповісти на останній допис користувача\n"
 "join <group> — приєднатися до групи\n"
-"login â\80\94 Ð¾Ñ\82Ñ\80имаÑ\82и Ð¿Ð¾Ñ\81иланнÑ\8f Ð´Ð»Ñ\8f Ð²Ñ\85одÑ\83 Ñ\83 Ð²ÐµÐ±-Ñ\96нÑ\82еÑ\80Ñ\84ейÑ\81\n"
+"login â\80\94 Ð¾Ñ\82Ñ\80имаÑ\82и Ð¿Ð¾Ñ\81иланнÑ\8f Ð²Ñ\85одÑ\83 Ð´Ð¾ Ð²ÐµÐ±-Ñ\96нÑ\82еÑ\80Ñ\84ейÑ\81Ñ\83\n"
 "drop <group> — залишити групу\n"
 "stats — отримати статистику\n"
 "stop — те саме що і 'off'\n"
@@ -6519,7 +6454,7 @@ msgstr ""
 
 #: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr "від"
+msgstr "через"
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6605,11 +6540,11 @@ msgstr "Надіслати прямий допис"
 msgid "To"
 msgstr "До"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
 msgstr "Лишилось знаків"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr "Так!"
@@ -6618,28 +6553,28 @@ msgstr "Так!"
 msgid "Send a notice"
 msgstr "Надіслати допис"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Що нового, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr "Вкласти"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr "Вкласти файл"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
 msgstr "Показувати місцезнаходження."
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
 msgstr "Приховувати моє місцезнаходження"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6676,6 +6611,10 @@ msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 msgid "at"
 msgstr "в"
 
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "веб"
+
 #: lib/noticelist.php:568
 msgid "in context"
 msgstr "в контексті"
@@ -7019,11 +6958,6 @@ msgstr "Відписатись від цього користувача"
 msgid "Unsubscribe"
 msgstr "Відписатись"
 
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Користувач %s (%d) не має запису профілю."
-
 #: lib/userprofile.php:117
 msgid "Edit Avatar"
 msgstr "Аватара"
@@ -7071,56 +7005,56 @@ msgid "Moderator"
 msgstr "Модератор"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "мить тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "хвилину тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "близько %d хвилин тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "годину тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "близько %d годин тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "день тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "близько %d днів тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "місяць тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "близько %d місяців тому"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "рік тому"
 
@@ -7133,9 +7067,3 @@ msgstr "%s є неприпустимим кольором!"
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr "%s неприпустимий колір! Використайте 3 або 6 знаків (HEX-формат)"
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
-"Повідомлення надто довге — максимум %1$d символів, а Ви надсилаєте %2$d."
index c82d34e66351cf6c6d818b118e5a2579aebdd87c..143a5f83b1a752af115a281d8b77e519078c416b 100644 (file)
@@ -8,12 +8,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-07 16:23+0000\n"
-"PO-Revision-Date: 2010-08-07 16:25:06+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:41+0000\n"
 "Language-Team: Vietnamese\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70633); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: vi\n"
 "X-Message-Group: out-statusnet\n"
@@ -25,12 +25,6 @@ msgstr ""
 msgid "Access"
 msgstr "Truy cập"
 
-#. TRANS: Page notice
-#: actions/accessadminpanel.php:67
-#, fuzzy
-msgid "Site access settings"
-msgstr "Thay đổi hình đại diện"
-
 #. TRANS: Form legend for registration form.
 #: actions/accessadminpanel.php:161
 msgid "Registration"
@@ -52,12 +46,6 @@ msgstr "Riêng tư"
 msgid "Make registration invitation only."
 msgstr ""
 
-#. TRANS: Checkbox label for configuring site as invite only.
-#: actions/accessadminpanel.php:176
-#, fuzzy
-msgid "Invite only"
-msgstr "Thư mời"
-
 #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
 #: actions/accessadminpanel.php:183
 msgid "Disable new registrations."
@@ -68,12 +56,6 @@ msgstr ""
 msgid "Closed"
 msgstr "Đóng"
 
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-#, fuzzy
-msgid "Save access settings"
-msgstr "Thay đổi hình đại diện"
-
 #. TRANS: Button label to save e-mail preferences.
 #. TRANS: Button label to save IM preferences.
 #. TRANS: Button label to save SMS preferences.
@@ -85,13 +67,7 @@ msgctxt "BUTTON"
 msgid "Save"
 msgstr "Lưu"
 
-#. TRANS: Server error when page not found (404)
-#: actions/all.php:68 actions/public.php:98 actions/replies.php:93
-#: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
-msgid "No such page."
-msgstr "Không có tin nhắn nào."
-
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -111,17 +87,11 @@ msgstr "Không có tin nhắn nào."
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "Không có user nào."
 
-#. TRANS: Page title. %1$s is user nickname, %2$d is page number
-#: actions/all.php:90
-#, fuzzy, php-format
-msgid "%1$s and friends, page %2$d"
-msgstr "%s và bạn bè"
-
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
 #. TRANS: Message is used as link title. %s is a user nickname.
@@ -132,24 +102,6 @@ msgstr "%s và bạn bè"
 msgid "%s and friends"
 msgstr "%s và bạn bè"
 
-#. TRANS: %1$s is user nickname
-#: actions/all.php:107
-#, fuzzy, php-format
-msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "Chọn những người bạn của %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:116
-#, fuzzy, php-format
-msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "Chọn những người bạn của %s"
-
-#. TRANS: %1$s is user nickname
-#: actions/all.php:125
-#, fuzzy, php-format
-msgid "Feed for friends of %s (Atom)"
-msgstr "Chọn những người bạn của %s"
-
 #. TRANS: %1$s is user nickname
 #: actions/all.php:138
 #, php-format
@@ -184,40 +136,6 @@ msgstr ""
 msgid "You and friends"
 msgstr "Bạn và bạn bè"
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
-#: actions/allrss.php:121 actions/apitimelinefriends.php:216
-#: actions/apitimelinehome.php:122
-#, php-format
-msgid "Updates from %1$s and friends on %2$s!"
-msgstr ""
-
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "Phương thức API không tìm thấy!"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -238,11 +156,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "Không thể cập nhật thành viên."
-
 #: actions/apiaccountupdateprofile.php:112
 #: actions/apiaccountupdateprofilebackgroundimage.php:194
 #: actions/apiaccountupdateprofilecolors.php:185
@@ -253,11 +166,6 @@ msgstr "Không thể cập nhật thành viên."
 msgid "User has no profile."
 msgstr "Người dùng không có thông tin."
 
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "Không thể lưu hồ sơ cá nhân."
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -270,70 +178,30 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
-msgid "Unable to save your design settings."
-msgstr "Không thể lưu thông tin Twitter của bạn!"
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "Không thể cập nhật thành viên."
-
 #: actions/apiblockcreate.php:105
-#, fuzzy
 msgid "You cannot block yourself!"
-msgstr "Không thể cập nhật thành viên."
-
-#: actions/apiblockcreate.php:126
-msgid "Block user failed."
-msgstr ""
-
-#: actions/apiblockdestroy.php:114
-msgid "Unblock user failed."
 msgstr ""
 
 #: actions/apidirectmessage.php:89
-#, fuzzy, php-format
+#, php-format
 msgid "Direct messages from %s"
-msgstr "Tin nhắn riêng"
-
-#: actions/apidirectmessage.php:93
-#, fuzzy, php-format
-msgid "All the direct messages sent from %s"
 msgstr "Bạn có tin nhắn riêng từ %s"
 
 #: actions/apidirectmessage.php:101
-#, fuzzy, php-format
-msgid "Direct messages to %s"
-msgstr "Tin nhắn riêng"
-
-#: actions/apidirectmessage.php:105
 #, php-format
-msgid "All the direct messages sent to %s"
-msgstr ""
-
-#: actions/apidirectmessagenew.php:118
-#, fuzzy
-msgid "No message text!"
-msgstr "Không có tin nhắn nào."
+msgid "Direct messages to %s"
+msgstr "Bạn có tin nhắn riêng từ %s"
 
 #: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max message size is %d chars."
-msgstr "Quá dài. Tối đa là 140 ký tự."
+msgstr ""
+"Bạn có thể cập nhật hồ sơ cá nhân tại đây để mọi người có thể biết thông tin "
+"về bạn."
 
 #: actions/apidirectmessagenew.php:138
-#, fuzzy
 msgid "Recipient user not found."
-msgstr "Không tìm thấy user."
+msgstr "Không tìm thấy mã xác nhận."
 
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
@@ -344,58 +212,35 @@ msgstr ""
 msgid "No status found with that ID."
 msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
 
-#: actions/apifavoritecreate.php:120
-#, fuzzy
-msgid "This status is already a favorite."
-msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
-
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "Không thể tạo favorite."
 
 #: actions/apifavoritedestroy.php:123
-#, fuzzy
 msgid "That status is not a favorite."
-msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
-
-#: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
-#, fuzzy
-msgid "Could not delete favorite."
 msgstr "Không thể tạo favorite."
 
-#: actions/apifriendshipscreate.php:109
-#, fuzzy
-msgid "Could not follow user: profile not found."
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
 #: actions/apifriendshipscreate.php:118
 #, php-format
 msgid "Could not follow user: %s is already on your list."
 msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
 
-#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
-msgid "Could not unfollow user: User not found."
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
 #: actions/apifriendshipsdestroy.php:120
-#, fuzzy
 msgid "You cannot unfollow yourself."
-msgstr "Không thể cập nhật thành viên."
+msgstr ""
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "Không thể lấy lại các tin nhắn ưa thích"
+msgstr "Không thể cập nhật thành viên."
 
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "Không tìm thấy bất kỳ trạng thái nào."
+msgstr "Không thể cập nhật thành viên."
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
@@ -430,9 +275,9 @@ msgstr "Tên đầy đủ quá dài (tối đa là 255 ký tự)."
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "Lý lịch quá dài (không quá 140 ký tự)"
+msgstr "Tên khu vực quá dài (không quá %d ký tự)."
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -447,15 +292,9 @@ msgid "Too many aliases! Maximum %d."
 msgstr ""
 
 #: actions/apigroupcreate.php:267
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\"."
-msgstr "Trang chủ '%s'  không hợp lệ"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Biệt hiệu này đã dùng rồi. Hãy nhập biệt hiệu khác."
+msgstr "Địa chỉ email không đúng:%s"
 
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
@@ -468,68 +307,33 @@ msgstr ""
 msgid "Group not found."
 msgstr "Không tìm thấy nhóm."
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
-msgstr "Bạn đã theo những người này:"
+msgstr "Bạn chưa cập nhật thông tin riêng"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
 msgstr ""
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s."
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s."
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
-#. TRANS: %s is a user name
-#: actions/apigrouplist.php:98
-#, fuzzy, php-format
-msgid "%s's groups"
-msgstr "%s và nhóm"
-
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups %2$s is a member of."
-msgstr "Bạn chưa cập nhật thông tin riêng"
+msgstr ""
 
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
-#, fuzzy, php-format
+#, php-format
 msgid "%s groups"
-msgstr "%s và nhóm"
-
-#: actions/apigrouplistall.php:96
-#, fuzzy, php-format
-msgid "groups on %s"
-msgstr "Mã nhóm"
-
-#: actions/apimediaupload.php:99
-#, fuzzy
-msgid "Upload failed."
-msgstr "Tải file"
+msgstr "Hộp thư đi của %s"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "Kích thước không hợp lệ."
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -548,21 +352,6 @@ msgstr "Kích thước không hợp lệ."
 msgid "There was a problem with your session token. Try again, please."
 msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "Tên đăng nhập hoặc mật khẩu không hợp lệ."
-
-#: actions/apioauthauthorize.php:159
-#, fuzzy
-msgid "Database error deleting OAuth application user."
-msgstr "Lỗi xảy ra khi tạo thành viên."
-
-#: actions/apioauthauthorize.php:185
-#, fuzzy
-msgid "Database error inserting OAuth application user."
-msgstr "Lỗi cơ sở dữ liệu khi chèn trả lời: %s"
-
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
@@ -647,20 +436,15 @@ msgstr "Bạn đã không xóa trạng thái của những người khác."
 msgid "No such notice."
 msgstr "Không có tin nhắn nào."
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
-msgstr "Bạn không thể đăng ký nếu không đồng ý các điều khoản."
+msgstr "Không thể xóa tin nhắn này."
 
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "Xóa tin nhắn"
-
-#: actions/apistatusesshow.php:139
-#, fuzzy
-msgid "Status deleted."
-msgstr "Hình đại diện đã được cập nhật."
+msgstr "Không thể xóa tin nhắn này."
 
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
@@ -670,84 +454,47 @@ msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, fuzzy, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr "Quá dài. Tối đa là 140 ký tự."
-
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
 msgstr "Không tìm thấy."
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
 
-#: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
-msgid "Unsupported format."
-msgstr "Không hỗ trợ kiểu file ảnh này."
-
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
-msgstr "Tìm kiếm các tin nhắn ưa thích của %s"
+msgstr "Trạng thái của %1$s vào %2$s"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "Tất cả các cập nhật của %s"
+msgstr "Dòng tin nhắn cho %s"
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Các cập nhật đang trả lời tới %2$s"
-
-#: actions/apitimelinementions.php:131
 #, php-format
-msgid "%1$s updates that reply to updates from %2$s / %3$s."
-msgstr ""
-
-#: actions/apitimelinepublic.php:197 actions/publicrss.php:103
-#, fuzzy, php-format
-msgid "%s public timeline"
-msgstr "Dòng tin công cộng"
+msgid "%1$s / Updates mentioning %2$s"
+msgstr "Trạng thái của %1$s vào %2$s"
 
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
 msgstr "%s cập nhật từ tất cả mọi người!"
 
-#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
-msgid "Repeated to %s"
-msgstr "Trả lời cho %s"
-
-#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
-msgid "Repeats of %s"
-msgstr "Trả lời cho %s"
-
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
 msgstr "Thông báo được gắn thẻ %s"
 
-#: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
-msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Dòng tin nhắn cho %s"
-
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "Phương thức API dưới cấu trúc có sẵn."
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "Không có tài liệu nào."
+msgstr "Không có tin nhắn nào."
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -770,19 +517,11 @@ msgstr "Kích thước không hợp lệ."
 msgid "Avatar"
 msgstr "Hình đại diện"
 
-#: actions/avatarsettings.php:78
-#, fuzzy, php-format
-msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr ""
-"Bạn có thể cập nhật hồ sơ cá nhân tại đây để mọi người có thể biết thông tin "
-"về bạn."
-
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
+msgstr "Người dùng không có thông tin."
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
@@ -800,7 +539,7 @@ msgid "Preview"
 msgstr "Xem trước"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:656
+#: lib/deleteuserform.php:66 lib/noticelist.php:657
 msgid "Delete"
 msgstr "Xóa"
 
@@ -808,16 +547,6 @@ msgstr "Xóa"
 msgid "Upload"
 msgstr "Tải file"
 
-#: actions/avatarsettings.php:231 actions/grouplogo.php:289
-#, fuzzy
-msgid "Crop"
-msgstr "Nhóm"
-
-#: actions/avatarsettings.php:305
-#, fuzzy
-msgid "No file uploaded."
-msgstr "Upload từng phần."
-
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
@@ -834,16 +563,6 @@ msgstr "Hình đại diện đã được cập nhật."
 msgid "Failed updating avatar."
 msgstr "Cập nhật hình đại diện không thành công."
 
-#: actions/avatarsettings.php:397
-#, fuzzy
-msgid "Avatar deleted."
-msgstr "Hình đại diện đã được cập nhật."
-
-#: actions/block.php:69
-#, fuzzy
-msgid "You already blocked that user."
-msgstr "Bạn đã theo những người này:"
-
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
 msgid "Block user"
 msgstr "Chặn người dùng"
@@ -863,41 +582,21 @@ msgstr ""
 #: actions/block.php:153 actions/deleteapplication.php:154
 #: actions/deletenotice.php:147 actions/deleteuser.php:152
 #: actions/groupblock.php:178
-#, fuzzy
 msgctxt "BUTTON"
 msgid "No"
-msgstr "Không"
-
-#. TRANS: Submit button title for 'No' when blocking a user.
-#. TRANS: Submit button title for 'No' when deleting a user.
-#: actions/block.php:157 actions/deleteuser.php:156
-#, fuzzy
-msgid "Do not block this user"
-msgstr "Bỏ chặn người dùng này"
-
-#. TRANS: Button label on the user block form.
-#. TRANS: Button label on the delete application form.
-#. TRANS: Button label on the delete notice form.
-#. TRANS: Button label on the delete user form.
-#. TRANS: Button label on the form to block a user from a group.
-#: actions/block.php:160 actions/deleteapplication.php:161
-#: actions/deletenotice.php:154 actions/deleteuser.php:159
-#: actions/groupblock.php:185
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Yes"
-msgstr "Có"
+msgstr ""
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-#, fuzzy
 msgid "Block this user"
-msgstr "Ban user"
+msgstr "Bỏ chặn người dùng này"
 
 #: actions/block.php:187
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -907,31 +606,20 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
-msgstr "Không có tin nhắn nào."
-
-#: actions/blockedfromgroup.php:97
-#, fuzzy, php-format
-msgid "%s blocked profiles"
-msgstr "Hồ sơ"
+msgstr "Không có user nào."
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s và bạn bè"
+msgstr ""
 
 #: actions/blockedfromgroup.php:115
 msgid "A list of the users blocked from joining this group."
 msgstr ""
 
-#: actions/blockedfromgroup.php:288
-#, fuzzy
-msgid "Unblock user from group"
-msgstr "Bỏ chặn người dùng này"
-
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
 msgstr "Bỏ chặn"
@@ -942,9 +630,9 @@ msgstr "Bỏ chặn người dùng này"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "Mã nhóm"
+msgstr "Trả lời cho %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -960,9 +648,9 @@ msgstr "Mã xác nhận này không phải của bạn!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Unrecognized address type %s."
-msgstr "Không nhận dạng kiểu địa chỉ %s"
+msgstr ""
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -991,9 +679,8 @@ msgid "Couldn't delete email confirmation."
 msgstr "Không thể xóa email xác nhận."
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "Xác nhận địa chỉ"
+msgstr "Đã xác nhận địa chỉ này."
 
 #: actions/confirmaddress.php:161
 #, php-format
@@ -1001,42 +688,17 @@ msgid "The address \"%s\" has been confirmed for your account."
 msgstr "Địa chỉ \"%s\" đã được xác nhận từ tài khoản của bạn."
 
 #: actions/conversation.php:99
-#, fuzzy
 msgid "Conversation"
-msgstr "Không có mã số xác nhận."
+msgstr "Thành phố"
 
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
 msgstr "Tin nhắn"
 
-#: actions/deleteapplication.php:63
-#, fuzzy
-msgid "You must be logged in to delete an application."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "Tin nhắn không có hồ sơ cá nhân"
-
-#: actions/deleteapplication.php:78 actions/editapplication.php:77
-#: actions/showapplication.php:94
-#, fuzzy
-msgid "You are not the owner of this application."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#: actions/deleteapplication.php:102 actions/editapplication.php:127
-#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1263
-#, fuzzy
-msgid "There was a problem with your session token."
-msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
-
-#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
-msgid "Delete application"
-msgstr "Không có tin nhắn nào."
+msgstr "Không tìm thấy mã xác nhận."
 
 #: actions/deleteapplication.php:149
 msgid ""
@@ -1045,18 +707,6 @@ msgid ""
 "connections."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting an application.
-#: actions/deleteapplication.php:158
-#, fuzzy
-msgid "Do not delete this application"
-msgstr "Không thể xóa tin nhắn này."
-
-#. TRANS: Submit button title for 'Yes' when deleting an application.
-#: actions/deleteapplication.php:164
-#, fuzzy
-msgid "Delete this application"
-msgstr "Xóa tin nhắn"
-
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
 #: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -1073,11 +723,10 @@ msgid "Can't delete this notice."
 msgstr "Không thể xóa tin nhắn này."
 
 #: actions/deletenotice.php:103
-#, fuzzy
 msgid ""
 "You are about to permanently delete a notice. Once this is done, it cannot "
 "be undone."
-msgstr "Bạn muốn xóa tin nhắn này? Sau khi xóa, bạn không thể lấy lại được."
+msgstr ""
 
 #: actions/deletenotice.php:109 actions/deletenotice.php:141
 msgid "Delete notice"
@@ -1087,32 +736,9 @@ msgstr "Xóa tin nhắn"
 msgid "Are you sure you want to delete this notice?"
 msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?"
 
-#. TRANS: Submit button title for 'No' when deleting a notice.
-#: actions/deletenotice.php:151
-#, fuzzy
-msgid "Do not delete this notice"
-msgstr "Không thể xóa tin nhắn này."
-
-#. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:656
-#, fuzzy
-msgid "Delete this notice"
-msgstr "Xóa tin nhắn"
-
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "Không thể cập nhật thành viên."
-
-#: actions/deleteuser.php:74
-#, fuzzy
-msgid "You can only delete local users."
-msgstr "Bạn đã không xóa trạng thái của những người khác."
-
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
 msgid "Delete user"
-msgstr "Xóa tin nhắn"
+msgstr "Xóa"
 
 #: actions/deleteuser.php:136
 msgid ""
@@ -1120,12 +746,6 @@ msgid ""
 "the user from the database, without a backup."
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when deleting a user.
-#: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
-msgid "Delete this user"
-msgstr "Xóa tin nhắn"
-
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
@@ -1137,68 +757,35 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "Kích thước không hợp lệ."
-
 #: actions/designadminpanel.php:322
-#, fuzzy, php-format
+#, php-format
 msgid "Theme not available: %s."
-msgstr "Trang này không phải là phương tiện truyền thông mà bạn chấp nhận."
+msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "Thay đổi mật khẩu của bạn"
-
-#: actions/designadminpanel.php:431
-#, fuzzy
-msgid "Site logo"
-msgstr "Thư mời"
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
 msgstr "Thay đổi"
 
-#: actions/designadminpanel.php:460
-#, fuzzy
-msgid "Site theme"
-msgstr "Thông báo mới"
-
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
 msgstr ""
 
 #: actions/designadminpanel.php:467
-#, fuzzy
 msgid "Custom theme"
-msgstr "Thông báo mới"
+msgstr ""
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
 msgstr ""
 
 #: actions/designadminpanel.php:486 lib/designsettings.php:101
-#, fuzzy
 msgid "Change background image"
-msgstr "Background Theme:"
+msgstr ""
 
 #: actions/designadminpanel.php:491 actions/designadminpanel.php:574
 #: lib/designsettings.php:178
-#, fuzzy
 msgid "Background"
-msgstr "Background Theme:"
-
-#: actions/designadminpanel.php:496
-#, fuzzy, php-format
-msgid ""
-"You can upload a background image for the site. The maximum file size is %1"
-"$s."
 msgstr ""
-"Bạn có thể cập nhật hồ sơ cá nhân tại đây để mọi người có thể biết thông tin "
-"về bạn."
 
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
@@ -1215,34 +802,13 @@ msgid "Turn background image on or off."
 msgstr ""
 
 #: actions/designadminpanel.php:550 lib/designsettings.php:161
-#, fuzzy
 msgid "Tile background image"
-msgstr "Background Theme:"
-
-#: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
-msgid "Change colours"
-msgstr "Thay đổi mật khẩu của bạn"
-
-#: actions/designadminpanel.php:587 lib/designsettings.php:191
-#, fuzzy
-msgid "Content"
-msgstr "Kết nối"
-
-#: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
-msgid "Sidebar"
-msgstr "Tìm kiếm"
+msgstr ""
 
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
 msgstr "Chuỗi bất kỳ"
 
-#: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
-msgid "Links"
-msgstr "Đăng nhập"
-
 #: actions/designadminpanel.php:651
 msgid "Advanced"
 msgstr ""
@@ -1275,83 +841,30 @@ msgid "Save"
 msgstr "Lưu"
 
 #: actions/designadminpanel.php:686 lib/designsettings.php:257
-#, fuzzy
 msgid "Save design"
-msgstr "Lưu"
-
-#: actions/disfavor.php:81
-#, fuzzy
-msgid "This notice is not a favorite!"
-msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
+msgstr ""
 
 #: actions/disfavor.php:94
-#, fuzzy
 msgid "Add to favorites"
-msgstr "Tìm kiếm các tin nhắn ưa thích của %s"
+msgstr "Ưa thích"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "Không có tài liệu nào."
+msgstr "Không có tin nhắn nào."
 
 #: actions/editapplication.php:54
-#, fuzzy
 msgid "Edit Application"
-msgstr "Tin nhắn không có hồ sơ cá nhân"
-
-#: actions/editapplication.php:66
-#, fuzzy
-msgid "You must be logged in to edit an application."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
-#: actions/showapplication.php:87
-#, fuzzy
-msgid "No such application."
-msgstr "Không có tin nhắn nào."
-
-#: actions/editapplication.php:161
-msgid "Use this form to edit your application."
 msgstr ""
 
-#: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
-msgid "Name is required."
-msgstr "Cùng mật khẩu ở trên. Bắt buộc."
-
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "Tên đầy đủ quá dài (tối đa là 255 ký tự)."
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "Biệt hiệu này đã dùng rồi. Hãy nhập biệt hiệu khác."
-
-#: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
-msgid "Description is required."
-msgstr "Mô tả"
-
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "Trang chủ không phải là URL"
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr ""
 
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "Tên khu vực quá dài (không quá 255 ký tự)."
-
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
 msgstr ""
@@ -1364,62 +877,29 @@ msgstr ""
 msgid "Callback URL is not valid."
 msgstr ""
 
-#: actions/editapplication.php:258
-#, fuzzy
-msgid "Could not update application."
-msgstr "Không thể cập nhật thành viên."
-
 #: actions/editgroup.php:56
-#, fuzzy, php-format
+#, php-format
 msgid "Edit %s group"
-msgstr "%s và nhóm"
-
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-#, fuzzy
-msgid "You must be logged in to create a group."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/editgroup.php:107 actions/editgroup.php:172
-#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
-msgid "You must be an admin to edit the group."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
+msgstr "Hộp thư đi của %s"
 
 #: actions/editgroup.php:158
 msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "Lý lịch quá dài (không quá 140 ký tự)"
+msgstr "Tên khu vực quá dài (không quá 255 ký tự)."
 
 #: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\""
-msgstr "Trang chủ '%s'  không hợp lệ"
-
-#: actions/editgroup.php:258
-#, fuzzy
-msgid "Could not update group."
-msgstr "Không thể cập nhật thành viên."
-
-#. TRANS: Server exception thrown when creating group aliases failed.
-#: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
-msgid "Could not create aliases."
-msgstr "Không thể tạo favorite."
-
-#: actions/editgroup.php:280
-#, fuzzy
-msgid "Options saved."
-msgstr "Đã lưu các điều chỉnh."
+msgstr "Địa chỉ email không đúng:%s"
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "Thiết lập địa chỉ email"
+msgstr "Các thiết lập cho Hồ sơ cá nhân"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1428,13 +908,6 @@ msgstr "Thiết lập địa chỉ email"
 msgid "Manage how you get email from %%site.name%%."
 msgstr "Bạn nhận email từ %%site.name%% như thế nào."
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "Địa chỉ email"
-
 #. TRANS: Form note in e-mail settings form.
 #: actions/emailsettings.php:112
 msgid "Current confirmed email address."
@@ -1448,10 +921,9 @@ msgstr "Đã xác nhận địa chỉ này."
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "Xóa"
+msgstr "Khôi phục"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1461,37 +933,18 @@ msgstr ""
 "Đang đợi xác nhận đến địa chỉ này. Hãy kiểm tra hộp thư đến (hoặc thư rác) "
 "để nhận tin nhắn và lời hướng dẫn."
 
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "Hủy"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
-#, fuzzy
 msgid "Email address, like \"UserName@example.org\""
-msgstr "Địa chỉ email GTalk, Ví dụ: \"UserName@example.org\""
+msgstr ""
 
 #. TRANS: Button label for adding an e-mail address in e-mail settings form.
 #. TRANS: Button label for adding an IM address in IM settings form.
 #. TRANS: Button label for adding a SMS phone number in SMS settings form.
 #: actions/emailsettings.php:139 actions/imsettings.php:148
 #: actions/smssettings.php:162
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Add"
-msgstr "Thêm"
-
-#. TRANS: Form legend for incoming e-mail settings form.
-#. TRANS: Form legend for incoming SMS settings form.
-#: actions/emailsettings.php:147 actions/smssettings.php:171
-msgid "Incoming email"
 msgstr ""
 
 #. TRANS: Form instructions for incoming e-mail form in e-mail settings.
@@ -1509,16 +962,14 @@ msgstr "Tạo một địa chỉ email mới để đưa tin nhắn lên; và x
 #. TRANS: Button label for adding an e-mail address to send notices from.
 #. TRANS: Button label for adding an SMS e-mail address to send notices from.
 #: actions/emailsettings.php:168 actions/smssettings.php:189
-#, fuzzy
 msgctxt "BUTTON"
 msgid "New"
-msgstr "Mới"
+msgstr ""
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "Tính năng"
+msgstr "Địa chỉ email"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
@@ -1537,12 +988,6 @@ msgstr ""
 msgid "Send me email when someone sends me a private message."
 msgstr "Gửi email báo cho tôi biết khi có ai đó gửi tin nhắn riêng cho tôi."
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:199
-#, fuzzy
-msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Gửi email báo cho tôi biết khi có ai đó gửi tin nhắn riêng cho tôi."
-
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
@@ -1558,12 +1003,6 @@ msgstr "Tôi muốn đưa tin nhắn lên bằng email."
 msgid "Publish a MicroID for my email address."
 msgstr "Xuất bản một MicroID đến địa chỉ email của tôi."
 
-#. TRANS: Confirmation message for successful e-mail preferences save.
-#: actions/emailsettings.php:334
-#, fuzzy
-msgid "Email preferences saved."
-msgstr "Các tính năng đã được lưu."
-
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
 msgid "No email address."
@@ -1571,9 +1010,8 @@ msgstr "Không có địa chỉ email."
 
 #. TRANS: Message given saving e-mail address that cannot be normalised.
 #: actions/emailsettings.php:361
-#, fuzzy
 msgid "Cannot normalize that email address"
-msgstr "Không thể bình thường hóa địa chỉ GTalk này"
+msgstr "Không thể bình thường hóa Jabber ID"
 
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
@@ -1583,15 +1021,13 @@ msgstr "Địa chỉ email không hợp lệ."
 
 #. TRANS: Message given saving e-mail address that is already set.
 #: actions/emailsettings.php:370
-#, fuzzy
 msgid "That is already your email address."
-msgstr "Bạn đã dùng địa chỉ email này rồi"
+msgstr "Tài khoản đó đã là tên tài khoản Jabber của bạn rồi."
 
 #. TRANS: Message given saving e-mail address that is already set for another user.
 #: actions/emailsettings.php:374
-#, fuzzy
 msgid "That email address already belongs to another user."
-msgstr "Địa chỉ email GTalk này đã có người khác sử dụng rồi."
+msgstr "Jabber ID này đã thuộc về người khác rồi."
 
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
@@ -1618,80 +1054,42 @@ msgstr ""
 msgid "No pending confirmation to cancel."
 msgstr "Sự xác nhận chưa được hủy bỏ."
 
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "Sai IM."
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "Sự xác nhận đã bị hủy bỏ."
-
-#. TRANS: Message given trying to remove an e-mail address that is not
-#. TRANS: registered for the active user.
-#: actions/emailsettings.php:458
-#, fuzzy
-msgid "That is not your email address."
-msgstr "Xin lỗi, đó không phải là địa chỉ email mà bạn nhập vào."
+msgstr "Sự xác nhận chưa được hủy bỏ."
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "Đã xóa địa chỉ."
+msgstr "Không có địa chỉ email."
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
-#, fuzzy
 msgid "No incoming email address."
-msgstr "Địa chỉ email không hợp lệ."
-
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-#, fuzzy
-msgid "Couldn't update user record."
-msgstr "Không thể cập nhật thành viên."
+msgstr "Không có địa chỉ email."
 
 #. TRANS: Message given after successfully removing an incoming e-mail address.
 #: actions/emailsettings.php:508 actions/smssettings.php:581
-#, fuzzy
 msgid "Incoming email address removed."
-msgstr "Địa chỉ email hoặc mật khẩu không đúng."
+msgstr "Không có địa chỉ email."
 
 #. TRANS: Message given after successfully adding an incoming e-mail address.
 #: actions/emailsettings.php:532 actions/smssettings.php:605
-#, fuzzy
 msgid "New incoming email address added."
-msgstr "Đã xác nhận địa chỉ này."
+msgstr "Không có địa chỉ email."
 
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
 
-#: actions/favor.php:92 lib/disfavorform.php:140
-#, fuzzy
-msgid "Disfavor favorite"
-msgstr "Không thích"
-
 #: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
-#, fuzzy
 msgid "Popular notices"
-msgstr "Các tin nhắn bị cảnh báo"
-
-#: actions/favorited.php:67
-#, fuzzy, php-format
-msgid "Popular notices, page %d"
-msgstr "Các tin nhắn bị cảnh báo"
+msgstr "Không có tin nhắn nào."
 
 #: actions/favorited.php:79
-#, fuzzy
 msgid "The most popular notices on the site right now."
-msgstr "Các từ khóa phổ biến."
+msgstr ""
 
 #: actions/favorited.php:150
 msgid "Favorite notices appear on this page but no one has favorited one yet."
@@ -1721,11 +1119,6 @@ msgstr "Những tin nhắn ưa thích của %s"
 msgid "Updates favored by %1$s on %2$s!"
 msgstr "Dòng tin nhắn cho %s"
 
-#: actions/featured.php:69 lib/featureduserssection.php:87
-#: lib/publicgroupnav.php:89
-msgid "Featured users"
-msgstr ""
-
 #: actions/featured.php:71
 #, php-format
 msgid "Featured users, page %d"
@@ -1737,33 +1130,20 @@ msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "Thông báo mới"
+msgstr "Không có tin nhắn nào."
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "Thông báo mới"
-
-#: actions/file.php:42
-#, fuzzy
-msgid "No attachments."
-msgstr "Không có tài liệu nào."
-
-#: actions/file.php:51
-#, fuzzy
-msgid "No uploaded attachments."
-msgstr "Không có tài liệu nào."
+msgstr "Không có tin nhắn nào."
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
 msgstr "Không mong đợi trả lời lại!"
 
 #: actions/finishremotesubscribe.php:80
-#, fuzzy
 msgid "User being listened to does not exist."
-msgstr "Người dùng đang lắng nghe để không thoát khỏi."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
@@ -1774,67 +1154,25 @@ msgid "That user has blocked you from subscribing."
 msgstr ""
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "Chưa được phép."
+msgstr "Đăng nhận được phép"
 
 #: actions/finishremotesubscribe.php:113
-#, fuzzy
 msgid "Could not convert request token to access token."
-msgstr "Không thể chuyển các token yêu cầu đến token truy cập."
+msgstr ""
 
 #: actions/finishremotesubscribe.php:118
-#, fuzzy
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Không biết phiên bản của giao thức OMB."
-
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "Lỗi xảy ra khi cập nhật hồ sơ cá nhân"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "Không có tin nhắn nào."
+msgstr ""
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "Không có tin nhắn nào."
-
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "Kích thước không hợp lệ."
+msgstr "Không thể tạo favorite."
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
-#: actions/grantrole.php:75
-#, fuzzy
-msgid "You cannot grant user roles on this site."
-msgstr "Bạn đã theo những người này:"
-
-#: actions/grantrole.php:82
-#, fuzzy
-msgid "User already has this role."
-msgstr "Người dùng không có thông tin."
-
-#: actions/groupblock.php:71 actions/groupunblock.php:71
-#: actions/makeadmin.php:71 actions/subedit.php:46
-#: lib/profileformaction.php:79
-msgid "No profile specified."
-msgstr ""
-
-#: actions/groupblock.php:76 actions/groupunblock.php:76
-#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
-#: actions/unsubscribe.php:84 lib/profileformaction.php:86
-#, fuzzy
-msgid "No profile with that ID."
-msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
-
 #: actions/groupblock.php:81 actions/groupunblock.php:81
 #: actions/makeadmin.php:81
 msgid "No group specified."
@@ -1845,19 +1183,12 @@ msgid "Only an admin can block group members."
 msgstr ""
 
 #: actions/groupblock.php:95
-#, fuzzy
 msgid "User is already blocked from group."
-msgstr "Người dùng không có thông tin."
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "Bạn chưa cập nhật thông tin riêng"
+msgstr ""
 
 #: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
 msgid "Block user from group"
-msgstr "Ban user"
+msgstr "Chặn người dùng"
 
 #: actions/groupblock.php:160
 #, php-format
@@ -1867,36 +1198,9 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-#, fuzzy
-msgid "Do not block this user from this group"
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
-#. TRANS: Submit button title for 'Yes' when blocking a user from a group.
-#: actions/groupblock.php:189
-#, fuzzy
-msgid "Block this user from this group"
-msgstr "Ban user"
-
-#: actions/groupblock.php:206
-msgid "Database error blocking user from group."
-msgstr ""
-
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "Không có id."
-
-#: actions/groupdesignsettings.php:68
-#, fuzzy
-msgid "You must be logged in to edit a group."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/groupdesignsettings.php:144
-#, fuzzy
-msgid "Group design"
-msgstr "Nhóm"
+msgstr "Không có Jabber ID."
 
 #: actions/groupdesignsettings.php:155
 msgid ""
@@ -1904,51 +1208,18 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "Không thể cập nhật thành viên."
-
-#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
-msgid "Design preferences saved."
-msgstr "Các tính năng đã được lưu."
-
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
-#, fuzzy
 msgid "Group logo"
-msgstr "Mã nhóm"
-
-#: actions/grouplogo.php:153
-#, php-format
-msgid ""
-"You can upload a logo image for your group. The maximum file size is %s."
-msgstr ""
+msgstr "Nhóm"
 
 #: actions/grouplogo.php:365
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "Hình đại diện đã được cập nhật."
-
-#: actions/grouplogo.php:401
-#, fuzzy
-msgid "Failed updating logo."
-msgstr "Cập nhật hình đại diện không thành công."
-
-#: actions/groupmembers.php:100 lib/groupnav.php:92
-#, fuzzy, php-format
-msgid "%s group members"
-msgstr "Thành viên"
-
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "Thành viên"
+msgstr ""
 
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
@@ -1958,49 +1229,31 @@ msgstr ""
 msgid "Admin"
 msgstr ""
 
-#: actions/groupmembers.php:392 lib/blockform.php:69
-msgid "Block"
-msgstr ""
-
 #: actions/groupmembers.php:487
-#, fuzzy
 msgid "Make user an admin of the group"
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
+msgstr ""
 
 #: actions/groupmembers.php:519
 msgid "Make Admin"
 msgstr ""
 
 #: actions/groupmembers.php:519
-#, fuzzy
 msgid "Make this user an admin"
-msgstr "Kênh mà bạn tham gia"
+msgstr ""
 
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
 #. TRANS: Title in atom user notice feed. %s is a user name.
 #: actions/grouprss.php:139 actions/userrss.php:94
 #: lib/atomgroupnoticefeed.php:63 lib/atomusernoticefeed.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "%s timeline"
-msgstr "Dòng tin nhắn của %s"
-
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#: actions/grouprss.php:142
-#, fuzzy, php-format
-msgid "Updates from members of %1$s on %2$s!"
-msgstr "Dòng tin nhắn cho %s"
-
-#: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
-#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
-#, fuzzy
-msgid "Groups"
-msgstr "Nhóm"
+msgstr "Dòng tin công cộng"
 
 #: actions/groups.php:64
-#, fuzzy, php-format
+#, php-format
 msgid "Groups, page %d"
-msgstr "Tên nhóm"
+msgstr ""
 
 #: actions/groups.php:90
 #, php-format
@@ -2013,29 +1266,13 @@ msgid ""
 msgstr ""
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "Tạo nhóm"
-
-#: actions/groupsearch.php:52
-#, fuzzy, php-format
-msgid ""
-"Search for groups on %%site.name%% by their name, location, or description. "
-"Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"Tìm kiếm những người trên %%site.name%% bằng tên, vị trí, hoặc sở thích của "
-"họ. Chia các cụm từ bởi khoảng trắng; và phải là 3 ký tự trở lên."
-
-#: actions/groupsearch.php:58
-#, fuzzy
-msgid "Group search"
-msgstr "Tìm kiếm nhiều người"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "Không có kết quả nào"
+msgstr ""
 
 #: actions/groupsearch.php:82
 #, php-format
@@ -2055,21 +1292,10 @@ msgstr ""
 msgid "Only an admin can unblock group members."
 msgstr ""
 
-#: actions/groupunblock.php:95
-#, fuzzy
-msgid "User is not blocked from group."
-msgstr "Người dùng không có thông tin."
-
-#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
-msgid "Error removing the block."
-msgstr "Lỗi xảy ra khi lưu thành viên."
-
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "Cấu hình IM"
+msgstr "Thay đổi hình đại diện"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2085,16 +1311,14 @@ msgstr ""
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
-#, fuzzy
 msgid "IM is not available."
-msgstr "Trang này không phải là phương tiện truyền thông mà bạn chấp nhận."
+msgstr ""
 
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "IM"
+msgstr "Địa chỉ email"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2124,9 +1348,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "Tính năng"
+msgstr "Các tính năng đã được lưu."
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2196,17 +1419,10 @@ msgstr ""
 msgid "That is the wrong IM address."
 msgstr "Sai IM."
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "Không thể xóa email xác nhận."
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "Sự xác nhận đã bị hủy bỏ."
+msgstr "Không có mã số xác nhận."
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2214,17 +1430,6 @@ msgstr "Sự xác nhận đã bị hủy bỏ."
 msgid "That is not your Jabber ID."
 msgstr "Đây không phải Jabber ID của bạn."
 
-#. TRANS: Message given after successfully removing a registered IM address.
-#: actions/imsettings.php:447
-#, fuzzy
-msgid "The IM address was removed."
-msgstr "Đã xóa địa chỉ."
-
-#: actions/inbox.php:59
-#, fuzzy, php-format
-msgid "Inbox for %1$s - page %2$d"
-msgstr "Hộp thư đến của %s"
-
 #: actions/inbox.php:62
 #, php-format
 msgid "Inbox for %s"
@@ -2239,9 +1444,9 @@ msgid "Invites have been disabled."
 msgstr ""
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
+msgstr "Bạn đã không xóa trạng thái của những người khác."
 
 #: actions/invite.php:72
 #, php-format
@@ -2262,10 +1467,10 @@ msgstr "Bạn đã theo những người này:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
-#, fuzzy, php-format
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
+#, php-format
 msgid "%1$s (%2$s)"
-msgstr "%s (%s)"
+msgstr "%1$s (%2$s)"
 
 #: actions/invite.php:136
 msgid ""
@@ -2312,10 +1517,9 @@ msgstr "Không bắt buộc phải thêm thông điệp vào thư mời."
 
 #. TRANS: Send button for inviting friends
 #: actions/invite.php:198
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Send"
-msgstr "Gửi"
+msgstr ""
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2381,39 +1585,10 @@ msgstr ""
 "\n"
 "Thân, %2$s\n"
 
-#: actions/joingroup.php:60
-#, fuzzy
-msgid "You must be logged in to join a group."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "Không có biệt hiệu."
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
-#, fuzzy, php-format
-msgid "%1$s joined group %2$s"
-msgstr "%s và nhóm"
-
-#: actions/leavegroup.php:60
-#, fuzzy
-msgid "You must be logged in to leave a group."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
-msgid "You are not a member of that group."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%s và nhóm"
+msgstr "Trạng thái của %1$s vào %2$s"
 
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
@@ -2423,11 +1598,6 @@ msgstr "Đã đăng nhập."
 msgid "Incorrect username or password."
 msgstr "Sai tên đăng nhập hoặc mật khẩu."
 
-#: actions/login.php:154 actions/otp.php:120
-#, fuzzy
-msgid "Error setting user. You are probably not authorized."
-msgstr "Chưa được phép."
-
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
 msgstr "Đăng nhập"
@@ -2456,53 +1626,29 @@ msgstr ""
 "Vì lý do bảo mật, bạn hãy nhập lại tên đăng nhập và mật khẩu trước khi thay "
 "đổi trong điều chỉnh."
 
-#: actions/login.php:292
-#, fuzzy
-msgid "Login with your username and password."
-msgstr "Sai tên đăng nhập hoặc mật khẩu."
-
 #: actions/login.php:295
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
 msgstr ""
-"Hãy đăng nhập với tên đăng nhập và mật khẩu của bạn. Nếu bạn chưa có tài "
-"khoản, [hãy đăng ký](%%action.register%%) tài khoản mới, hoặc thử đăng nhập "
-"bằng [OpenID](%%action.openidlogin%%). "
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
 msgstr ""
 
-#: actions/makeadmin.php:96
-#, fuzzy, php-format
-msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "Người dùng không có thông tin."
-
 #: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
+msgstr ""
 
 #: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
 msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
+msgstr ""
 
 #: actions/microsummary.php:69
-#, fuzzy
 msgid "No current status."
-msgstr "Không có kết quả nào"
-
-#: actions/newapplication.php:52
-#, fuzzy
-msgid "New Application"
-msgstr "Không có tin nhắn nào."
-
-#: actions/newapplication.php:64
-#, fuzzy
-msgid "You must be logged in to register an application."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
+msgstr ""
 
 #: actions/newapplication.php:143
 msgid "Use this form to register a new application."
@@ -2512,32 +1658,23 @@ msgstr ""
 msgid "Source URL is required."
 msgstr ""
 
-#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
-msgid "Could not create application."
-msgstr "Không thể tạo favorite."
-
-#: actions/newgroup.php:53
-#, fuzzy
-msgid "New group"
-msgstr "Tạo nhóm"
-
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
 msgstr ""
 
 #: actions/newmessage.php:71 actions/newmessage.php:231
-#, fuzzy
 msgid "New message"
-msgstr "Tin mới nhất"
+msgstr "Tin nhắn cá nhân"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-#, fuzzy
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
-msgstr "Bạn đã theo những người này:"
+msgstr "Bạn chưa cập nhật thông tin riêng"
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "Không có nội dung!"
 
@@ -2545,34 +1682,27 @@ msgstr "Không có nội dung!"
 msgid "No recipient specified."
 msgstr ""
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
 
 #: actions/newmessage.php:181
-#, fuzzy
 msgid "Message sent"
-msgstr "Tin mới nhất"
-
-#: actions/newmessage.php:185
-#, fuzzy, php-format
-msgid "Direct message to %s sent."
-msgstr "Tin nhắn riêng"
+msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
-#, fuzzy
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
-msgstr "Lỗi"
+msgstr ""
 
 #: actions/newnotice.php:69
 msgid "New notice"
 msgstr "Thông báo mới"
 
-#: actions/newnotice.php:217
-#, fuzzy
+#: actions/newnotice.php:227
 msgid "Notice posted"
-msgstr "Tin đã gửi"
+msgstr "Tin nhắn"
 
 #: actions/noticesearch.php:68
 #, php-format
@@ -2588,9 +1718,9 @@ msgid "Text search"
 msgstr "Chuỗi cần tìm"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr " Tìm dòng thông tin cho \"%s\""
+msgstr "%s chào mừng bạn "
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2607,39 +1737,20 @@ msgid ""
 msgstr ""
 
 #: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "Updates with \"%s\""
-msgstr "Dòng tin nhắn cho %s"
+msgstr ""
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Các thay đổi phù hợp với từ \"%s\""
+msgstr "Dòng tin nhắn cho %s"
 
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
 msgstr ""
 
-#: actions/nudge.php:94
-#, fuzzy
-msgid "Nudge sent"
-msgstr "Tin đã gửi"
-
-#: actions/nudge.php:97
-#, fuzzy
-msgid "Nudge sent!"
-msgstr "Tin đã gửi"
-
-#: actions/oauthappssettings.php:59
-#, fuzzy
-msgid "You must be logged in to list your applications."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/oauthappssettings.php:74
-msgid "OAuth applications"
-msgstr ""
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
@@ -2649,19 +1760,10 @@ msgstr ""
 msgid "You have not registered any applications yet."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
-#: actions/oauthconnectionssettings.php:175
-#, fuzzy
-msgid "You are not a user of that application."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
@@ -2676,9 +1778,8 @@ msgid "Developers can edit the registration settings for their applications "
 msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "Tin nhắn không có hồ sơ cá nhân"
+msgstr "Người dùng không có thông tin."
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2687,9 +1788,9 @@ msgstr "Trạng thái của %1$s vào %2$s"
 
 #. TRANS: Error message displaying attachments. %s is a raw MIME type (eg 'image/png')
 #: actions/oembed.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Content type %s not supported."
-msgstr "Kết nối"
+msgstr ""
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
@@ -2698,24 +1799,18 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "Không hỗ trợ định dạng dữ liệu này."
 
-#: actions/opensearch.php:64
-#, fuzzy
-msgid "People Search"
-msgstr "Tìm kiếm nhiều người"
-
 #: actions/opensearch.php:67
 msgid "Notice Search"
 msgstr "Tìm kiếm thông báo"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "Thiết lập tài khoản Twitter"
+msgstr "Thay đổi hình đại diện"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2733,48 +1828,17 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-#, fuzzy
-msgid "View profile designs"
-msgstr "Các thiết lập cho Hồ sơ cá nhân"
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Tên khu vực quá dài (không quá 255 ký tự)."
-
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "Thông báo mới"
-
-#: actions/otp.php:83
-#, fuzzy
-msgid "No login token specified."
-msgstr "Thông báo mới"
+msgstr ""
 
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "Không có URL cho hồ sơ để quay về."
-
-#: actions/otp.php:95
-#, fuzzy
-msgid "Invalid login token specified."
-msgstr "Nội dung tin nhắn không hợp lệ"
-
-#: actions/otp.php:104
-msgid "Login token expired."
-msgstr ""
-
-#: actions/outbox.php:58
-#, fuzzy, php-format
-msgid "Outbox for %1$s - page %2$d"
-msgstr "Hộp thư đi của %s"
+msgstr "Không có yêu cầu!"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2791,16 +1855,6 @@ msgstr ""
 msgid "Change password"
 msgstr "Đổi mật khẩu"
 
-#: actions/passwordsettings.php:69
-#, fuzzy
-msgid "Change your password."
-msgstr "Thay đổi mật khẩu của bạn"
-
-#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
-msgid "Password change"
-msgstr "Đã lưu mật khẩu."
-
 #: actions/passwordsettings.php:104
 msgid "Old password"
 msgstr "Mật khẩu cũ"
@@ -2826,11 +1880,6 @@ msgstr "Cùng mật khẩu ở trên"
 msgid "Change"
 msgstr "Thay đổi"
 
-#: actions/passwordsettings.php:154 actions/register.php:237
-#, fuzzy
-msgid "Password must be 6 or more characters."
-msgstr "Mật khẩu phải nhiều hơn 6 ký tự."
-
 #: actions/passwordsettings.php:157 actions/register.php:240
 msgid "Passwords don't match."
 msgstr "Mật khẩu không khớp."
@@ -2861,39 +1910,29 @@ msgid "Path and server settings for this StatusNet site."
 msgstr ""
 
 #: actions/pathsadminpanel.php:157
-#, fuzzy, php-format
+#, php-format
 msgid "Theme directory not readable: %s."
-msgstr "Trang này không phải là phương tiện truyền thông mà bạn chấp nhận."
+msgstr ""
 
 #: actions/pathsadminpanel.php:163
-#, fuzzy, php-format
+#, php-format
 msgid "Avatar directory not writable: %s."
-msgstr "Trang này không phải là phương tiện truyền thông mà bạn chấp nhận."
+msgstr ""
 
 #: actions/pathsadminpanel.php:169
-#, fuzzy, php-format
+#, php-format
 msgid "Background directory not writable: %s."
-msgstr "Background Theme:"
+msgstr ""
 
 #: actions/pathsadminpanel.php:177
-#, fuzzy, php-format
+#, php-format
 msgid "Locales directory not readable: %s."
-msgstr "Trang này không phải là phương tiện truyền thông mà bạn chấp nhận."
+msgstr ""
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
-msgid "Site"
-msgstr "Thư mời"
-
-#: actions/pathsadminpanel.php:238
-#, fuzzy
-msgid "Server"
-msgstr "Khôi phục"
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2902,11 +1941,6 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:242
-#, fuzzy
-msgid "Site path"
-msgstr "Thông báo mới"
-
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
 msgstr ""
@@ -2939,60 +1973,25 @@ msgstr ""
 msgid "Theme directory"
 msgstr ""
 
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "Hình đại diện"
-
-#: actions/pathsadminpanel.php:284
-#, fuzzy
-msgid "Avatar server"
-msgstr "Thay đổi hình đại diện"
-
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "Hình đại diện đã được cập nhật."
-
 #: actions/pathsadminpanel.php:292
-#, fuzzy
 msgid "Avatar directory"
-msgstr "Hình đại diện đã được cập nhật."
+msgstr ""
 
 #: actions/pathsadminpanel.php:301
-#, fuzzy
 msgid "Backgrounds"
-msgstr "Background Theme:"
+msgstr ""
 
 #: actions/pathsadminpanel.php:305
-#, fuzzy
 msgid "Background server"
-msgstr "Background Theme:"
+msgstr ""
 
 #: actions/pathsadminpanel.php:309
-#, fuzzy
 msgid "Background path"
-msgstr "Background Theme:"
+msgstr ""
 
 #: actions/pathsadminpanel.php:313
-#, fuzzy
 msgid "Background directory"
-msgstr "Background Theme:"
-
-#: actions/pathsadminpanel.php:320
-#, fuzzy
-msgid "SSL"
-msgstr "SMS"
-
-#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
-msgid "Never"
-msgstr "Khôi phục"
-
-#: actions/pathsadminpanel.php:324
-#, fuzzy
-msgid "Sometimes"
-msgstr "Tin nhắn"
+msgstr ""
 
 #: actions/pathsadminpanel.php:325
 msgid "Always"
@@ -3007,18 +2006,16 @@ msgid "When to use SSL"
 msgstr ""
 
 #: actions/pathsadminpanel.php:335
-#, fuzzy
 msgid "SSL server"
-msgstr "Khôi phục"
+msgstr ""
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
 msgstr ""
 
 #: actions/pathsadminpanel.php:352
-#, fuzzy
 msgid "Save paths"
-msgstr "Thông báo mới"
+msgstr ""
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -3033,20 +2030,9 @@ msgstr ""
 msgid "People search"
 msgstr "Tìm kiếm nhiều người"
 
-#: actions/peopletag.php:68
-#, fuzzy, php-format
-msgid "Not a valid people tag: %s."
-msgstr "Địa chỉ email không hợp lệ."
-
-#: actions/peopletag.php:142
-#, fuzzy, php-format
-msgid "Users self-tagged with %1$s - page %2$d"
-msgstr "Dòng tin nhắn cho %s"
-
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "Nội dung tin nhắn không hợp lệ"
+msgstr "Kích thước không hợp lệ."
 
 #: actions/postnotice.php:101
 #, php-format
@@ -3065,9 +2051,8 @@ msgstr ""
 "về bạn."
 
 #: actions/profilesettings.php:99
-#, fuzzy
 msgid "Profile information"
-msgstr "Hồ sơ này không biết"
+msgstr "Các thiết lập cho Hồ sơ cá nhân"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -3090,14 +2075,13 @@ msgid "URL of your homepage, blog, or profile on another site"
 msgstr "URL về Trang chính, Blog, hoặc hồ sơ cá nhân của bạn trên "
 
 #: actions/profilesettings.php:122 actions/register.php:468
-#, fuzzy, php-format
+#, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr "Nói về bạn và những sở thích của bạn khoảng 140 ký tự"
+msgstr ""
 
 #: actions/profilesettings.php:125 actions/register.php:471
-#, fuzzy
 msgid "Describe yourself and your interests"
-msgstr "Nói về bạn và những sở thích của bạn khoảng 140 ký tự"
+msgstr ""
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3151,43 +2135,27 @@ msgid ""
 msgstr "Tự động theo những người nào đăng ký theo tôi"
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "Lý lịch quá dài (không quá 140 ký tự)"
+msgstr "Tên khu vực quá dài (không quá %d ký tự)."
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
 #: actions/profilesettings.php:241
-#, fuzzy
 msgid "Language is too long (max 50 chars)."
-msgstr "Ngôn ngữ quá dài (tối đa là 50 ký tự)."
+msgstr "Tên khu vực quá dài (không quá 50 ký tự)."
 
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
-msgstr "Trang chủ '%s'  không hợp lệ"
-
-#: actions/profilesettings.php:306
-#, fuzzy
-msgid "Couldn't update user for autosubscribe."
-msgstr "Không thể cập nhật thành viên."
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "Không thể lưu hồ sơ cá nhân."
+msgstr "Địa chỉ email không đúng:%s"
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "Không thể lưu hồ sơ cá nhân."
 
-#: actions/profilesettings.php:383
-#, fuzzy
-msgid "Couldn't save tags."
-msgstr "Không thể lưu hồ sơ cá nhân."
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -3198,34 +2166,13 @@ msgstr "Đã lưu các điều chỉnh."
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-#, fuzzy
-msgid "Could not retrieve public stream."
-msgstr "Không thể lấy lại các tin nhắn ưa thích"
-
-#: actions/public.php:130
-#, fuzzy, php-format
-msgid "Public timeline, page %d"
-msgstr "Dòng tin công cộng"
-
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
 msgstr "Dòng tin công cộng"
 
-#: actions/public.php:160
-#, fuzzy
-msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Dòng tin công cộng"
-
-#: actions/public.php:164
-#, fuzzy
-msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Dòng tin công cộng"
-
 #: actions/public.php:168
-#, fuzzy
 msgid "Public Stream Feed (Atom)"
-msgstr "Dòng tin công cộng"
+msgstr ""
 
 #: actions/public.php:188
 #, php-format
@@ -3262,9 +2209,8 @@ msgid ""
 msgstr ""
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "Dòng tin công cộng"
+msgstr ""
 
 #: actions/publictagcloud.php:63
 #, php-format
@@ -3319,24 +2265,10 @@ msgstr "Mã xác nhận quá cũ. Hãy thử lại cái khác."
 msgid "Could not update user with confirmed email address."
 msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
 
-#: actions/recoverpassword.php:152
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr ""
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
 
-#: actions/recoverpassword.php:188
-msgid "Password recovery"
-msgstr ""
-
-#: actions/recoverpassword.php:191
-msgid "Nickname or email address"
-msgstr ""
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr "Biệt hiệu của bạn đã tồn tại hoặc bạn đã đăng ký bằng email này rồi."
@@ -3418,11 +2350,6 @@ msgstr "Mật khẩu mới đã được lưu. Bạn có thể đăng nhập nga
 msgid "Sorry, only invited people can register."
 msgstr ""
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "Lỗi xảy ra với mã xác nhận."
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr "Đăng ký thành công"
@@ -3432,9 +2359,8 @@ msgid "Register"
 msgstr "Đăng ký"
 
 #: actions/register.php:142
-#, fuzzy
 msgid "Registration not allowed."
-msgstr "Biệt hiệu không được cho phép."
+msgstr "Đăng ký"
 
 #: actions/register.php:205
 msgid "You can't register if you don't agree to the license."
@@ -3505,14 +2431,14 @@ msgstr ""
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
-msgstr " ngoại trừ thông tin riêng: mật khẩu, email, địa chỉ IM, số điện thoại"
+msgstr ""
 
 #: actions/register.php:583
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
 "want to...\n"
@@ -3529,18 +2455,6 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
-"Chúc mừng, %s! Chào mừng bạn đến với  %%%%site.name%%%%. Bây giờ bạn có "
-"thể...\n"
-"\n"
-"* Vào trang [Hồ sơ cá nhân](%s) của bạn và gửi tin nhắn đầu tiên. \n"
-"* Thêm [địa chỉ Jabber/GTalk](%%%%action.imsettings%%%%) để có thể gửi tin "
-"nhắn nhanh.\n"
-"* [Tìm kiếm người quen](%%%%action.peoplesearch%%%%) mà bạn nghĩ là có thể "
-"chia sẻ niềm vui.\n"
-"* Đọc xuyên suốt [hướng dẫn](%%%%doc.help%%%%) để hiểu thêm về dịch vụ của "
-"chúng tôi.\n"
-"\n"
-"Cảm ơn bạn đã đăng ký để là thành viên và rất mong bạn sẽ thích dịch vụ này."
 
 #: actions/register.php:607
 msgid ""
@@ -3567,9 +2481,8 @@ msgid "Remote subscribe"
 msgstr "Đăng nhận từ xa"
 
 #: actions/remotesubscribe.php:124
-#, fuzzy
 msgid "Subscribe to a remote user"
-msgstr "Theo nhóm này"
+msgstr "Ngừng đăng ký từ người dùng này"
 
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
@@ -3597,47 +2510,24 @@ msgid "Invalid profile URL (bad format)"
 msgstr "URL hồ sơ cá nhân không đúng định dạng."
 
 #: actions/remotesubscribe.php:168
-#, fuzzy
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Không phải là URL về hồ sơ cá nhân hợp lệ (không phải là "
+msgstr ""
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
 msgstr ""
 
 #: actions/remotesubscribe.php:183
-#, fuzzy
 msgid "Couldn’t get a request token."
-msgstr "Không thể lấy token yêu cầu."
+msgstr ""
 
 #: actions/repeat.php:57
 msgid "Only logged-in users can repeat notices."
 msgstr ""
 
-#: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
-msgid "No notice specified."
-msgstr "Thông báo mới"
-
-#: actions/repeat.php:76
-#, fuzzy
-msgid "You can't repeat your own notice."
-msgstr "Bạn không thể đăng ký nếu không đồng ý các điều khoản."
-
-#: actions/repeat.php:90
-#, fuzzy
-msgid "You already repeated that notice."
-msgstr "Bạn đã theo những người này:"
-
-#: actions/repeat.php:114 lib/noticelist.php:675
-#, fuzzy
+#: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
-msgstr "Tạo"
-
-#: actions/repeat.php:119
-#, fuzzy
-msgid "Repeated!"
-msgstr "Tạo"
+msgstr "Khởi tạo"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3645,25 +2535,20 @@ msgstr "Tạo"
 msgid "Replies to %s"
 msgstr "Trả lời cho %s"
 
-#: actions/replies.php:128
-#, fuzzy, php-format
-msgid "Replies to %1$s, page %2$d"
-msgstr "%s chào mừng bạn "
-
 #: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/replies.php:199
 #, php-format
@@ -3691,30 +2576,13 @@ msgstr ""
 msgid "Replies to %1$s on %2$s!"
 msgstr "%s chào mừng bạn "
 
-#: actions/revokerole.php:75
-#, fuzzy
-msgid "You cannot revoke user roles on this site."
-msgstr "Bạn đã theo những người này:"
-
-#: actions/revokerole.php:82
-#, fuzzy
-msgid "User doesn't have this role."
-msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
-
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "Hình đại diện đã được cập nhật."
-
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
-msgid "You cannot sandbox users on this site."
-msgstr "Bạn đã theo những người này:"
+msgstr "Số liệu thống kê"
 
 #: actions/sandbox.php:72
-#, fuzzy
 msgid "User is already sandboxed."
-msgstr "Người dùng không có thông tin."
+msgstr ""
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
@@ -3742,39 +2610,15 @@ msgstr ""
 msgid "Turn on debugging output for sessions."
 msgstr ""
 
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
-#: actions/useradminpanel.php:294
-#, fuzzy
-msgid "Save site settings"
-msgstr "Thay đổi hình đại diện"
-
-#: actions/showapplication.php:82
-#, fuzzy
-msgid "You must be logged in to view an application."
-msgstr "Bạn phải đăng nhập vào mới có thể gửi thư mời những "
-
-#: actions/showapplication.php:157
-#, fuzzy
-msgid "Application profile"
-msgstr "Tin nhắn không có hồ sơ cá nhân"
-
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "Biệt danh"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "Thư mời đã gửi"
+msgstr ""
 
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
@@ -3792,18 +2636,10 @@ msgstr "Số liệu thống kê"
 msgid "Created by %1$s - %2$s access by default - %3$d users"
 msgstr ""
 
-#: actions/showapplication.php:213
-msgid "Application actions"
-msgstr ""
-
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
 msgstr ""
 
-#: actions/showapplication.php:261
-msgid "Application info"
-msgstr ""
-
 #: actions/showapplication.php:263
 msgid "Consumer key"
 msgstr ""
@@ -3830,16 +2666,6 @@ msgid ""
 "signature method."
 msgstr ""
 
-#: actions/showapplication.php:309
-#, fuzzy
-msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?"
-
-#: actions/showfavorites.php:79
-#, fuzzy, php-format
-msgid "%1$s's favorite notices, page %2$d"
-msgstr "Những tin nhắn ưa thích của %s"
-
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
 msgstr "Không thể lấy lại các tin nhắn ưa thích"
@@ -3885,54 +2711,36 @@ msgid "This is a way to share what you like."
 msgstr ""
 
 #: actions/showgroup.php:82 lib/groupnav.php:86
-#, fuzzy, php-format
+#, php-format
 msgid "%s group"
-msgstr "%s và nhóm"
-
-#: actions/showgroup.php:84
-#, fuzzy, php-format
-msgid "%1$s group, page %2$d"
-msgstr "Thành viên"
+msgstr "Hộp thư đi của %s"
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "Thông tin nhóm"
+msgstr "Người dùng không có thông tin."
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-#, fuzzy
-msgid "Note"
-msgstr "Tin nhắn"
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
 #: actions/showgroup.php:302
-#, fuzzy
 msgid "Group actions"
-msgstr "Mã nhóm"
+msgstr "Không tìm thấy nhóm."
 
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Dòng tin nhắn cho %s"
-
-#: actions/showgroup.php:350
-#, fuzzy, php-format
-msgid "Notice feed for %s group (Atom)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/showgroup.php:355
 #, php-format
@@ -3949,16 +2757,6 @@ msgstr "Thành viên"
 msgid "(None)"
 msgstr ""
 
-#: actions/showgroup.php:404
-#, fuzzy
-msgid "All members"
-msgstr "Thành viên"
-
-#: actions/showgroup.php:439
-#, fuzzy
-msgid "Created"
-msgstr "Tạo"
-
 #: actions/showgroup.php:455
 #, php-format
 msgid ""
@@ -3987,59 +2785,32 @@ msgid "No such message."
 msgstr "Không có tin nhắn nào."
 
 #: actions/showmessage.php:98
-#, fuzzy
 msgid "Only the sender and recipient may read this message."
-msgstr "Chỉ có người gửi hoặc người nhận mới có thể xem tin nhắn này"
-
-#: actions/showmessage.php:108
-#, php-format
-msgid "Message to %1$s on %2$s"
-msgstr ""
-
-#: actions/showmessage.php:113
-#, php-format
-msgid "Message from %1$s on %2$s"
 msgstr ""
 
 #: actions/shownotice.php:90
-#, fuzzy
 msgid "Notice deleted."
-msgstr "Tin đã gửi"
-
-#: actions/showstream.php:73
-#, fuzzy, php-format
-msgid " tagged %s"
-msgstr "Thông báo được gắn thẻ %s"
-
-#: actions/showstream.php:79
-#, fuzzy, php-format
-msgid "%1$s, page %2$d"
-msgstr "%s và bạn bè"
+msgstr "Không có mã nào được nhập"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (Atom)"
-msgstr "Dòng tin nhắn cho %s"
-
-#: actions/showstream.php:148
-#, fuzzy, php-format
-msgid "FOAF for %s"
-msgstr "Hộp thư đi của %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/showstream.php:200
 #, php-format
@@ -4076,20 +2847,9 @@ msgid ""
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
 
-#: actions/showstream.php:305
-#, fuzzy, php-format
-msgid "Repeat of %s"
-msgstr "Trả lời cho %s"
-
-#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
-msgid "You cannot silence users on this site."
-msgstr "Bạn đã theo những người này:"
-
 #: actions/silence.php:72
-#, fuzzy
 msgid "User is already silenced."
-msgstr "Người dùng không có thông tin."
+msgstr ""
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
@@ -4099,11 +2859,6 @@ msgstr ""
 msgid "Site name must have non-zero length."
 msgstr ""
 
-#: actions/siteadminpanel.php:141
-#, fuzzy
-msgid "You must have a valid contact email address."
-msgstr "Địa chỉ email không hợp lệ."
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -4121,11 +2876,6 @@ msgstr ""
 msgid "General"
 msgstr ""
 
-#: actions/siteadminpanel.php:224
-#, fuzzy
-msgid "Site name"
-msgstr "Thông báo mới"
-
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
 msgstr ""
@@ -4146,16 +2896,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "Dia chi email moi de gui tin nhan den %s"
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "Thành phố"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -4164,11 +2904,6 @@ msgstr ""
 msgid "Default timezone for the site; usually UTC."
 msgstr ""
 
-#: actions/siteadminpanel.php:262
-#, fuzzy
-msgid "Default language"
-msgstr "Ngôn ngữ bạn thích"
-
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
 msgstr ""
@@ -4194,43 +2929,29 @@ msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "Thông báo mới"
-
-#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
-msgid "Edit site-wide message"
-msgstr "Tin mới nhất"
-
-#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
-msgid "Unable to save site notice."
-msgstr "Không thể lưu thông tin Twitter của bạn!"
+msgstr "Tin nhắn"
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:176
-#, fuzzy
 msgid "Site notice text"
-msgstr "Thông báo mới"
+msgstr "Xóa tin nhắn"
 
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
 #: actions/sitenoticeadminpanel.php:198
-#, fuzzy
 msgid "Save site notice"
-msgstr "Thông báo mới"
+msgstr "Xóa tin nhắn"
 
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "Thiết lập SMS"
+msgstr "Thay đổi hình đại diện"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4241,50 +2962,28 @@ msgstr "Bạn có thể nhận tin nhắn SMS qua email từ %%site.name%%."
 
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
-#, fuzzy
 msgid "SMS is not available."
-msgstr "Trang này không phải là phương tiện truyền thông mà bạn chấp nhận."
+msgstr ""
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "IM"
+msgstr "Địa chỉ email"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
 msgid "Current confirmed SMS-enabled phone number."
 msgstr "SMS xác nhận ngay - đã cho phép gửi qua điện thoại. "
 
-#. TRANS: Form guide in IM settings form.
-#: actions/smssettings.php:133
-#, fuzzy
-msgid "Awaiting confirmation on this phone number."
-msgstr "Đó không phải là số điện thoại của bạn."
-
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-#, fuzzy
-msgid "Confirmation code"
-msgstr "Không có mã số xác nhận."
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr "Nhập mã mà bạn nhận được trên điện thoại của bạn."
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "Xác nhận"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
-msgstr "Số điện thoại để nhắn SMS "
+msgstr "Không có số điện thoại."
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
@@ -4293,9 +2992,8 @@ msgstr "Số điện thoại, không cho phép nhập dấu chấm và ký tự
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "Tính năng"
+msgstr "Các tính năng đã được lưu."
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
@@ -4306,56 +3004,20 @@ msgstr ""
 "Hãy gửi thông báo đến tôi qua SMS; Tôi  biết là bạn đang phải trả giá cao "
 "cho dịch vụ của chúng tôi. "
 
-#. TRANS: Confirmation message for successful SMS preferences save.
-#: actions/smssettings.php:315
-#, fuzzy
-msgid "SMS preferences saved."
-msgstr "Các tính năng đã được lưu."
-
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
 msgid "No phone number."
 msgstr "Không có số điện thoại."
 
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-#, fuzzy
-msgid "No carrier selected."
-msgstr "Bạn chưa chọn hình để đưa lên."
-
-#. TRANS: Message given saving SMS phone number that is already set.
-#: actions/smssettings.php:352
-#, fuzzy
-msgid "That is already your phone number."
-msgstr "Đó không phải là số điện thoại của bạn."
-
 #. TRANS: Message given saving SMS phone number that is already set for another user.
 #: actions/smssettings.php:356
-#, fuzzy
 msgid "That phone number already belongs to another user."
-msgstr "Địa chỉ email Yahoo này đã có người khác sử dụng rồi."
-
-#. TRANS: Message given saving valid SMS phone number that is to be confirmed.
-#: actions/smssettings.php:384
-#, fuzzy
-msgid ""
-"A confirmation code was sent to the phone number you added. Check your phone "
-"for the code and instructions on how to use it."
-msgstr ""
-"Mã xác nhận đã được gửi tới địa chỉ email của bạn. Hãy kiểm tra hộp thư và "
-"làm theo hướng dẫn."
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-#, fuzzy
-msgid "That is the wrong confirmation number."
-msgstr "Đó không phải là số điện thoại của bạn."
+msgstr "Jabber ID này đã thuộc về người khác rồi."
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "Sự xác nhận đã bị hủy bỏ."
+msgstr "Xác nhận SMS"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4363,18 +3025,6 @@ msgstr "Sự xác nhận đã bị hủy bỏ."
 msgid "That is not your phone number."
 msgstr "Đó không phải là số điện thoại của bạn."
 
-#. TRANS: Message given after successfully removing a registered SMS phone number.
-#: actions/smssettings.php:470
-#, fuzzy
-msgid "The SMS phone number was removed."
-msgstr "Số điện thoại để nhắn SMS "
-
-#. TRANS: Label for mobile carrier dropdown menu in SMS settings.
-#: actions/smssettings.php:511
-#, fuzzy
-msgid "Mobile carrier"
-msgstr "Chọn nhà cung cấp Mobile"
-
 #. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:516
 msgid "Select a carrier"
@@ -4404,13 +3054,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "Tôi theo"
-
-#: actions/snapshotadminpanel.php:127
-msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Xac nhan dia chi email"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
@@ -4452,50 +3097,23 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-#, fuzzy
-msgid "Save snapshot settings"
-msgstr "Thay đổi hình đại diện"
-
 #: actions/subedit.php:70
-#, fuzzy
 msgid "You are not subscribed to that profile."
-msgstr "Bạn chưa cập nhật thông tin riêng"
+msgstr "Bạn đã theo những người này:"
 
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "Không thể tạo đăng nhận."
+msgstr "Không thể chèn thêm vào đăng nhận."
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "Không có tin nhắn nào."
-
-#: actions/subscribe.php:117
-#, fuzzy
-msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#: actions/subscribe.php:145
-#, fuzzy
-msgid "Subscribed"
-msgstr "Theo bạn này"
-
-#: actions/subscribers.php:50
-#, fuzzy, php-format
-msgid "%s subscribers"
-msgstr "Bạn này theo tôi"
-
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "Theo tôi"
+msgstr ""
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
@@ -4524,16 +3142,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "Tất cả đăng nhận"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "Tất cả đăng nhận"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr "Có nhiều người gửi lời nhắn để bạn nghe theo."
@@ -4554,64 +3162,47 @@ msgid ""
 msgstr ""
 
 #: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not listening to anyone."
-msgstr "%1$s dang theo doi tin nhan cua ban tren %2$s."
-
-#: actions/subscriptions.php:208
-#, fuzzy
-msgid "Jabber"
-msgstr "Không có Jabber ID."
+msgstr "%1$s đang theo dõi lưu ý của bạn trên %2$s."
 
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
 msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Thông báo được gắn thẻ %s"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr "Dòng tin nhắn cho %s"
+msgstr "Chọn những người bạn của %s"
 
 #: actions/tagother.php:39
-#, fuzzy
 msgid "No ID argument."
-msgstr "Không có tài liệu nào."
-
-#: actions/tagother.php:65
-#, fuzzy, php-format
-msgid "Tag %s"
-msgstr "Từ khóa"
+msgstr ""
 
 #: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
 msgid "User profile"
-msgstr "Hồ sơ"
+msgstr "Người dùng không có thông tin."
 
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
 msgid "Photo"
 msgstr ""
 
-#: actions/tagother.php:141
-#, fuzzy
-msgid "Tag user"
-msgstr "Từ khóa"
-
 #: actions/tagother.php:151
 msgid ""
 "Tags for this user (letters, numbers, -, ., and _), comma- or space- "
@@ -4623,44 +3214,13 @@ msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
 msgstr ""
 
-#: actions/tagother.php:200
-#, fuzzy
-msgid "Could not save tags."
-msgstr "Không thể lưu hồ sơ cá nhân."
-
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
 
-#: actions/tagrss.php:35
-#, fuzzy
-msgid "No such tag."
-msgstr "Không có tin nhắn nào."
-
-#: actions/unblock.php:59
-#, fuzzy
-msgid "You haven't blocked that user."
-msgstr "Bạn đã theo những người này:"
-
-#: actions/unsandbox.php:72
-#, fuzzy
-msgid "User is not sandboxed."
-msgstr "Người dùng không có thông tin."
-
-#: actions/unsilence.php:72
-#, fuzzy
-msgid "User is not silenced."
-msgstr "Người dùng không có thông tin."
-
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "Không có URL cho hồ sơ để quay về."
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "Hết theo"
+msgstr "Không có yêu cầu!"
 
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
@@ -4668,12 +3228,6 @@ msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#. TRANS: User admin panel title
-#: actions/useradminpanel.php:59
-msgctxt "TITLE"
-msgid "User"
-msgstr ""
-
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
 msgstr ""
@@ -4705,11 +3259,6 @@ msgstr ""
 msgid "Maximum length of a profile bio in characters."
 msgstr ""
 
-#: actions/useradminpanel.php:231
-#, fuzzy
-msgid "New users"
-msgstr "Gửi thư mời đến những người chưa có tài khoản"
-
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
 msgstr ""
@@ -4718,26 +3267,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "Tất cả đăng nhận"
-
-#: actions/useradminpanel.php:242
-#, fuzzy
-msgid "Automatically subscribe new users to this user."
-msgstr "Tự động theo những người nào đăng ký theo tôi"
-
-#: actions/useradminpanel.php:251
-#, fuzzy
-msgid "Invitations"
-msgstr "Thư mời đã gửi"
-
-#: actions/useradminpanel.php:256
-#, fuzzy
-msgid "Invitations enabled"
-msgstr "Thư mời đã gửi"
-
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
 msgstr ""
@@ -4747,15 +3276,11 @@ msgid "Authorize subscription"
 msgstr "Đăng nhận cho phép"
 
 #: actions/userauthorization.php:110
-#, fuzzy
 msgid ""
 "Please check these details to make sure that you want to subscribe to this "
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
-"Vui lòng kiểm tra các chi tiết để chắc chắn rằng bạn muốn đăng nhận xem tin "
-"nhắn của các thành viên này. Nếu bạn không yêu cầu đăng nhận xem tin nhắn "
-"của họ, hãy nhấn \"Hủy bỏ\""
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
@@ -4767,18 +3292,16 @@ msgstr "Chấp nhận"
 
 #: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
-#, fuzzy
 msgid "Subscribe to this user"
-msgstr "Theo nhóm này"
+msgstr "Ngừng đăng ký từ người dùng này"
 
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "Từ chối"
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "Tất cả đăng nhận"
+msgstr "Đăng nhận cho phép"
 
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
@@ -4789,29 +3312,22 @@ msgid "Subscription authorized"
 msgstr "Đăng nhận được phép"
 
 #: actions/userauthorization.php:256
-#, fuzzy
 msgid ""
 "The subscription has been authorized, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
-"Đăng nhận được phép, nhưng URL trả lại không được gởi trả. Hãy kiểm tra các "
-"hướng dẫn chi tiết trên site để biết cách cho phép đăng ký. Đăng nhận token "
-"của bạn là:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
 msgstr "Đăng nhận từ chối"
 
 #: actions/userauthorization.php:268
-#, fuzzy
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
 msgstr ""
-"Đăng nhận này đã bị từ chối, nhưng không có URL nào để quay về. Hãy kiểm tra "
-"các hướng dẫn chi tiết trên site để "
 
 #: actions/userauthorization.php:303
 #, php-format
@@ -4839,19 +3355,14 @@ msgid "Avatar URL ‘%s’ is not valid."
 msgstr ""
 
 #: actions/userauthorization.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr "Không thể đọc URL cho hình đại diện '%s'"
+msgstr ""
 
 #: actions/userauthorization.php:355
-#, fuzzy, php-format
+#, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Kiểu file ảnh không phù hợp với  '%s'"
-
-#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
-msgid "Profile design"
-msgstr "Các thiết lập cho Hồ sơ cá nhân"
+msgstr ""
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
@@ -4863,42 +3374,15 @@ msgstr ""
 msgid "Enjoy your hotdog!"
 msgstr ""
 
-#. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
-#: actions/usergroups.php:66
-#, fuzzy, php-format
-msgid "%1$s groups, page %2$d"
-msgstr "Thành viên"
-
 #: actions/usergroups.php:132
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
 msgstr ""
 
-#. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom group notice feed.
-#. TRANS: %1$s is a group name, %2$s is a site name.
-#. TRANS: Message is used as a subtitle in atom user notice feed.
-#. TRANS: %1$s is a user name, %2$s is a site name.
-#: actions/userrss.php:97 lib/atomgroupnoticefeed.php:70
-#: lib/atomusernoticefeed.php:76
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
-#: actions/version.php:75
-#, fuzzy, php-format
-msgid "StatusNet %s"
-msgstr "Số liệu thống kê"
-
 #: actions/version.php:155
 #, php-format
 msgid ""
@@ -4937,12 +3421,6 @@ msgstr ""
 msgid "Plugins"
 msgstr ""
 
-#. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
-#: actions/version.php:198 lib/action.php:789
-#, fuzzy
-msgid "Version"
-msgstr "Cá nhân"
-
 #: actions/version.php:199
 msgid "Author(s)"
 msgstr ""
@@ -4981,42 +3459,10 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "Kích thước không hợp lệ."
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
-#, fuzzy
 msgid "Group join failed."
-msgstr "Thông tin nhóm"
-
-#. TRANS: Exception thrown when trying to leave a group the user is not a member of.
-#: classes/Group_member.php:55
-#, fuzzy
-msgid "Not part of group."
-msgstr "Không thể cập nhật thành viên."
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-#, fuzzy
-msgid "Group leave failed."
-msgstr "Thông tin nhóm"
-
-#. TRANS: Server exception thrown when updating a local group fails.
-#: classes/Local_group.php:42
-#, fuzzy
-msgid "Could not update local group."
-msgstr "Không thể cập nhật thành viên."
-
-#. TRANS: Exception thrown when trying creating a login token failed.
-#. TRANS: %s is the user nickname for which token creation failed.
-#: classes/Login_token.php:78
-#, fuzzy, php-format
-msgid "Could not create login token for %s"
-msgstr "Không thể tạo favorite."
+msgstr "Không tìm thấy nhóm."
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
@@ -5025,21 +3471,13 @@ msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
 #: classes/Message.php:46
-#, fuzzy
 msgid "You are banned from sending direct messages."
-msgstr "Thư bạn đã gửi"
-
-#. TRANS: Message given when a message could not be stored on the server.
-#: classes/Message.php:63
-#, fuzzy
-msgid "Could not insert message."
-msgstr "Không thể chèn thêm vào đăng nhận."
+msgstr "Thư đến của bạn"
 
 #. TRANS: Message given when a message could not be updated on the server.
 #: classes/Message.php:74
-#, fuzzy
 msgid "Could not update message with new URI."
-msgstr "Không thá»\83 cập nhật thông tin user vá»\9bi Ä\91á»\8ba chá»\89 email Ä\91ã Ä\91ược xác nhận."
+msgstr "Không thá»\83 cập nhật thành viên."
 
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
@@ -5049,64 +3487,41 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "Lỗi cơ sở dữ liệu khi chèn trả lời: %s"
-
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-
-#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-#, fuzzy
-msgid "Problem saving notice. Unknown user."
-msgstr "Có lỗi xảy ra khi lưu tin nhắn."
+msgstr "Lỗi xảy ra khi thêm mới hình đại diện"
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
-#. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
-msgid "You are banned from posting notices on this site."
-msgstr ""
-
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
 msgstr "Có lỗi xảy ra khi lưu tin nhắn."
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
-#. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
-msgid "Problem saving group inbox."
-msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1745
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%s (%s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
@@ -5122,100 +3537,46 @@ msgstr ""
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
 msgstr ""
 
-#. TRANS: Exception thrown when a right for a non-existing user profile is checked.
-#: classes/Remote_profile.php:54
-#, fuzzy
-msgid "Missing profile."
-msgstr "Người dùng không có thông tin."
-
-#. TRANS: Exception thrown when a tag cannot be saved.
-#: classes/Status_network.php:346
-#, fuzzy
-msgid "Unable to save tag."
-msgstr "Không thể lưu thông tin Twitter của bạn!"
-
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-msgid "Already subscribed!"
-msgstr ""
-
-#. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
-#: classes/Subscription.php:85
-#, fuzzy
-msgid "User has blocked you."
-msgstr "Người dùng không có thông tin."
-
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "Chưa đăng nhận!"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "Không thể xóa đăng nhận."
+msgstr "Không thể chèn thêm vào đăng nhận."
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "Không thể xóa đăng nhận."
+msgstr "Không thể chèn thêm vào đăng nhận."
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "Không thể xóa đăng nhận."
-
-#. TRANS: Notice given on user registration.
-#. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
-#: classes/User.php:365
-#, fuzzy, php-format
-msgid "Welcome to %1$s, @%2$s!"
-msgstr "%s chào mừng bạn "
-
-#. TRANS: Server exception thrown when creating a group failed.
-#: classes/User_group.php:496
-#, fuzzy
-msgid "Could not create group."
-msgstr "Không thể tạo favorite."
+msgstr "Không thể chèn thêm vào đăng nhận."
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "Không thể tạo đăng nhận."
+msgstr "Không thể lưu hồ sơ cá nhân."
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "Không thể tạo đăng nhận."
+msgstr "Không thể cập nhật thành viên."
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "Không thể tạo đăng nhận."
+msgstr "Không thể lưu hồ sơ cá nhân."
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
 msgid "Change your profile settings"
 msgstr "Thay đổi các thiết lập trong hồ sơ cá nhân của bạn"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "Cập nhật hình đại diện không thành công."
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:123
 msgid "Change your password"
@@ -5228,26 +3589,19 @@ msgstr "Đang thực hiện việc thay đổi email"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:137
-#, fuzzy
 msgid "Design your profile"
-msgstr "Hồ sơ"
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-msgid "Other options"
-msgstr ""
+msgstr "Người dùng không có thông tin."
 
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
-#, fuzzy
 msgid "Other"
-msgstr "Sau"
+msgstr ""
 
 #. TRANS: Page title. %1$s is the title, %2$s is the site name.
 #: lib/action.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s - %2$s"
-msgstr "%s (%s)"
+msgstr "Trạng thái của %1$s vào %2$s"
 
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
@@ -5265,87 +3619,34 @@ msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to personal profile and friends timeline
-#: lib/action.php:445
-#, fuzzy
-msgctxt "MENU"
-msgid "Personal"
-msgstr "Cá nhân"
-
-#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change your email, avatar, password, profile"
-msgstr "Thay đổi mật khẩu của bạn"
-
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr "Không thể chuyển đến máy chủ: %s"
+msgstr ""
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
 msgstr "Kết nối"
 
-#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:458
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Change site configuration"
-msgstr "Tôi theo"
-
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
 msgctxt "MENU"
 msgid "Admin"
 msgstr ""
 
-#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:465
-#, fuzzy, php-format
-msgctxt "TOOLTIP"
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-"Điền địa chỉ email và nội dung tin nhắn để gửi thư mời bạn bè và đồng nghiệp "
-"của bạn tham gia vào dịch vụ này."
-
-#. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
-#: lib/action.php:468
-#, fuzzy
-msgctxt "MENU"
-msgid "Invite"
-msgstr "Thư mời"
-
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
 msgstr ""
 
-#. TRANS: Main menu option when logged in to log out the current user
-#: lib/action.php:477
-#, fuzzy
-msgctxt "MENU"
-msgid "Logout"
-msgstr "Thoát"
-
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr "Tạo tài khoản mới"
-
-#. TRANS: Main menu option when not logged in to register a new account
-#: lib/action.php:485
-#, fuzzy
-msgctxt "MENU"
-msgid "Register"
-msgstr "Đăng ký"
+msgstr ""
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
@@ -5353,60 +3654,21 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "Đăng nhập"
-
-#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:494
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Help me!"
-msgstr "Hướng dẫn"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
-msgstr "Hướng dẫn"
-
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
 msgstr ""
 
-#: lib/action.php:503
-#, fuzzy
-msgctxt "MENU"
-msgid "Search"
-msgstr "Tìm kiếm"
-
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "Thông báo mới"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "Thông báo mới"
-
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "Tôi theo"
+msgstr ""
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5444,9 +3706,8 @@ msgid "Contact"
 msgstr "Liên hệ"
 
 #: lib/action.php:794
-#, fuzzy
 msgid "Badge"
-msgstr "Tin đã gửi"
+msgstr ""
 
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
@@ -5455,13 +3716,11 @@ msgstr ""
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
-"**%%site.name%%** là dịch vụ gửi tin nhắn được cung cấp từ [%%site.broughtby%"
-"%](%%site.broughtbyurl%%). "
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5471,21 +3730,12 @@ msgstr "**%%site.name%%** là dịch vụ gửi tin nhắn."
 
 #. TRANS: Second sentence of the StatusNet site license. Mentions the StatusNet source code license.
 #: lib/action.php:834
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "It runs the [StatusNet](http://status.net/) microblogging software, version %"
 "s, available under the [GNU Affero General Public License](http://www.fsf."
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
-"Đang dùng [StatusNet](http://status.net/), phiên bản %s phát hành theo bản "
-"quyền [GNU Affero General Public License](http://www.fsf.org/licensing/"
-"licenses/agpl-3.0.html)."
-
-#. TRANS: DT element for StatusNet site content license.
-#: lib/action.php:850
-#, fuzzy
-msgid "Site content license"
-msgstr "Tìm theo nội dung của tin nhắn"
 
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
@@ -5512,24 +3762,17 @@ msgstr ""
 msgid "All %1$s content and data are available under the %2$s license."
 msgstr ""
 
-#. TRANS: DT element for pagination (previous/next, etc.).
-#: lib/action.php:1192
-msgid "Pagination"
-msgstr ""
-
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
-#, fuzzy
 msgid "After"
-msgstr "Sau"
+msgstr ""
 
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: past than the currently displayed information.
 #: lib/action.php:1213
-#, fuzzy
 msgid "Before"
-msgstr "Trước"
+msgstr ""
 
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
@@ -5548,18 +3791,6 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-#, fuzzy
-msgid "You cannot make changes to this site."
-msgstr "Bạn đã theo những người này:"
-
-#. TRANS: Client error message throw when a certain panel's settings cannot be changed.
-#: lib/adminpanelaction.php:110
-#, fuzzy
-msgid "Changes to that panel are not allowed."
-msgstr "Biệt hiệu không được cho phép."
-
 #. TRANS: Client error message.
 #: lib/adminpanelaction.php:229
 msgid "showForm() not implemented."
@@ -5570,118 +3801,31 @@ msgstr ""
 msgid "saveSettings() not implemented."
 msgstr ""
 
-#. TRANS: Client error message thrown if design settings could not be deleted in
-#. TRANS: the admin panel Design.
-#: lib/adminpanelaction.php:284
-#, fuzzy
-msgid "Unable to delete design setting."
-msgstr "Không thể lưu thông tin Twitter của bạn!"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:350
-#, fuzzy
-msgid "Basic site configuration"
-msgstr "Xac nhan dia chi email"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-#, fuzzy
-msgctxt "MENU"
-msgid "Site"
-msgstr "Thư mời"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:358
-#, fuzzy
-msgid "Design configuration"
-msgstr "Xác nhận SMS"
-
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
-#, fuzzy
 msgctxt "MENU"
 msgid "Design"
-msgstr "Cá nhân"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:366
-#, fuzzy
-msgid "User configuration"
-msgstr "Xác nhận SMS"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
-msgid "User"
 msgstr ""
 
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:374
-#, fuzzy
-msgid "Access configuration"
-msgstr "Xác nhận SMS"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:382
-#, fuzzy
-msgid "Paths configuration"
-msgstr "Xác nhận SMS"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:390
-#, fuzzy
-msgid "Sessions configuration"
-msgstr "Xác nhận SMS"
-
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:398
-#, fuzzy
 msgid "Edit site notice"
-msgstr "Thông báo mới"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:406
-#, fuzzy
-msgid "Snapshots configuration"
-msgstr "Xác nhận SMS"
+msgstr "Xóa tin nhắn"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:209
-#, fuzzy, php-format
-msgid "Describe your application in %d characters"
-msgstr "Nói về những sở thích của nhóm trong vòng 140 ký tự"
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
-#, fuzzy
 msgid "Describe your application"
-msgstr "Nói về những sở thích của nhóm trong vòng 140 ký tự"
+msgstr "Mô tả"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:224
-#, fuzzy
 msgid "URL of the homepage of this application"
-msgstr "URL về Trang chính, Blog, hoặc hồ sơ cá nhân của bạn trên "
-
-#. TRANS: Form input field label.
-#: lib/applicationeditform.php:226
-#, fuzzy
-msgid "Source URL"
-msgstr "Nguồn"
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
@@ -5690,9 +3834,8 @@ msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
-#, fuzzy
 msgid "URL for the homepage of the organization"
-msgstr "URL về Trang chính, Blog, hoặc hồ sơ cá nhân của bạn trên "
+msgstr ""
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
@@ -5752,15 +3895,9 @@ msgstr ""
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "Xóa"
-
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
+msgstr "Khôi phục"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
@@ -5769,82 +3906,43 @@ msgstr ""
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
-#, fuzzy
 msgid "Provider"
-msgstr "Hồ sơ "
+msgstr "Xem trước"
 
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
-#: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
-msgid "Password changing failed"
-msgstr "Đã lưu mật khẩu."
-
 #: lib/authenticationplugin.php:236
-#, fuzzy
 msgid "Password changing is not allowed"
-msgstr "Đã lưu mật khẩu."
-
-#: lib/channel.php:157 lib/channel.php:177
-#, fuzzy
-msgid "Command results"
-msgstr "Không có kết quả nào"
-
-#: lib/channel.php:229 lib/mailhandler.php:142
-msgid "Command complete"
 msgstr ""
 
 #: lib/channel.php:240
-#, fuzzy
-msgid "Command failed"
-msgstr " và bạn bè"
-
-#: lib/command.php:83 lib/command.php:105
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
-
-#: lib/command.php:99 lib/command.php:596
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Người dùng không có thông tin."
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
+msgid "Command failed"
+msgstr "Bạn và bạn bè"
 
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "Tin đã gửi"
+#: lib/command.php:240
+#, php-format
+msgid "Nudge sent to %s."
+msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5852,57 +3950,22 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
-#, fuzzy
-msgid "Notice marked as fave."
-msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
-
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "Bạn đã theo những người này:"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, fuzzy, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "Tên đầy đủ"
-
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, fuzzy, php-format
+#: lib/command.php:438 lib/mail.php:268
+#, php-format
 msgid "Location: %s"
-msgstr "Thành phố: %s"
+msgstr "Thành phố"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
-#, fuzzy, php-format
+#: lib/command.php:442 lib/mail.php:271
+#, php-format
 msgid "Homepage: %s"
-msgstr "Trang chủ hoặc Blog: %s"
-
-#. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
-#, fuzzy, php-format
-msgid "About: %s"
-msgstr "Giới thiệu"
+msgstr "Trang chủ hoặc Blog"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5911,150 +3974,87 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, fuzzy, php-format
-msgid "Direct message to %s sent"
-msgstr "Tin nhắn riêng"
-
-#: lib/command.php:494
-#, fuzzy
-msgid "Error sending direct message."
-msgstr "Thư bạn đã gửi"
-
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "Bạn không thể đăng ký nếu không đồng ý các điều khoản."
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "Xóa tin nhắn"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "Tin đã gửi"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "Có lỗi xảy ra khi lưu tin nhắn."
+msgstr "Lỗi xảy ra khi tạo thành viên."
 
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "Trả lời tin nhắn này"
-
-#: lib/command.php:573
-#, fuzzy
-msgid "Error saving notice."
-msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
-#, fuzzy
-msgid "Can't subscribe to OMB profiles by command."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#: lib/command.php:634
-#, fuzzy, php-format
-msgid "Subscribed to %s"
-msgstr "Theo nhóm này"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
-#, fuzzy, php-format
-msgid "Unsubscribed from %s"
-msgstr "Hết theo"
-
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:685
-#, fuzzy
-msgid "Notification off."
-msgstr "Không có mã số xác nhận."
-
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-#, fuzzy
-msgid "Notification on."
-msgstr "Không có mã số xác nhận."
-
-#: lib/command.php:710
-msgid "Can't turn on notification."
-msgstr ""
-
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "Hết theo"
-
-#: lib/command.php:778
-#, fuzzy
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
-msgstr "Bạn chưa cập nhật thông tin riêng"
+msgstr "Bạn đã theo những người này:"
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "Bạn đã theo những người này:"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "Không thể tạo favorite."
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "Không thể tạo favorite."
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "Bạn chưa cập nhật thông tin riêng"
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "Bạn chưa cập nhật thông tin riêng"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -6096,11 +4096,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "Không có mã số xác nhận."
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -6125,11 +4120,6 @@ msgstr "Thay đổi bởi tin nhắn nhanh (IM)"
 msgid "Updates by SMS"
 msgstr "Thay đổi bởi SMS"
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "Kết nối"
-
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
 msgstr ""
@@ -6138,37 +4128,17 @@ msgstr ""
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-#, fuzzy
-msgid "Upload file"
-msgstr "Tải file"
-
-#: lib/designsettings.php:109
-#, fuzzy
-msgid ""
-"You can upload your personal background image. The maximum file size is 2MB."
-msgstr ""
-"Bạn có thể cập nhật hồ sơ cá nhân tại đây để mọi người có thể biết thông tin "
-"về bạn."
-
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
 msgstr ""
 
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
 msgid "Disfavor this notice"
-msgstr "cảnh báo tin nhắn"
+msgstr "Những tin nhắn ưa thích của %s"
 
 #: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
 msgid "Favor this notice"
-msgstr "Bạn muốn cảnh báo tin nhắn này?"
-
-#: lib/favorform.php:140
-#, fuzzy
-msgid "Favor"
-msgstr "Ưa thích"
+msgstr "Những tin nhắn ưa thích của %s"
 
 #: lib/feed.php:85
 msgid "RSS 1.0"
@@ -6198,16 +4168,6 @@ msgstr ""
 msgid "All"
 msgstr ""
 
-#: lib/galleryaction.php:139
-#, fuzzy
-msgid "Select tag to filter"
-msgstr "Chọn nhà cung cấp Mobile"
-
-#: lib/galleryaction.php:140
-#, fuzzy
-msgid "Tag"
-msgstr "Từ khóa"
-
 #: lib/galleryaction.php:141
 msgid "Choose a tag to narrow list"
 msgstr ""
@@ -6221,26 +4181,10 @@ msgstr ""
 msgid "Grant this user the \"%s\" role"
 msgstr ""
 
-#: lib/groupeditform.php:163
-#, fuzzy
-msgid "URL of the homepage or blog of the group or topic"
-msgstr "URL về Trang chính, Blog, hoặc hồ sơ cá nhân của bạn trên "
-
-#: lib/groupeditform.php:168
-#, fuzzy
-msgid "Describe the group or topic"
-msgstr "Nói về những sở thích của nhóm trong vòng 140 ký tự"
-
 #: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr "Nói về những sở thích của nhóm trong vòng 140 ký tự"
-
-#: lib/groupeditform.php:179
-#, fuzzy
-msgid ""
-"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "Bạn ở đâu, \"Thành phố, Tỉnh thành, Quốc gia\""
+msgstr ""
 
 #: lib/groupeditform.php:187
 #, php-format
@@ -6252,24 +4196,17 @@ msgid "Group"
 msgstr "Nhóm"
 
 #: lib/groupnav.php:101
-#, fuzzy
 msgid "Blocked"
-msgstr "Ban user"
+msgstr "Chặn người dùng"
 
 #: lib/groupnav.php:102
-#, fuzzy, php-format
-msgid "%s blocked users"
-msgstr "Ban user"
-
-#: lib/groupnav.php:108
 #, php-format
-msgid "Edit %s group properties"
-msgstr ""
+msgid "%s blocked users"
+msgstr "Chặn người dùng"
 
 #: lib/groupnav.php:113
-#, fuzzy
 msgid "Logo"
-msgstr "Thoát"
+msgstr "Đăng nhập"
 
 #: lib/groupnav.php:114
 #, php-format
@@ -6282,9 +4219,8 @@ msgid "Add or edit %s design"
 msgstr ""
 
 #: lib/groupsbymemberssection.php:71
-#, fuzzy
 msgid "Groups with most members"
-msgstr "Thành viên"
+msgstr ""
 
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
@@ -6304,13 +4240,6 @@ msgstr "Trang này không phải là phương tiện truyền thông mà bạn c
 msgid "Unsupported image file format."
 msgstr "Không hỗ trợ kiểu file ảnh này."
 
-#: lib/imagefile.php:88
-#, fuzzy, php-format
-msgid "That file is too big. The maximum file size is %s."
-msgstr ""
-"Bạn có thể cập nhật hồ sơ cá nhân tại đây để mọi người có thể biết thông tin "
-"về bạn."
-
 #: lib/imagefile.php:93
 msgid "Partial upload."
 msgstr "Upload từng phần."
@@ -6323,15 +4252,9 @@ msgstr "Hệ thống xảy ra lỗi trong khi tải file."
 msgid "Not an image or corrupt file."
 msgstr "File hỏng hoặc không phải là file ảnh."
 
-#: lib/imagefile.php:122
-#, fuzzy
-msgid "Lost our file."
-msgstr "Không có tin nhắn nào."
-
 #: lib/imagefile.php:163 lib/imagefile.php:224
-#, fuzzy
 msgid "Unknown file type"
-msgstr "Không hỗ trợ kiểu file ảnh này."
+msgstr ""
 
 #: lib/imagefile.php:244
 msgid "MB"
@@ -6351,25 +4274,13 @@ msgstr ""
 msgid "Unknown inbox source %d."
 msgstr ""
 
-#: lib/joinform.php:114
-#, fuzzy
-msgid "Join"
-msgstr "Đăng nhập"
-
-#: lib/leaveform.php:114
-#, fuzzy
-msgid "Leave"
-msgstr "Lưu"
-
 #: lib/logingroupnav.php:80
-#, fuzzy
 msgid "Login with a username and password"
-msgstr "Sai tên đăng nhập hoặc mật khẩu."
+msgstr "Tên đăng nhập hoặc mật khẩu không hợp lệ."
 
 #: lib/logingroupnav.php:86
-#, fuzzy
 msgid "Sign up for a new account"
-msgstr "Tạo tài khoản mới"
+msgstr ""
 
 #. TRANS: Subject for address confirmation email
 #: lib/mail.php:174
@@ -6378,7 +4289,7 @@ msgstr "Xac nhan dia chi email"
 
 #. TRANS: Body for address confirmation email.
 #: lib/mail.php:177
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Hey, %s.\n"
 "\n"
@@ -6393,21 +4304,6 @@ msgid ""
 "Thanks for your time, \n"
 "%s\n"
 msgstr ""
-"Chào, %1$s .\n"
-"\n"
-"Không biết có phải bạn là người vừa nhập địa chỉ email này trên %2$s.\n"
-"\n"
-"Nếu bạn là người nhập, và bạn muốn xác nhận lại, hãy nhấn chuột vào đường "
-"dẫn dưới đây: \n"
-"\n"
-"\t%3$s\n"
-"\n"
-"Nếu không phải bạn, hãy bỏ qua tin nhắn này.\n"
-"\n"
-"Cảm ơn bạn đã bỏ thời gian để đọc thư,\n"
-"\n"
-"%4$s\n"
-"\n"
 
 #. TRANS: Subject of new-subscriber notification e-mail
 #: lib/mail.php:243
@@ -6424,7 +4320,7 @@ msgstr ""
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s is now listening to your notices on %2$s.\n"
 "\n"
@@ -6437,18 +4333,12 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
-"%1$s đang theo dõi các tin nhắn của bạn trên %2$s.\n"
-"\n"
-"\t%3$s\n"
-"\n"
-"Người bạn trung thành của bạn,\n"
-"%4$s.\n"
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
-msgstr "Thành phố: %s"
+msgstr "Lý lịch"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6478,12 +4368,6 @@ msgstr ""
 "Chúc sức khỏe,\n"
 "%4$s"
 
-#. TRANS: Subject line for SMS-by-email notification messages
-#: lib/mail.php:433
-#, fuzzy, php-format
-msgid "%s status"
-msgstr "Trạng thái của %1$s vào %2$s"
-
 #. TRANS: Subject line for SMS-by-email address confirmation message
 #: lib/mail.php:460
 msgid "SMS confirmation"
@@ -6491,9 +4375,9 @@ msgstr "Xác nhận SMS"
 
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
-#, fuzzy, php-format
+#, php-format
 msgid "%s: confirm you own this phone number with this code:"
-msgstr "Đó không phải là số điện thoại của bạn."
+msgstr ""
 
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
@@ -6560,13 +4444,15 @@ msgstr ""
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s da them tin nhan cua ban vao danh sach tin nhan ua thich"
+msgstr ""
+"Gửi email thông báo tôi khi có ai đó lưu tin nhắn của tôi vào danh sách ưa "
+"thích của họ."
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
 "\n"
@@ -6585,19 +4471,6 @@ msgid ""
 "Faithfully yours,\n"
 "%6$s\n"
 msgstr ""
-"%1$s vừa thêm tin nhắn của bạn trên %2$s vào danh sách tin nhắn ưa thích của "
-"mình.\n"
-"\n"
-"Bạn có thể xem lại nội dung tin nhắn của bạn tại đây:\n"
-"\n"
-"%3$s\n"
-"\n"
-"Bạn có thể xem danh sách tin nhắn ưa thích của %1$s tại đây: \n"
-"\n"
-"%4$s\n"
-"\n"
-"Chúc sức khỏe,\n"
-"%5$s\n"
 
 #. TRANS: Line in @-reply notification e-mail. %s is conversation URL.
 #: lib/mail.php:651
@@ -6608,11 +4481,6 @@ msgid ""
 "\t%s"
 msgstr ""
 
-#: lib/mail.php:657
-#, php-format
-msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
-
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
 #, php-format
@@ -6651,15 +4519,9 @@ msgid ""
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
 
-#: lib/mailbox.php:227 lib/noticelist.php:505
-#, fuzzy
+#: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr " từ "
-
-#: lib/mailhandler.php:37
-#, fuzzy
-msgid "Could not parse message."
-msgstr "Không thể cập nhật thành viên."
+msgstr ""
 
 #: lib/mailhandler.php:42
 msgid "Not a registered user."
@@ -6673,11 +4535,6 @@ msgstr "Xin lỗi, đó không phải là địa chỉ email mà bạn nhập v
 msgid "Sorry, no incoming email allowed."
 msgstr "Xin lỗi, không có địa chỉ email cho phép."
 
-#: lib/mailhandler.php:228
-#, fuzzy, php-format
-msgid "Unsupported message type: %s"
-msgstr "Không hỗ trợ kiểu file ảnh này."
-
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
 msgstr ""
@@ -6716,11 +4573,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
-msgid "Could not determine file's MIME type."
-msgstr "Không thể lấy lại các tin nhắn ưa thích"
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6731,55 +4583,37 @@ msgstr ""
 msgid "%s is not a supported file type on this server."
 msgstr ""
 
-#: lib/messageform.php:120
-#, fuzzy
-msgid "Send a direct notice"
-msgstr "Xóa tin nhắn"
-
 #: lib/messageform.php:146
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "Nhiều hơn 6 ký tự"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr "Gửi"
-
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "Thông báo mới"
+msgstr ""
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr "Bạn đang làm gì thế, %s?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-#, fuzzy
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr "Không thể lưu hồ sơ cá nhân."
+msgstr ""
 
-#: lib/noticeform.php:215
-#, fuzzy
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr "Không thể lưu hồ sơ cá nhân."
+msgstr ""
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6787,9 +4621,8 @@ msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of north
 #: lib/noticelist.php:436
-#, fuzzy
 msgid "N"
-msgstr "Không"
+msgstr ""
 
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
@@ -6815,44 +4648,29 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:567
-#, fuzzy
-msgid "in context"
-msgstr "Không có nội dung!"
-
-#: lib/noticelist.php:602
-#, fuzzy
-msgid "Repeated by"
-msgstr "Tạo"
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
-#: lib/noticelist.php:629
-#, fuzzy
+#: lib/noticelist.php:630
 msgid "Reply to this notice"
-msgstr "Trả lời tin nhắn này"
+msgstr "Không thể xóa tin nhắn này."
 
-#: lib/noticelist.php:630
+#: lib/noticelist.php:631
 msgid "Reply"
 msgstr "Trả lời"
 
-#: lib/noticelist.php:674
-#, fuzzy
+#: lib/noticelist.php:675
 msgid "Notice repeated"
-msgstr "Tin đã gửi"
+msgstr "Tìm kiếm thông báo"
 
 #: lib/nudgeform.php:116
-#, fuzzy
 msgid "Nudge this user"
-msgstr "Tin đã gửi"
+msgstr "Bỏ chặn người dùng này"
 
 #: lib/nudgeform.php:128
-#, fuzzy
 msgid "Nudge"
-msgstr "Tin đã gửi"
-
-#: lib/nudgeform.php:128
-#, fuzzy
-msgid "Send a nudge to this user"
-msgstr "Bạn đã theo những người này:"
+msgstr ""
 
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
@@ -6870,11 +4688,6 @@ msgstr "Lỗi xảy ra khi cập nhật hồ sơ cá nhân"
 msgid "Error inserting remote profile"
 msgstr "Lỗi xảy ra khi thêm mới hồ sơ cá nhân"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "Xóa tin nhắn"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "Không thể chèn thêm vào đăng nhận."
@@ -6908,14 +4721,9 @@ msgid "Your sent messages"
 msgstr "Thư bạn đã gửi"
 
 #: lib/personaltagcloudsection.php:56
-#, fuzzy, php-format
+#, php-format
 msgid "Tags in %s's notices"
-msgstr "cảnh báo tin nhắn"
-
-#: lib/plugin.php:115
-#, fuzzy
-msgid "Unknown"
-msgstr "Không tìm thấy action"
+msgstr ""
 
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
@@ -6929,15 +4737,6 @@ msgstr "Tất cả đăng nhận"
 msgid "Subscribers"
 msgstr "Bạn này theo tôi"
 
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "Bạn này theo tôi"
-
-#: lib/profileaction.php:191
-msgid "User ID"
-msgstr ""
-
 #: lib/profileaction.php:196
 msgid "Member since"
 msgstr "Gia nhập từ"
@@ -6947,11 +4746,6 @@ msgstr "Gia nhập từ"
 msgid "Daily average"
 msgstr ""
 
-#: lib/profileaction.php:264
-#, fuzzy
-msgid "All groups"
-msgstr "Nhóm"
-
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
 msgstr ""
@@ -6960,68 +4754,35 @@ msgstr ""
 msgid "Public"
 msgstr "Công cộng"
 
-#: lib/publicgroupnav.php:82
-#, fuzzy
-msgid "User groups"
-msgstr "Hồ sơ"
-
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
-#, fuzzy
 msgid "Recent tags"
-msgstr "Các từ khóa hiện tại"
-
-#: lib/publicgroupnav.php:88
-msgid "Featured"
 msgstr ""
 
-#: lib/publicgroupnav.php:92
-#, fuzzy
-msgid "Popular"
-msgstr "Tên tài khoản"
-
 #: lib/redirectingaction.php:95
-#, fuzzy
 msgid "No return-to arguments."
-msgstr "Không có tài liệu nào."
+msgstr ""
 
 #: lib/repeatform.php:107
-#, fuzzy
 msgid "Repeat this notice?"
-msgstr "Trả lời tin nhắn này"
+msgstr "Không thể xóa tin nhắn này."
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "Có"
 
 #: lib/repeatform.php:132
-#, fuzzy
 msgid "Repeat this notice"
-msgstr "Trả lời tin nhắn này"
+msgstr "Không thể xóa tin nhắn này."
 
 #: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr "Ban user"
+msgstr ""
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
 msgstr ""
 
-#: lib/sandboxform.php:67
-#, fuzzy
-msgid "Sandbox"
-msgstr "Hộp thư đến"
-
-#: lib/sandboxform.php:78
-#, fuzzy
-msgid "Sandbox this user"
-msgstr "Bỏ chặn người dùng này"
-
-#: lib/searchaction.php:120
-#, fuzzy
-msgid "Search site"
-msgstr "Tìm kiếm"
-
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
 msgstr ""
@@ -7030,11 +4791,6 @@ msgstr ""
 msgid "Search"
 msgstr "Tìm kiếm"
 
-#: lib/searchaction.php:162
-#, fuzzy
-msgid "Search help"
-msgstr "Tìm kiếm"
-
 #: lib/searchgroupnav.php:80
 msgid "People"
 msgstr "Tên tài khoản"
@@ -7047,11 +4803,6 @@ msgstr "Tìm kiếm mọi người trên trang web này"
 msgid "Find content of notices"
 msgstr "Tìm theo nội dung của tin nhắn"
 
-#: lib/searchgroupnav.php:85
-#, fuzzy
-msgid "Find groups on this site"
-msgstr "Tìm kiếm mọi người trên trang web này"
-
 #: lib/section.php:89
 msgid "Untitled section"
 msgstr ""
@@ -7061,24 +4812,17 @@ msgid "More..."
 msgstr ""
 
 #: lib/silenceform.php:67
-#, fuzzy
 msgid "Silence"
-msgstr "Thông báo mới"
+msgstr ""
 
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "Ban user"
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "Đăng nhận từ xa"
+msgstr "Bỏ chặn người dùng này"
 
 #: lib/subgroupnav.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "People subscribed to %s"
-msgstr "Theo nhóm này"
+msgstr "Đăng nhận từ xa"
 
 #: lib/subgroupnav.php:99
 #, php-format
@@ -7089,13 +4833,6 @@ msgstr ""
 msgid "Invite"
 msgstr "Thư mời"
 
-#: lib/subgroupnav.php:106
-#, fuzzy, php-format
-msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-"Điền địa chỉ email và nội dung tin nhắn để gửi thư mời bạn bè và đồng nghiệp "
-"của bạn tham gia vào dịch vụ này."
-
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
@@ -7107,9 +4844,8 @@ msgid "People Tagcloud as tagged"
 msgstr ""
 
 #: lib/tagcloudsection.php:56
-#, fuzzy
 msgid "None"
-msgstr "Không"
+msgstr ""
 
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
@@ -7119,13 +4855,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "Cập nhật hình đại diện không thành công."
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -7150,34 +4879,18 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "Lỗi xảy ra khi cập nhật hồ sơ cá nhân"
-
 #: lib/topposterssection.php:74
-#, fuzzy
 msgid "Top posters"
-msgstr "Top posters"
+msgstr ""
 
 #: lib/unsandboxform.php:69
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-#, fuzzy
-msgid "Unsandbox this user"
-msgstr "Bỏ chặn người dùng này"
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-#, fuzzy
-msgid "Unsilence this user"
-msgstr "Bỏ chặn người dùng này"
-
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
 msgid "Unsubscribe from this user"
 msgstr "Ngừng đăng ký từ người dùng này"
@@ -7186,52 +4899,21 @@ msgstr "Ngừng đăng ký từ người dùng này"
 msgid "Unsubscribe"
 msgstr "Hết theo"
 
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "Người dùng không có thông tin."
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "Hình đại diện"
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-#, fuzzy
-msgid "User actions"
-msgstr "Không tìm thấy action"
-
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
 msgstr ""
 
-#: lib/userprofile.php:263
-#, fuzzy
-msgid "Edit profile settings"
-msgstr "Các thiết lập cho Hồ sơ cá nhân"
-
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr ""
 
-#: lib/userprofile.php:287
-#, fuzzy
-msgid "Send a direct message to this user"
-msgstr "Bạn đã theo những người này:"
-
-#: lib/userprofile.php:288
-#, fuzzy
-msgid "Message"
-msgstr "Tin mới nhất"
-
 #: lib/userprofile.php:326
 msgid "Moderate"
 msgstr ""
 
 #: lib/userprofile.php:364
-#, fuzzy
 msgid "User role"
-msgstr "Hồ sơ"
+msgstr "Người dùng không có thông tin."
 
 #: lib/userprofile.php:366
 msgctxt "role"
@@ -7244,70 +4926,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "vài giây trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr "1 phút trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr "%d phút trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr "1 giờ trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr "%d giờ trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr "1 ngày trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr "%d ngày trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr "1 tháng trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr "%d tháng trước"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr "1 năm trước"
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "Trang chủ không phải là URL"
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
index 0a982b2e44425b15f026b785e9e8676dc71c3902..5f7b70af36b46a030d9abbff2ed2cfa50bb68bf8 100644 (file)
@@ -3,6 +3,8 @@
 # Author@translatewiki.net: Chenxiaoqino
 # Author@translatewiki.net: Shizhao
 # Author@translatewiki.net: Sweeite012f
+# Author@translatewiki.net: Tommyang
+# Author@translatewiki.net: ZhengYiFeng
 # --
 # Messages of identi.ca
 # Copyright (C) 2008 Gouki <gouki@goukihq.org>
@@ -12,12 +14,12 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:13:25+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:46+0000\n"
 "Language-Team: Simplified Chinese\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: zh-hans\n"
 "X-Message-Group: out-statusnet\n"
@@ -26,19 +28,16 @@ msgstr ""
 #. TRANS: Page title
 #. TRANS: Menu item for site administration
 #: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
 msgid "Access"
-msgstr "接受"
+msgstr "访问"
 
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
-#, fuzzy
 msgid "Site access settings"
-msgstr "头像设置"
+msgstr "网站访问设置"
 
 #. TRANS: Form legend for registration form.
 #: actions/accessadminpanel.php:161
-#, fuzzy
 msgid "Registration"
 msgstr "注册"
 
@@ -49,10 +48,9 @@ msgstr "要禁止匿名用户(未登录)浏览网站吗?"
 
 #. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
 #: actions/accessadminpanel.php:167
-#, fuzzy
 msgctxt "LABEL"
 msgid "Private"
-msgstr "é\9a\90ç§\81"
+msgstr "é\9d\9eå\85¬å¼\80"
 
 #. TRANS: Checkbox instructions for admin setting "Invite only"
 #: actions/accessadminpanel.php:174
@@ -61,9 +59,8 @@ msgstr "只允许邀请注册。"
 
 #. TRANS: Checkbox label for configuring site as invite only.
 #: actions/accessadminpanel.php:176
-#, fuzzy
 msgid "Invite only"
-msgstr "邀请"
+msgstr "邀请"
 
 #. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
 #: actions/accessadminpanel.php:183
@@ -73,13 +70,12 @@ msgstr "禁止新用户注册"
 #. TRANS: Checkbox label for disabling new user registrations.
 #: actions/accessadminpanel.php:185
 msgid "Closed"
-msgstr ""
+msgstr "封闭(不允许新用户注册)"
 
 #. TRANS: Title / tooltip for button to save access settings in site admin panel
 #: actions/accessadminpanel.php:202
-#, fuzzy
 msgid "Save access settings"
-msgstr "头像设置"
+msgstr "保存访问设置"
 
 #. TRANS: Button label to save e-mail preferences.
 #. TRANS: Button label to save IM preferences.
@@ -88,7 +84,6 @@ msgstr "头像设置"
 #: actions/accessadminpanel.php:203 actions/emailsettings.php:224
 #: actions/imsettings.php:184 actions/smssettings.php:209
 #: lib/applicationeditform.php:361
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Save"
 msgstr "保存"
@@ -96,10 +91,10 @@ msgstr "保存"
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
 msgstr "未找到此消息。"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -119,7 +114,7 @@ msgstr "未找到此消息。"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "没有这个用户。"
@@ -171,6 +166,7 @@ msgid ""
 "Try subscribing to more people, [join a group](%%action.groups%%) or post "
 "something yourself."
 msgstr ""
+"尝试关注更多的人、[加入一个小组] (%%action.groups%%) 或者自己发一些东西。"
 
 #. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
 #: actions/all.php:146
@@ -179,6 +175,8 @@ msgid ""
 "You can try to [nudge %1$s](../%2$s) from their profile or [post something "
 "to them](%%%%action.newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
+"您可以试着到他们的资料页 [呼叫%1$s](../%2$s) 他们或者 [给他们发消息](%%%%"
+"action.newnotice%%%%?status_textarea=%3$s)。"
 
 #: actions/all.php:149 actions/replies.php:210 actions/showstream.php:211
 #, php-format
@@ -186,11 +184,12 @@ msgid ""
 "Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
 "post a notice to them."
 msgstr ""
+"现在就[注册一个帐号](%%%%action.register%%%%)并呼叫或者发一条消息给%s。"
 
 #. TRANS: H1 text
 #: actions/all.php:182
 msgid "You and friends"
-msgstr "你和好友"
+msgstr "您和好友们"
 
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
@@ -198,7 +197,7 @@ msgstr "你和好友"
 #: actions/apitimelinehome.php:122
 #, php-format
 msgid "Updates from %1$s and friends on %2$s!"
-msgstr "来自%2$s 上 %1$s 和好友的更新!"
+msgstr "%2$s上%1$s和好友们的更新!"
 
 #: actions/apiaccountratelimitstatus.php:72
 #: actions/apiaccountupdatedeliverydevice.php:94
@@ -222,9 +221,8 @@ msgstr "来自%2$s 上 %1$s 和好友的更新!"
 #: actions/apitimelineretweetedtome.php:121
 #: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
 #: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
 msgid "API method not found."
-msgstr "API 方法未实现!"
+msgstr "API方法没有找到。"
 
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
@@ -245,9 +243,9 @@ msgid ""
 "You must specify a parameter named 'device' with a value of one of: sms, im, "
 "none."
 msgstr ""
+"您必须指定一个名为'device'的参数,值可以是以下中的一个:sms, im, none。"
 
 #: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
 msgid "Could not update user."
 msgstr "无法更新用户。"
 
@@ -262,7 +260,6 @@ msgid "User has no profile."
 msgstr "用户没有个人信息。"
 
 #: actions/apiaccountupdateprofile.php:147
-#, fuzzy
 msgid "Could not save profile."
 msgstr "无法保存个人信息。"
 
@@ -276,7 +273,7 @@ msgstr "无法保存个人信息。"
 msgid ""
 "The server was unable to handle that much POST data (%s bytes) due to its "
 "current configuration."
-msgstr ""
+msgstr "服务器当前的设置无法处理这么多的 POST 数据(%s bytes)。"
 
 #: actions/apiaccountupdateprofilebackgroundimage.php:136
 #: actions/apiaccountupdateprofilebackgroundimage.php:146
@@ -285,56 +282,54 @@ msgstr ""
 #: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
 #: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
 #: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
 msgid "Unable to save your design settings."
-msgstr "无法保存 Twitter 设置!"
+msgstr "无法保存您的设计设置。"
 
 #: actions/apiaccountupdateprofilebackgroundimage.php:187
 #: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
 msgid "Could not update your design."
-msgstr "无法更新用户。"
+msgstr "无法更新您的设计。"
 
 #: actions/apiblockcreate.php:105
 msgid "You cannot block yourself!"
-msgstr ""
+msgstr "您不能屏蔽自己!"
 
 #: actions/apiblockcreate.php:126
 msgid "Block user failed."
-msgstr "阻止用户失败。"
+msgstr "屏蔽用户失败。"
 
 #: actions/apiblockdestroy.php:114
 msgid "Unblock user failed."
-msgstr "取消阻止用户失败。"
+msgstr "取消屏蔽用户失败。"
 
 #: actions/apidirectmessage.php:89
-#, fuzzy, php-format
+#, php-format
 msgid "Direct messages from %s"
-msgstr "发给 %s 的直接消息"
+msgstr "%s发来的私信"
 
 #: actions/apidirectmessage.php:93
 #, php-format
 msgid "All the direct messages sent from %s"
-msgstr "%s 发送的直接消息"
+msgstr "所有来自%s的私信"
 
 #: actions/apidirectmessage.php:101
 #, php-format
 msgid "Direct messages to %s"
-msgstr "发给 %s 的直接消息"
+msgstr "发给%s的私信"
 
 #: actions/apidirectmessage.php:105
 #, php-format
 msgid "All the direct messages sent to %s"
-msgstr "发给 %s 的直接消息"
+msgstr "所有发给%s的私信"
 
 #: actions/apidirectmessagenew.php:118
 msgid "No message text!"
 msgstr "消息没有正文!"
 
 #: actions/apidirectmessagenew.php:127 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max message size is %d chars."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "太长了。最长的信息长度是%d个字符。"
 
 #: actions/apidirectmessagenew.php:138
 msgid "Recipient user not found."
@@ -342,69 +337,64 @@ msgstr "未找到收件人。"
 
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
-msgstr "无法向并非好友的用户发送直接消息。"
+msgstr "不能给未成为好友的用户发送私信。"
 
 #: actions/apifavoritecreate.php:109 actions/apifavoritedestroy.php:110
 #: actions/apistatusesdestroy.php:121
 msgid "No status found with that ID."
-msgstr "没有找到此ID的信息。"
+msgstr "没有找到此 ID 的消息。"
 
 #: actions/apifavoritecreate.php:120
-#, fuzzy
 msgid "This status is already a favorite."
-msgstr "已收藏此通告!"
+msgstr "已收藏此状态。"
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
 msgstr "无法创建收藏。"
 
 #: actions/apifavoritedestroy.php:123
-#, fuzzy
 msgid "That status is not a favorite."
-msgstr "此通告未被收藏!"
+msgstr "此状态未被收藏。"
 
 #: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
 msgid "Could not delete favorite."
 msgstr "无法删除收藏。"
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
-msgstr "无法订阅用户:%s 已在订阅列表中。"
+msgstr "无法关注用户:未找到用户。"
 
 #: actions/apifriendshipscreate.php:118
 #, php-format
 msgid "Could not follow user: %s is already on your list."
-msgstr "无法订阅用户:%s 已在订阅列表中。"
+msgstr "无法关注用户:您已经关注了%s。"
 
 #: actions/apifriendshipsdestroy.php:109
-#, fuzzy
 msgid "Could not unfollow user: User not found."
-msgstr "无法订阅用户:%s 已在订阅列表中。"
+msgstr "无法取消关注用户:未找到用户。"
 
 #: actions/apifriendshipsdestroy.php:120
 msgid "You cannot unfollow yourself."
-msgstr ""
+msgstr "您不能取消关注自己。"
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
-msgstr ""
+msgstr "必须提供两个有效的 ID 或用户昵称。"
 
 #: actions/apifriendshipsshow.php:134
-#, fuzzy
 msgid "Could not determine source user."
-msgstr "无法更新用户。"
+msgstr "无法确定源用户。"
 
 #: actions/apifriendshipsshow.php:142
-#, fuzzy
 msgid "Could not find target user."
-msgstr "æ\97 æ³\95æ\9b´æ\96°用户。"
+msgstr "æ\97 æ³\95æ\89¾å\88°ç\9b®æ \87用户。"
 
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
 #: actions/register.php:212
 msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "昵称只能使用小写字母和数字,不包含空格。"
+msgstr "昵称只能使用小写字母和数字且不能使用空格。"
 
 #: actions/apigroupcreate.php:176 actions/editgroup.php:190
 #: actions/newgroup.php:130 actions/profilesettings.php:238
@@ -433,9 +423,9 @@ msgstr "全名过长(不能超过 255 个字符)。"
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "位置过长(不能超过255个字符)。"
+msgstr "描述过长(不能超过%d 个字符)。"
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -447,23 +437,23 @@ msgstr "位置过长(不能超过255个字符)。"
 #: actions/newgroup.php:159
 #, php-format
 msgid "Too many aliases! Maximum %d."
-msgstr "太å¤\9aå\8c\96名了!最多%d 个。"
+msgstr "太å¤\9aå\88«名了!最多%d 个。"
 
 #: actions/apigroupcreate.php:267
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\"."
-msgstr "电子邮件地址 %s 不正确"
+msgstr "无效的别名:“%s”。"
 
 #: actions/apigroupcreate.php:276 actions/editgroup.php:232
 #: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Alias \"%s\" already in use. Try another one."
-msgstr "昵称已被使用,换一个吧。"
+msgstr "%s这个别名已被使用,换一个吧。"
 
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
-msgstr "昵称不能和化名相同。"
+msgstr "别名不能和昵称相同。"
 
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
@@ -471,53 +461,58 @@ msgstr "昵称不能和化名相同。"
 msgid "Group not found."
 msgstr "小组未找到。"
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
+#. TRANS: Error text shown a user tries to join a group they already are a member of.
+#: actions/apigroupjoin.php:111 actions/joingroup.php:100 lib/command.php:336
 msgid "You are already a member of that group."
-msgstr "您已经是该组成员"
+msgstr "您已经是该小组成员。"
 
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
+#. TRANS: Error text shown when a user tries to join a group they are blocked from joining.
+#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:341
 msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "您已经被该小组的管理员屏蔽。"
 
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
-#, fuzzy, php-format
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
+#, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr "æ\97 æ³\95æ\9b´æ\96°组"
+msgstr "æ\97 æ³\95æ\8a\8aç\94¨æ\88·%1$sæ·»å\8a å\88°%2$så°\8f组"
 
 #: actions/apigroupleave.php:115
-#, fuzzy
 msgid "You are not a member of this group."
-msgstr "您未告知此个人信息"
+msgstr "您不是该小组成员。"
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr "无法创建组。"
+msgstr "无法把用户%1$s从%2$s小组删除"
 
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "%s's groups"
-msgstr "%s ç¾¤组"
+msgstr "%s ç\9a\84å°\8f组"
 
 #. TRANS: Meant to convey the user %2$s is a member of each of the groups listed on site %1$s
 #: actions/apigrouplist.php:108
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups %2$s is a member of."
-msgstr "%s 组是成员组成了"
+msgstr "%1$s 个小组,%2$s 是其中一个小组成员。"
 
 #. TRANS: Message is used as a title. %s is a site name.
 #. TRANS: Message is used as a page title. %s is a nick name.
 #: actions/apigrouplistall.php:92 actions/usergroups.php:63
 #, php-format
 msgid "%s groups"
-msgstr "%s ç¾¤组"
+msgstr "%s ç\9a\84å°\8f组"
 
 #: actions/apigrouplistall.php:96
-#, fuzzy, php-format
+#, php-format
 msgid "groups on %s"
-msgstr "组动作"
+msgstr "在%s上的小组"
 
 #: actions/apimediaupload.php:99
 msgid "Upload failed."
@@ -525,12 +520,11 @@ msgstr "上传失败"
 
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "没有提供 oauth_token 参数"
 
 #: actions/apioauthauthorize.php:106
-#, fuzzy
 msgid "Invalid token."
-msgstr "大小不正确。"
+msgstr "无效的 token。"
 
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
@@ -548,32 +542,31 @@ msgstr "大小不正确。"
 #: actions/unsubscribe.php:69 actions/userauthorization.php:52
 #: lib/designsettings.php:294
 msgid "There was a problem with your session token. Try again, please."
-msgstr "会话标识有问题,请重试。"
+msgstr "您的 session 出现了一个问题,请重试。"
 
 #: actions/apioauthauthorize.php:135
-#, fuzzy
 msgid "Invalid nickname / password!"
 msgstr "用户名或密码不正确。"
 
 #: actions/apioauthauthorize.php:159
 msgid "Database error deleting OAuth application user."
-msgstr ""
+msgstr "删除 OAuth 应用用户时数据库出错。"
 
 #: actions/apioauthauthorize.php:185
 msgid "Database error inserting OAuth application user."
-msgstr ""
+msgstr "插入 OAuth 应用用户时数据库出错。"
 
 #: actions/apioauthauthorize.php:214
 #, php-format
 msgid ""
 "The request token %s has been authorized. Please exchange it for an access "
 "token."
-msgstr ""
+msgstr "Request token 已被批准。请为它换一个 access token。"
 
 #: actions/apioauthauthorize.php:227
 #, php-format
 msgid "The request token %s has been denied and revoked."
-msgstr ""
+msgstr "%s的 request token 被拒绝并已被取消。"
 
 #. TRANS: Message given submitting a form with an unknown action in e-mail settings.
 #. TRANS: Message given submitting a form with an unknown action in IM settings.
@@ -589,11 +582,11 @@ msgstr "未预料的表单提交。"
 
 #: actions/apioauthauthorize.php:259
 msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "一个应用想连接到您的账号"
 
 #: actions/apioauthauthorize.php:276
 msgid "Allow or deny access"
-msgstr ""
+msgstr "允许或阻止访问"
 
 #: actions/apioauthauthorize.php:292
 #, php-format
@@ -602,6 +595,8 @@ msgid ""
 "the ability to <strong>%3$s</strong> your %4$s account data. You should only "
 "give access to your %4$s account to third parties you trust."
 msgstr ""
+"来自<strong>%2$s</strong>的<strong>%1$s</strong>应用希望能够<strong>%3$s</"
+"strong>您的%4$s账户数据。您应该只允许您信任的第三方程序访问您的%4$s账户。"
 
 #. TRANS: Main menu option when logged in for access to user settings
 #: actions/apioauthauthorize.php:310 lib/action.php:450
@@ -624,16 +619,15 @@ msgstr "密码"
 
 #: actions/apioauthauthorize.php:328
 msgid "Deny"
-msgstr ""
+msgstr "阻止"
 
 #: actions/apioauthauthorize.php:334
-#, fuzzy
 msgid "Allow"
-msgstr "å\85¨é\83¨"
+msgstr "å\85\81许"
 
 #: actions/apioauthauthorize.php:351
 msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "允许或阻止对您账户信息的访问。"
 
 #: actions/apistatusesdestroy.php:112
 msgid "This method requires a POST or DELETE."
@@ -646,63 +640,61 @@ msgstr "您不能删除其他用户的状态。"
 #: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
 #: actions/deletenotice.php:52 actions/shownotice.php:92
 msgid "No such notice."
-msgstr "没有这份通告。"
+msgstr "没有这条消息。"
 
-#: actions/apistatusesretweet.php:83
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
-msgstr "无法开启通告。"
+msgstr "不能转发您自己的消息。"
 
-#: actions/apistatusesretweet.php:91
-#, fuzzy
+#. TRANS: Error text shown when trying to repeat an notice that was already repeated by the user.
+#: actions/apistatusesretweet.php:91 lib/command.php:544
 msgid "Already repeated that notice."
-msgstr "无法删除通告。"
+msgstr "已转发了该消息。"
 
 #: actions/apistatusesshow.php:139
 msgid "Status deleted."
-msgstr ""
+msgstr "消息已删除。"
 
 #: actions/apistatusesshow.php:145
 msgid "No status with that ID found."
-msgstr "没有找到此ID的信息。"
+msgstr "没有找到此 ID 的消息。"
 
 #: actions/apistatusesupdate.php:221
 msgid "Client must provide a 'status' parameter with a value."
-msgstr ""
+msgstr "客户端必须提供一个“状态”参数与数值。"
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
+#: actions/apistatusesupdate.php:242 actions/newnotice.php:157
 #: lib/mailhandler.php:60
-#, fuzzy, php-format
+#, php-format
 msgid "That's too long. Max notice size is %d chars."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "太长了。最长的消息长度是%d个字符。"
 
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
-#, fuzzy
 msgid "Not found."
-msgstr "小组未找到。"
+msgstr "未找到。"
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
-msgstr ""
+msgstr "每条消息最长%d字符,包括附件的链接 URL。"
 
 #: actions/apisubscriptions.php:232 actions/apisubscriptions.php:262
-#, fuzzy
 msgid "Unsupported format."
-msgstr "不支持这种图像格式。"
+msgstr "不支持格式。"
 
 #: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Favorites from %2$s"
 msgstr "%1$s 的 %2$s 状态"
 
 #: actions/apitimelinefavorites.php:119
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
 msgstr "回复 %2$s / %3$s 的 %1$s 更新。"
 
 #: actions/apitimelinementions.php:118
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s / Updates mentioning %2$s"
 msgstr "%1$s 的 %2$s 状态"
 
@@ -714,41 +706,40 @@ msgstr "回复 %2$s / %3$s 的 %1$s 更新。"
 #: actions/apitimelinepublic.php:197 actions/publicrss.php:103
 #, php-format
 msgid "%s public timeline"
-msgstr "%s 公众时间表"
+msgstr "%s 公共时间线"
 
 #: actions/apitimelinepublic.php:202 actions/publicrss.php:105
 #, php-format
 msgid "%s updates from everyone!"
-msgstr "来自所有人的 %s 消息!"
+msgstr "%s条来自所有人的消息!"
 
 #: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
 msgid "Repeated to %s"
-msgstr "%s 的回复"
+msgstr "转发给%s"
 
 #: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
+#, php-format
 msgid "Repeats of %s"
-msgstr "%s 的回复"
+msgstr "%s 的转发"
 
 #: actions/apitimelinetag.php:105 actions/tag.php:67
 #, php-format
 msgid "Notices tagged with %s"
-msgstr "带 %s 标签的通告"
+msgstr "带 %s 标签的消息"
 
 #: actions/apitimelinetag.php:107 actions/tagrss.php:65
-#, fuzzy, php-format
+#, php-format
 msgid "Updates tagged with %1$s on %2$s!"
-msgstr "%2$s 上 %1$s 的更新!"
+msgstr ""
 
 #: actions/apitrends.php:87
 msgid "API method under construction."
 msgstr "API 方法尚未实现。"
 
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
-msgstr "没æ\9c\89è¿\99份é\80\9aå\91\8a。"
+msgstr "没æ\9c\89è¿\99个é\99\84件。"
 
 #: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
 #: actions/editgroup.php:84 actions/groupdesignsettings.php:84
@@ -772,16 +763,15 @@ msgid "Avatar"
 msgstr "头像"
 
 #: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
 msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "您可以上传您的个人头像。文件大小限制在%s以下。"
 
 #: actions/avatarsettings.php:106 actions/avatarsettings.php:185
 #: actions/grouplogo.php:181 actions/remotesubscribe.php:191
 #: actions/userauthorization.php:72 actions/userrss.php:108
-#, fuzzy
 msgid "User without matching profile."
-msgstr "用户没有个人信息。"
+msgstr "用户没有相应个人信息。"
 
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
@@ -791,7 +781,7 @@ msgstr "头像设置"
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:202 actions/grouplogo.php:262
 msgid "Original"
-msgstr "原的"
+msgstr "原的"
 
 #: actions/avatarsettings.php:142 actions/avatarsettings.php:217
 #: actions/grouplogo.php:213 actions/grouplogo.php:274
@@ -800,9 +790,8 @@ msgstr "预览"
 
 #: actions/avatarsettings.php:149 actions/showapplication.php:252
 #: lib/deleteuserform.php:66 lib/noticelist.php:657
-#, fuzzy
 msgid "Delete"
-msgstr "删除通告"
+msgstr "删除"
 
 #: actions/avatarsettings.php:166 actions/grouplogo.php:236
 msgid "Upload"
@@ -813,13 +802,12 @@ msgid "Crop"
 msgstr "剪裁"
 
 #: actions/avatarsettings.php:305
-#, fuzzy
 msgid "No file uploaded."
-msgstr "部分上传。"
+msgstr "上传文件未成功。"
 
 #: actions/avatarsettings.php:332
 msgid "Pick a square area of the image to be your avatar"
-msgstr "请选择一块方形区域作为的头像"
+msgstr "请选择一块方形区域作为的头像"
 
 #: actions/avatarsettings.php:347 actions/grouplogo.php:380
 msgid "Lost our file data."
@@ -834,19 +822,16 @@ msgid "Failed updating avatar."
 msgstr "更新头像失败。"
 
 #: actions/avatarsettings.php:397
-#, fuzzy
 msgid "Avatar deleted."
-msgstr "头像已更新。"
+msgstr "头像已删除。"
 
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
-msgstr "您已订阅这些用户:"
+msgstr "您已经屏蔽该用户。"
 
 #: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
-#, fuzzy
 msgid "Block user"
-msgstr "阻止用户失败。"
+msgstr "屏蔽用户失败。"
 
 #: actions/block.php:138
 msgid ""
@@ -854,6 +839,8 @@ msgid ""
 "unsubscribed from you, unable to subscribe to you in the future, and you "
 "will not be notified of any @-replies from them."
 msgstr ""
+"您确定要屏蔽这个用户吗?屏蔽后,会取消这个用户对您的关注,并且以后也无法关注"
+"您,您也不会收到任何来自这个用户的@回复提醒。"
 
 #. TRANS: Button label on the user block form.
 #. TRANS: Button label on the delete application form.
@@ -865,13 +852,13 @@ msgstr ""
 #: actions/groupblock.php:178
 msgctxt "BUTTON"
 msgid "No"
-msgstr ""
+msgstr ""
 
 #. TRANS: Submit button title for 'No' when blocking a user.
 #. TRANS: Submit button title for 'No' when deleting a user.
 #: actions/block.php:157 actions/deleteuser.php:156
 msgid "Do not block this user"
-msgstr ""
+msgstr "不要屏蔽这个用户"
 
 #. TRANS: Button label on the user block form.
 #. TRANS: Button label on the delete application form.
@@ -881,21 +868,21 @@ msgstr ""
 #: actions/block.php:160 actions/deleteapplication.php:161
 #: actions/deletenotice.php:154 actions/deleteuser.php:159
 #: actions/groupblock.php:185
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Yes"
-msgstr ""
+msgstr "确定"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user.
 #: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-#, fuzzy
 msgid "Block this user"
-msgstr "å\91¼å\8f«这个用户"
+msgstr "å±\8fè\94½这个用户"
 
 #: actions/block.php:187
 msgid "Failed to save block information."
-msgstr "保存阻止信息失败。"
+msgstr "保存屏蔽信息失败。"
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -905,45 +892,42 @@ msgstr "保存阻止信息失败。"
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "没有这个组。"
 
 #: actions/blockedfromgroup.php:97
 #, php-format
 msgid "%s blocked profiles"
-msgstr ""
+msgstr "%s屏蔽的用户"
 
 #: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s blocked profiles, page %2$d"
-msgstr "%1$s 和好友,第%2$d页"
+msgstr "%1$s屏蔽的用户,第%2$d页"
 
 #: actions/blockedfromgroup.php:115
-#, fuzzy
 msgid "A list of the users blocked from joining this group."
-msgstr "该ç»\84æ\88\90å\91\98列表。"
+msgstr "被å±\8fè\94½å\8a å\85¥æ­¤å°\8fç»\84ç\9a\84ç\94¨æ\88·列表。"
 
 #: actions/blockedfromgroup.php:288
-#, fuzzy
 msgid "Unblock user from group"
-msgstr "取消阻止用户失败。"
+msgstr "取消小组对用户的屏蔽。"
 
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:69
 msgid "Unblock"
-msgstr "取消阻止"
+msgstr "取消屏蔽"
 
 #: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-#, fuzzy
 msgid "Unblock this user"
-msgstr "取消阻止用户失败。"
+msgstr "取消屏蔽这个用户。"
 
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
-#, fuzzy, php-format
+#, php-format
 msgid "Post to %s"
-msgstr "%s 的回复"
+msgstr "发布到 %s"
 
 #: actions/confirmaddress.php:75
 msgid "No confirmation code."
@@ -955,13 +939,13 @@ msgstr "未找到确认码。"
 
 #: actions/confirmaddress.php:85
 msgid "That confirmation code is not for you!"
-msgstr "此确认码不适用!"
+msgstr "此确认码不是您的!"
 
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
 #, php-format
 msgid "Unrecognized address type %s."
-msgstr ""
+msgstr "不可识别的地址类型%s。"
 
 #. TRANS: Client error for an already confirmed email/jabbel/sms address.
 #: actions/confirmaddress.php:96
@@ -990,9 +974,8 @@ msgid "Couldn't delete email confirmation."
 msgstr "无法删除电子邮件确认。"
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
-msgstr "已确认的电子邮件。"
+msgstr "确认地址"
 
 #: actions/confirmaddress.php:161
 #, php-format
@@ -1000,41 +983,36 @@ msgid "The address \"%s\" has been confirmed for your account."
 msgstr "地址 \"%s\" 已确认。"
 
 #: actions/conversation.php:99
-#, fuzzy
 msgid "Conversation"
-msgstr "确认码"
+msgstr "对话"
 
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
 msgid "Notices"
-msgstr "通告"
+msgstr "消息"
 
 #: actions/deleteapplication.php:63
-#, fuzzy
 msgid "You must be logged in to delete an application."
-msgstr "æ\82¨å¿\85é¡»ç\99»å½\95æ\89\8dè\83½å\88\9b建å°\8fç»\84。"
+msgstr "æ\82¨å¿\85é¡»ç\99»å½\95æ\89\8dè\83½å\88 é\99¤åº\94ç\94¨。"
 
 #: actions/deleteapplication.php:71
-#, fuzzy
 msgid "Application not found."
-msgstr "未找到确认码。"
+msgstr "未找到应用。"
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
-#, fuzzy
 msgid "You are not the owner of this application."
-msgstr "您未告知此个人信息"
+msgstr "您不是该应用的拥有者。"
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
 #: lib/action.php:1263
-#, fuzzy
 msgid "There was a problem with your session token."
-msgstr "会话标识有问题,请重试。"
+msgstr "您的 session token 出现了问题。"
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
 msgid "Delete application"
-msgstr ""
+msgstr "删除应用"
 
 #: actions/deleteapplication.php:149
 msgid ""
@@ -1042,19 +1020,18 @@ msgid ""
 "about the application from the database, including all existing user "
 "connections."
 msgstr ""
-"你确定要删除这个组件吗?这将从数据库中清除有关这个组件的所有数据,包括所有的"
-"用户联系。"
+"您确定要删除这个应用吗?这将从数据库中清除有关这个应用的所有数据,包括所有的"
+"用户关联。"
 
 #. TRANS: Submit button title for 'No' when deleting an application.
 #: actions/deleteapplication.php:158
-#, fuzzy
 msgid "Do not delete this application"
-msgstr "无法删除通告。"
+msgstr "不删除该应用"
 
 #. TRANS: Submit button title for 'Yes' when deleting an application.
 #: actions/deleteapplication.php:164
 msgid "Delete this application"
-msgstr ""
+msgstr "删除这个应用"
 
 #. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
 #: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -1069,17 +1046,17 @@ msgstr "未登录。"
 
 #: actions/deletenotice.php:71
 msgid "Can't delete this notice."
-msgstr "无法删除通告。"
+msgstr "无法删除这条消息。"
 
 #: actions/deletenotice.php:103
 msgid ""
 "You are about to permanently delete a notice. Once this is done, it cannot "
 "be undone."
-msgstr ""
+msgstr "您即将永久删除一条消息。这样做是无法恢复的。"
 
 #: actions/deletenotice.php:109 actions/deletenotice.php:141
 msgid "Delete notice"
-msgstr "删除通告"
+msgstr "删除消息"
 
 #: actions/deletenotice.php:144
 msgid "Are you sure you want to delete this notice?"
@@ -1087,174 +1064,159 @@ msgstr "确定要删除这条消息吗?"
 
 #. TRANS: Submit button title for 'No' when deleting a notice.
 #: actions/deletenotice.php:151
-#, fuzzy
 msgid "Do not delete this notice"
-msgstr "无法删除通告。"
+msgstr "不要删除这个消息"
 
 #. TRANS: Submit button title for 'Yes' when deleting a notice.
 #: actions/deletenotice.php:158 lib/noticelist.php:657
-#, fuzzy
 msgid "Delete this notice"
-msgstr "删除通告"
+msgstr "删除这个消息"
 
 #: actions/deleteuser.php:67
-#, fuzzy
 msgid "You cannot delete users."
-msgstr "æ\97 æ³\95æ\9b´æ\96°用户。"
+msgstr "æ\82¨ä¸\8dè\83½å\88 é\99¤用户。"
 
 #: actions/deleteuser.php:74
-#, fuzzy
 msgid "You can only delete local users."
-msgstr "您不能删除其他用户的状态。"
+msgstr "您只能删除本地用户。"
 
 #: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
 msgid "Delete user"
-msgstr "删除通告"
+msgstr "删除用户"
 
 #: actions/deleteuser.php:136
-#, fuzzy
 msgid ""
 "Are you sure you want to delete this user? This will clear all data about "
 "the user from the database, without a backup."
 msgstr ""
-"你确定要删除这个组件吗?这将从数据库中清除有关这个组件的所有数据,包括所有的"
-"用户联系。"
+"您确定要删除这个用户吗?这将从数据库中清除有关这个用户的所有数据,没有备份。"
 
 #. TRANS: Submit button title for 'Yes' when deleting a user.
 #: actions/deleteuser.php:163 lib/deleteuserform.php:77
-#, fuzzy
 msgid "Delete this user"
-msgstr "å\91¼å\8f«这个用户"
+msgstr "å\88 é\99¤这个用户"
 
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
 #: actions/designadminpanel.php:63 lib/accountsettingsaction.php:139
 #: lib/groupnav.php:119
 msgid "Design"
-msgstr ""
+msgstr "设计"
 
 #: actions/designadminpanel.php:74
 msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "这个 StatusNet 网站的设计设置"
 
 #: actions/designadminpanel.php:318
-#, fuzzy
 msgid "Invalid logo URL."
-msgstr "大小不正确。"
+msgstr "无效的 logo URL。"
 
 #: actions/designadminpanel.php:322
 #, php-format
 msgid "Theme not available: %s."
-msgstr ""
+msgstr "主题不可用:%s。"
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
-msgstr "修改"
+msgstr "更换 logo"
 
 #: actions/designadminpanel.php:431
 msgid "Site logo"
-msgstr ""
+msgstr "网站 logo"
 
 #: actions/designadminpanel.php:443
-#, fuzzy
 msgid "Change theme"
-msgstr "修改"
+msgstr "更换主题"
 
 #: actions/designadminpanel.php:460
 msgid "Site theme"
-msgstr ""
+msgstr "网站主题"
 
 #: actions/designadminpanel.php:461
 msgid "Theme for the site."
-msgstr ""
+msgstr "这个网站的主题。"
 
 #: actions/designadminpanel.php:467
 msgid "Custom theme"
-msgstr ""
+msgstr "自定义主题"
 
 #: actions/designadminpanel.php:471
 msgid "You can upload a custom StatusNet theme as a .ZIP archive."
-msgstr ""
+msgstr "您可以上传一个 .ZIP 压缩文件作为一个自定义的 StatusNet 主题"
 
 #: actions/designadminpanel.php:486 lib/designsettings.php:101
 msgid "Change background image"
-msgstr ""
+msgstr "更换背景图像"
 
 #: actions/designadminpanel.php:491 actions/designadminpanel.php:574
 #: lib/designsettings.php:178
 msgid "Background"
-msgstr ""
+msgstr "背景"
 
 #: actions/designadminpanel.php:496
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can upload a background image for the site. The maximum file size is %1"
 "$s."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "您可以为网站上传一个背景图像。文件大小限制在%1$s以下。"
 
 #. TRANS: Used as radio button label to add a background image.
 #: actions/designadminpanel.php:527 lib/designsettings.php:139
 msgid "On"
-msgstr ""
+msgstr "打开"
 
 #. TRANS: Used as radio button label to not add a background image.
 #: actions/designadminpanel.php:544 lib/designsettings.php:155
 msgid "Off"
-msgstr ""
+msgstr "关闭"
 
 #: actions/designadminpanel.php:545 lib/designsettings.php:156
 msgid "Turn background image on or off."
-msgstr ""
+msgstr "打开或关闭背景图片"
 
 #: actions/designadminpanel.php:550 lib/designsettings.php:161
 msgid "Tile background image"
-msgstr ""
+msgstr "平铺背景图片"
 
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
 msgid "Change colours"
-msgstr "修改密码"
+msgstr "改变颜色"
 
 #: actions/designadminpanel.php:587 lib/designsettings.php:191
-#, fuzzy
 msgid "Content"
-msgstr "连接"
+msgstr "内容"
 
 #: actions/designadminpanel.php:600 lib/designsettings.php:204
-#, fuzzy
 msgid "Sidebar"
-msgstr "搜索"
+msgstr "边栏"
 
 #: actions/designadminpanel.php:613 lib/designsettings.php:217
 msgid "Text"
-msgstr "æ\96\87æ\9c¬"
+msgstr "æ\88æ\81¯"
 
 #: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
 msgid "Links"
-msgstr "登录"
+msgstr "链接"
 
 #: actions/designadminpanel.php:651
 msgid "Advanced"
-msgstr ""
+msgstr "高级"
 
 #: actions/designadminpanel.php:655
 msgid "Custom CSS"
-msgstr ""
+msgstr "自定义CSS"
 
 #: actions/designadminpanel.php:676 lib/designsettings.php:247
 msgid "Use defaults"
-msgstr ""
+msgstr "使用默认值"
 
 #: actions/designadminpanel.php:677 lib/designsettings.php:248
 msgid "Restore default designs"
-msgstr ""
+msgstr "恢复默认设计"
 
 #: actions/designadminpanel.php:683 lib/designsettings.php:254
 msgid "Reset back to default"
-msgstr ""
+msgstr "重置到默认"
 
 #. TRANS: Submit button title
 #: actions/designadminpanel.php:685 actions/othersettings.php:126
@@ -1269,100 +1231,90 @@ msgstr "保存"
 
 #: actions/designadminpanel.php:686 lib/designsettings.php:257
 msgid "Save design"
-msgstr ""
+msgstr "保存设计"
 
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
-msgstr "此通告未被收藏!"
+msgstr "此消息未被收藏!"
 
 #: actions/disfavor.php:94
 msgid "Add to favorites"
 msgstr "加入收藏"
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
-msgstr "没æ\9c\89è¿\99份é\80\9aå\91\8a。"
+msgstr "没æ\9c\89è¿\99个æ\96\87件â\80\9c%sâ\80\9d。"
 
 #: actions/editapplication.php:54
 msgid "Edit Application"
-msgstr ""
+msgstr "编辑应用"
 
 #: actions/editapplication.php:66
-#, fuzzy
 msgid "You must be logged in to edit an application."
-msgstr "您必须登录才能创建小组。"
+msgstr "您必须登录后才能编辑应用。"
 
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
-#, fuzzy
 msgid "No such application."
-msgstr "没æ\9c\89è¿\99份é\80\9aå\91\8a。"
+msgstr "没æ\9c\89è¿\99个åº\94ç\94¨。"
 
 #: actions/editapplication.php:161
-#, fuzzy
 msgid "Use this form to edit your application."
-msgstr "使用这个表单来编辑组"
+msgstr "通过此表单来编辑您的应用。"
 
 #: actions/editapplication.php:177 actions/newapplication.php:159
-#, fuzzy
 msgid "Name is required."
-msgstr "相同的密码。此项必填。"
+msgstr "名字为必填项。"
 
 #: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
 msgid "Name is too long (max 255 chars)."
-msgstr "å\85¨å\90\8dè¿\87é\95¿(ä¸\8dè\83½è¶\85è¿\87 255 个字符)。"
+msgstr "å\90\8d称è¿\87é\95¿(ä¸\8dè\83½è¶\85è¿\87255个字符)。"
 
 #: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
 msgid "Name already in use. Try another one."
-msgstr "昵称已被使用,换一个吧。"
+msgstr "名字已被使用,换一个吧。"
 
 #: actions/editapplication.php:186 actions/newapplication.php:168
-#, fuzzy
 msgid "Description is required."
-msgstr "订阅被拒绝"
+msgstr "必须有一个描述。"
 
 #: actions/editapplication.php:194
 msgid "Source URL is too long."
-msgstr ""
+msgstr "来源 URL 太长。"
 
 #: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
 msgid "Source URL is not valid."
-msgstr "主页的URL不正确。"
+msgstr "来源 URL 无效。"
 
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
-msgstr ""
+msgstr "组织名称必填。"
 
 #: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
 msgid "Organization is too long (max 255 chars)."
-msgstr "位置过长(不能超过255个字符)。"
+msgstr "组织名称过长(不能超过255个字符)。"
 
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
-msgstr ""
+msgstr "组织首页必填。"
 
 #: actions/editapplication.php:218 actions/newapplication.php:206
 msgid "Callback is too long."
-msgstr ""
+msgstr "调回地址(callback)过长。"
 
 #: actions/editapplication.php:225 actions/newapplication.php:215
 msgid "Callback URL is not valid."
-msgstr ""
+msgstr "调回地址(Callback URL)无效。"
 
 #: actions/editapplication.php:258
-#, fuzzy
 msgid "Could not update application."
-msgstr "无法更新"
+msgstr "无法更新应用。"
 
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
-msgstr "编辑 %s 组"
+msgstr "编辑 %s 组"
 
 #: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
 msgid "You must be logged in to create a group."
@@ -1370,23 +1322,22 @@ msgstr "您必须登录才能创建小组。"
 
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
 msgid "You must be an admin to edit the group."
-msgstr "您必须登录才能创建小组。"
+msgstr "管理员才可以编辑小组。"
 
 #: actions/editgroup.php:158
 msgid "Use this form to edit the group."
-msgstr "使用这个表单来编辑组"
+msgstr "通过这个表单来编辑小组"
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
-msgstr "位置过长(不能超过255个字符)。"
+msgstr "描述过长(不能超过%d个字符)。"
 
 #: actions/editgroup.php:228 actions/newgroup.php:168
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid alias: \"%s\""
-msgstr "电子邮件地址 %s 不正确"
+msgstr "无效的昵称:“%s”。"
 
 #: actions/editgroup.php:258
 msgid "Could not update group."
@@ -1394,9 +1345,8 @@ msgstr "无法更新组"
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
-msgstr "无法创建收藏。"
+msgstr "无法创建别名。"
 
 #: actions/editgroup.php:280
 msgid "Options saved."
@@ -1404,9 +1354,8 @@ msgstr "选项已保存。"
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
-msgstr "个人设置"
+msgstr "Email 设置"
 
 #. TRANS: E-mail settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -1418,7 +1367,6 @@ msgstr "设置 %%site.name%% 发送的邮件。"
 #. TRANS: Form legend for e-mail settings form.
 #. TRANS: Field label for e-mail address input in e-mail settings form.
 #: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
 msgid "Email address"
 msgstr "电子邮件地址"
 
@@ -1435,10 +1383,9 @@ msgstr "已确认的电子邮件。"
 #: actions/emailsettings.php:115 actions/emailsettings.php:158
 #: actions/imsettings.php:116 actions/smssettings.php:124
 #: actions/smssettings.php:180
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Remove"
-msgstr "恢复"
+msgstr "移除"
 
 #: actions/emailsettings.php:122
 msgid ""
@@ -1454,7 +1401,6 @@ msgstr ""
 #. TRANS: Button label
 #: actions/emailsettings.php:127 actions/imsettings.php:131
 #: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Cancel"
 msgstr "取消"
@@ -1471,19 +1417,19 @@ msgstr "电子邮件,类似 \"UserName@example.org\""
 #: actions/smssettings.php:162
 msgctxt "BUTTON"
 msgid "Add"
-msgstr ""
+msgstr "添加"
 
 #. TRANS: Form legend for incoming e-mail settings form.
 #. TRANS: Form legend for incoming SMS settings form.
 #: actions/emailsettings.php:147 actions/smssettings.php:171
 msgid "Incoming email"
-msgstr "发布用的电子邮件"
+msgstr "接收用 email"
 
 #. TRANS: Form instructions for incoming e-mail form in e-mail settings.
 #. TRANS: Form instructions for incoming SMS e-mail address form in SMS settings.
 #: actions/emailsettings.php:155 actions/smssettings.php:178
 msgid "Send email to this address to post new notices."
-msgstr "向这个电子邮件发信以发布新的通告。"
+msgstr "向这个 email 地址发邮件来发布新的消息。"
 
 #. TRANS: Instructions for incoming e-mail address input form.
 #. TRANS: Instructions for incoming SMS e-mail address input form.
@@ -1496,39 +1442,37 @@ msgstr "生成新的电子邮件地址用于发布信息;取消旧的。"
 #: actions/emailsettings.php:168 actions/smssettings.php:189
 msgctxt "BUTTON"
 msgid "New"
-msgstr ""
+msgstr "新增"
 
 #. TRANS: Form legend for e-mail preferences form.
 #: actions/emailsettings.php:174
-#, fuzzy
 msgid "Email preferences"
-msgstr "电子邮件地址"
+msgstr "Email 偏好"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:180
 msgid "Send me notices of new subscriptions through email."
-msgstr "å¦\82æ\9e\9cæ\9c\89æ\96°è®¢é\98\85ï¼\8cé\80\9aè¿\87ç\94µå­\90é\82®ä»¶å\91\8aè¯\89我。"
+msgstr "å°\86æ\96°ç\9a\84å\85³æ³¨é\80\9aè¿\87ç\94µå­\90é\82®ä»¶å\8f\91é\80\81ç»\99我。"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:186
 msgid "Send me email when someone adds my notice as a favorite."
-msgstr "如果有人收藏我的通告,发邮件通知我。"
+msgstr "有人收藏我的消息时,发邮件通知我。"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:193
 msgid "Send me email when someone sends me a private message."
-msgstr "如果收到私人信息,发邮件通知我。"
+msgstr "有人给我发送私信时,发邮件通知我。"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:199
-#, fuzzy
 msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "如果收到私人信息,发邮件通知我。"
+msgstr "有人给我发送 @ 消息时,发邮件通知我。"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:205
 msgid "Allow friends to nudge me and send me an email."
-msgstr "允许朋友们呼叫并给我发送邮件。"
+msgstr "允许朋友们呼叫并给我发送邮件。"
 
 #. TRANS: Checkbox label in e-mail preferences form.
 #: actions/emailsettings.php:212
@@ -1542,9 +1486,8 @@ msgstr "公开电子邮件的 MicroID。"
 
 #. TRANS: Confirmation message for successful e-mail preferences save.
 #: actions/emailsettings.php:334
-#, fuzzy
 msgid "Email preferences saved."
-msgstr "首选项已保存。"
+msgstr "Email 偏好已保存。"
 
 #. TRANS: Message given saving e-mail address without having provided one.
 #: actions/emailsettings.php:353
@@ -1599,15 +1542,13 @@ msgstr "没有可以取消的确认。"
 
 #. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
 #: actions/emailsettings.php:424
-#, fuzzy
 msgid "That is the wrong email address."
-msgstr "即时通讯帐号错误。"
+msgstr "这是错误的电子邮件地址。"
 
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
-msgstr "没有可以取消的确认。"
+msgstr "Email 验证已取消。"
 
 #. TRANS: Message given trying to remove an e-mail address that is not
 #. TRANS: registered for the active user.
@@ -1617,9 +1558,8 @@ msgstr "这是他人的电子邮件。"
 
 #. TRANS: Message given after successfully removing a registered e-mail address.
 #: actions/emailsettings.php:479
-#, fuzzy
 msgid "The email address was removed."
-msgstr "发布用的电子邮件被移除。"
+msgstr "email 地址已移除。"
 
 #: actions/emailsettings.php:493 actions/smssettings.php:568
 msgid "No incoming email address."
@@ -1644,55 +1584,53 @@ msgstr "已添加新的发布用的电子邮件地址。"
 
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
-msgstr "已收藏此通告!"
+msgstr "已收藏过此消息!"
 
 #: actions/favor.php:92 lib/disfavorform.php:140
-#, fuzzy
 msgid "Disfavor favorite"
-msgstr "å\8a å\85¥收藏"
+msgstr "å\8f\96æ¶\88收藏"
 
 #: actions/favorited.php:65 lib/popularnoticesection.php:91
 #: lib/publicgroupnav.php:93
-#, fuzzy
 msgid "Popular notices"
-msgstr "没æ\9c\89è¿\99份é\80\9aå\91\8aã\80\82"
+msgstr "æ\94¶è\97\8fæ\9c\80å¤\9aç\9a\84æ¶\88æ\81¯"
 
 #: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
 msgid "Popular notices, page %d"
-msgstr "组,第 %d 页"
+msgstr "收藏最多的消息,第%d页"
 
 #: actions/favorited.php:79
 msgid "The most popular notices on the site right now."
-msgstr ""
+msgstr "目前网站上被收藏最多的消息。"
 
 #: actions/favorited.php:150
 msgid "Favorite notices appear on this page but no one has favorited one yet."
-msgstr ""
+msgstr "此页面展示收藏的消息,但还没有人收藏任何消息。"
 
 #: actions/favorited.php:153
 msgid ""
 "Be the first to add a notice to your favorites by clicking the fave button "
 "next to any notice you like."
-msgstr ""
+msgstr "通过点击任意消息下的收藏图标成为第一个给自己的收藏添加消息的人。"
 
 #: actions/favorited.php:156
 #, php-format
 msgid ""
 "Why not [register an account](%%action.register%%) and be the first to add a "
 "notice to your favorites!"
-msgstr ""
+msgstr "现在就[注册一个账户](%%action.register%%)并成为第一个添加收藏的人!"
 
 #: actions/favoritesrss.php:111 actions/showfavorites.php:77
 #: lib/personalgroupnav.php:115
 #, php-format
 msgid "%s's favorite notices"
-msgstr "%s 收藏的通告"
+msgstr "%s收藏的消息"
 
 #: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
 msgid "Updates favored by %1$s on %2$s!"
-msgstr "%2$s 上 %1$s 的更新!"
+msgstr ""
 
 #: actions/featured.php:69 lib/featureduserssection.php:87
 #: lib/publicgroupnav.php:89
@@ -1707,25 +1645,23 @@ msgstr "推荐用户,第 %d 页"
 #: actions/featured.php:99
 #, php-format
 msgid "A selection of some great users on %s"
-msgstr ""
+msgstr "%s上的优秀用户摘选"
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
-msgstr "没有这份通告。"
+msgstr "没有消息 ID。"
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
-msgstr "没有这份通告。"
+msgstr "没有消息。"
 
 #: actions/file.php:42
 msgid "No attachments."
-msgstr ""
+msgstr "没有附件。"
 
 #: actions/file.php:51
 msgid "No uploaded attachments."
-msgstr ""
+msgstr "没有已上传的附件。"
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
@@ -1733,100 +1669,88 @@ msgstr "未预料的响应!"
 
 #: actions/finishremotesubscribe.php:80
 msgid "User being listened to does not exist."
-msgstr ""
+msgstr "要查看的用户不存在。"
 
 #: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
 msgid "You can use the local subscription!"
-msgstr "您可以在这里订阅!"
+msgstr "您可以使用本地关注!"
 
 #: actions/finishremotesubscribe.php:99
 msgid "That user has blocked you from subscribing."
-msgstr "那个用户阻止了你的订阅。"
+msgstr "该用户屏蔽了您对他/她的关注。"
 
 #: actions/finishremotesubscribe.php:110
-#, fuzzy
 msgid "You are not authorized."
-msgstr "订阅已确认"
+msgstr "您没有被授权。"
 
 #: actions/finishremotesubscribe.php:113
 msgid "Could not convert request token to access token."
-msgstr ""
+msgstr "无法将 request token 转换为 access token。"
 
 #: actions/finishremotesubscribe.php:118
 msgid "Remote service uses unknown version of OMB protocol."
-msgstr ""
+msgstr "远程服务使用了位置版本的 OMB 协议。"
 
 #: actions/finishremotesubscribe.php:138
-#, fuzzy
 msgid "Error updating remote profile."
-msgstr "更新远程的个人信息时出错"
+msgstr "更新远程的个人信息时出错"
 
 #: actions/getfile.php:79
-#, fuzzy
 msgid "No such file."
-msgstr "没æ\9c\89è¿\99份é\80\9aå\91\8a。"
+msgstr "没æ\9c\89è¿\99个æ\96\87件。"
 
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
-msgstr "无法创建收藏。"
+msgstr "无法读取文件。"
 
 #: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
 msgid "Invalid role."
-msgstr "大小不正确。"
+msgstr "无效的权限。"
 
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
-msgstr ""
+msgstr "此角色是保留的且不能被设置。"
 
 #: actions/grantrole.php:75
-#, fuzzy
 msgid "You cannot grant user roles on this site."
-msgstr "在这个网站你被禁止发布消息。"
+msgstr "您不能在这个网站授予用户权限。"
 
 #: actions/grantrole.php:82
-#, fuzzy
 msgid "User already has this role."
-msgstr "用户没有个人信息。"
+msgstr "用户已有此权限。"
 
 #: actions/groupblock.php:71 actions/groupunblock.php:71
 #: actions/makeadmin.php:71 actions/subedit.php:46
 #: lib/profileformaction.php:79
-#, fuzzy
 msgid "No profile specified."
-msgstr "没æ\9c\89æ\94¶ä»¶äºº。"
+msgstr "没æ\9c\89æ\8c\87å®\9aç\9a\84æ¶\88æ\81¯。"
 
 #: actions/groupblock.php:76 actions/groupunblock.php:76
 #: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
 #: actions/unsubscribe.php:84 lib/profileformaction.php:86
-#, fuzzy
 msgid "No profile with that ID."
-msgstr "没有找到此ID的信息。"
+msgstr "没æ\9c\89æ\89¾å\88°æ­¤IDç\9a\84个人信æ\81¯ã\80\82"
 
 #: actions/groupblock.php:81 actions/groupunblock.php:81
 #: actions/makeadmin.php:81
-#, fuzzy
 msgid "No group specified."
-msgstr "没æ\9c\89æ\94¶ä»¶äºº。"
+msgstr "没æ\9c\89æ\8c\87å®\9aå°\8fç»\84。"
 
 #: actions/groupblock.php:91
 msgid "Only an admin can block group members."
-msgstr ""
+msgstr "只有管理员可以屏蔽小组成员。"
 
 #: actions/groupblock.php:95
 msgid "User is already blocked from group."
-msgstr ""
+msgstr "用户已经被小组屏蔽。"
 
 #: actions/groupblock.php:100
-#, fuzzy
 msgid "User is not a member of group."
-msgstr "您未告知此个人信息"
+msgstr "用户不是小组成员。"
 
 #: actions/groupblock.php:134 actions/groupmembers.php:360
-#, fuzzy
 msgid "Block user from group"
-msgstr "阻止用户失败。"
+msgstr "从小组中屏蔽用户"
 
 #: actions/groupblock.php:160
 #, php-format
@@ -1835,88 +1759,81 @@ msgid ""
 "will be removed from the group, unable to post, and unable to subscribe to "
 "the group in the future."
 msgstr ""
+"您确定要在“%2$s”小组中屏蔽用户“%1$s”么?他们将被从小组中删除,并且不能在小组"
+"内发布消息或关注该小组。"
 
 #. TRANS: Submit button title for 'No' when blocking a user from a group.
 #: actions/groupblock.php:182
-#, fuzzy
 msgid "Do not block this user from this group"
-msgstr "该组成员列表。"
+msgstr "不要在此小组屏蔽此用户。"
 
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
-#, fuzzy
 msgid "Block this user from this group"
-msgstr "该组成员列表。"
+msgstr "在小组中屏蔽此用户。"
 
 #: actions/groupblock.php:206
 msgid "Database error blocking user from group."
-msgstr ""
+msgstr "在小组中屏蔽用户时数据库发生错误。"
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "没有 Jabber ID。"
+msgstr "没有 ID。"
 
 #: actions/groupdesignsettings.php:68
-#, fuzzy
 msgid "You must be logged in to edit a group."
 msgstr "您必须登录才能创建小组。"
 
 #: actions/groupdesignsettings.php:144
-#, fuzzy
 msgid "Group design"
-msgstr ""
+msgstr "小组页面设计。"
 
 #: actions/groupdesignsettings.php:155
 msgid ""
 "Customize the way your group looks with a background image and a colour "
 "palette of your choice."
-msgstr ""
+msgstr "通过背景图片和颜色板来自定义您的小组的外观。"
 
 #: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
 #: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
 msgid "Couldn't update your design."
-msgstr "无法更新用户。"
+msgstr "无法更新你的设计。"
 
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
-#, fuzzy
 msgid "Design preferences saved."
-msgstr "首选项已保存。"
+msgstr "设计偏好已保存。"
 
 #: actions/grouplogo.php:142 actions/grouplogo.php:195
 msgid "Group logo"
-msgstr "组logo"
+msgstr "组logo"
 
 #: actions/grouplogo.php:153
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "You can upload a logo image for your group. The maximum file size is %s."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "您可以给您的小组上传一个 logo。文件最大限制为%s。"
 
 #: actions/grouplogo.php:365
-#, fuzzy
 msgid "Pick a square area of the image to be the logo."
-msgstr "请选择一块方形区域作为你的头像"
+msgstr "请选择一块方形区域作为 logo。"
 
 #: actions/grouplogo.php:399
 msgid "Logo updated."
 msgstr "logo已更新。"
 
 #: actions/grouplogo.php:401
-#, fuzzy
 msgid "Failed updating logo."
-msgstr "更新头像失败。"
+msgstr "更新 logo 失败。"
 
 #: actions/groupmembers.php:100 lib/groupnav.php:92
 #, php-format
 msgid "%s group members"
-msgstr "%s 组成员"
+msgstr "%s 组成员"
 
 #: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group members, page %2$d"
-msgstr "%s 组成员"
+msgstr "%s 小组成员,第%2$d页"
 
 #: actions/groupmembers.php:118
 msgid "A list of the users in this group."
@@ -1924,24 +1841,23 @@ msgstr "该组成员列表。"
 
 #: actions/groupmembers.php:182 lib/groupnav.php:107
 msgid "Admin"
-msgstr "admin管理员"
+msgstr "管理员"
 
 #: actions/groupmembers.php:392 lib/blockform.php:69
 msgid "Block"
-msgstr "阻止"
+msgstr "屏蔽"
 
 #: actions/groupmembers.php:487
 msgid "Make user an admin of the group"
-msgstr ""
+msgstr "使用户成为小组的管理员"
 
 #: actions/groupmembers.php:519
-#, fuzzy
 msgid "Make Admin"
-msgstr "admin管理员"
+msgstr "设置管理员"
 
 #: actions/groupmembers.php:519
 msgid "Make this user an admin"
-msgstr ""
+msgstr "使这个用户成为管理员"
 
 #. TRANS: Message is used as link title. %s is a user nickname.
 #. TRANS: Title in atom group notice feed. %s is a group name.
@@ -1950,23 +1866,23 @@ msgstr ""
 #: lib/atomgroupnoticefeed.php:63 lib/atomusernoticefeed.php:69
 #, php-format
 msgid "%s timeline"
-msgstr "%s 时间表"
+msgstr "%s的时间线"
 
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #: actions/grouprss.php:142
-#, fuzzy, php-format
+#, php-format
 msgid "Updates from members of %1$s on %2$s!"
-msgstr "%2$s 上 %1$s 的更新!"
+msgstr "%2$s上%1$s的更新!"
 
 #: actions/groups.php:62 lib/profileaction.php:223 lib/profileaction.php:249
 #: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
 msgid "Groups"
-msgstr "组"
+msgstr "组"
 
 #: actions/groups.php:64
 #, php-format
 msgid "Groups, page %d"
-msgstr "组,第 %d 页"
+msgstr "个小组,第 %d 页"
 
 #: actions/groups.php:90
 #, php-format
@@ -1977,37 +1893,39 @@ msgid ""
 "for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
 "%%%%)"
 msgstr ""
+"%%%%site.name%%%%的小组可以让您找到有相同兴趣的朋友一起交流。当您加入到一个小"
+"组后可以可以通过使用“!小组名称”发布消息给所有其他的小组成员。找不到感兴趣的小"
+"组?试一下[搜索小组](%%%%action.groupsearch%%%%)或[建立自己的小组](%%%%"
+"action.newgroup%%%%)!"
 
 #: actions/groups.php:107 actions/usergroups.php:126 lib/groupeditform.php:122
-#, fuzzy
 msgid "Create a new group"
-msgstr "使用此表格创建组。"
+msgstr "新建一个小组"
 
 #: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "Search for groups on %%site.name%% by their name, location, or description. "
 "Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"在 %%site.name%% 的用户信息中搜索,可以搜索姓名、未知和爱好。搜索条件至少包"
-"含 3 个字符,多个搜索条件用空格分隔。"
+"在%%site.name%%通过名称、地点或者描述搜索小组。请用空格将关键词分开,每个关键"
+"词至少3个字符。"
 
 #: actions/groupsearch.php:58
 msgid "Group search"
-msgstr "组检索"
+msgstr "小组搜索"
 
 #: actions/groupsearch.php:79 actions/noticesearch.php:117
 #: actions/peoplesearch.php:83
-#, fuzzy
 msgid "No results."
-msgstr "æ\89§è¡\8cç»\93æ\9e\9c"
+msgstr "没æ\9c\89æ\9f¥è¯¢ç»\93æ\9e\9cã\80\82"
 
 #: actions/groupsearch.php:82
 #, php-format
 msgid ""
 "If you can't find the group you're looking for, you can [create it](%%action."
 "newgroup%%) yourself."
-msgstr ""
+msgstr "如果你找不到你想要的小组,你可以自己 [创建它](%%action.newgroup%%) 。"
 
 #: actions/groupsearch.php:85
 #, php-format
@@ -2015,25 +1933,25 @@ msgid ""
 "Why not [register an account](%%action.register%%) and [create the group](%%"
 "action.newgroup%%) yourself!"
 msgstr ""
+"现在就 [注册一个帐号](%%action.register%%) 并 [创建该小组](%%action.newgroup%"
+"%) !"
 
 #: actions/groupunblock.php:91
 msgid "Only an admin can unblock group members."
-msgstr ""
+msgstr "只有管理员可以取消屏蔽小组成员。"
 
 #: actions/groupunblock.php:95
-#, fuzzy
 msgid "User is not blocked from group."
-msgstr "使用这个表单来编辑组"
+msgstr "用户未被小组屏蔽。"
 
 #: actions/groupunblock.php:128 actions/unblock.php:86
 msgid "Error removing the block."
-msgstr ""
+msgstr "取消屏蔽时出错。"
 
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
-msgstr "头像设置"
+msgstr "IM 设置"
 
 #. TRANS: Instant messaging settings page instructions.
 #. TRANS: [instant messages] is link text, "(%%doc.im%%)" is the link.
@@ -2044,20 +1962,19 @@ msgid ""
 "You can send and receive notices through Jabber/GTalk [instant messages](%%"
 "doc.im%%). Configure your address and settings below."
 msgstr ""
-"您可以通过Jabber/GTalk [即时通讯工具](%%doc.im%%)发送和接受通告。在这里配置它"
+"您可以通过Jabber/GTalk [即时通讯工具](%%doc.im%%)发送和接收消息。在这里配置它"
 "们。"
 
 #. TRANS: Message given in the IM settings if XMPP is not enabled on the site.
 #: actions/imsettings.php:94
 msgid "IM is not available."
-msgstr ""
+msgstr "IM 不可用。"
 
 #. TRANS: Form legend for IM settings form.
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
-#, fuzzy
 msgid "IM address"
-msgstr "电子邮件地址"
+msgstr "IM 地址"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2071,8 +1988,8 @@ msgid ""
 "Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
 "message with further instructions. (Did you add %s to your buddy list?)"
 msgstr ""
-"正在等待这个地址的确认。请查阅你Jabber/GTalk的帐户看有没有收到进一步的指示。"
-"(你是否已经添加 %s为你的好友?)"
+"正在等待验证这个地址。请查阅您的 Jabber/GTalk 帐户看有没有收到下一步的指示。"
+"(您添加 %s 为您的好友了吗?)"
 
 #. TRANS: IM address input field instructions in IM settings form.
 #. TRANS: %s is the IM address set for the site.
@@ -2087,9 +2004,8 @@ msgstr ""
 
 #. TRANS: Form legend for IM preferences form.
 #: actions/imsettings.php:155
-#, fuzzy
 msgid "IM preferences"
-msgstr "首选项已保存。"
+msgstr "IM 首选项已保存。"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:160
@@ -2099,12 +2015,12 @@ msgstr "通过Jabber/GTalk发送通告。"
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:166
 msgid "Post a notice when my Jabber/GTalk status changes."
-msgstr "当我的Jabber/GTalk状态改变时自动发布通告。"
+msgstr "当我的Jabber/GTalk状态改变时自动发布消息。"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:172
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
-msgstr "å¦\82æ\9e\9cæ\88\91å°\9aæ\9cªè®¢é\98\85ç\9a\84ç\94¨æ\88·å\9b\9eæ\88\91æ¶\88æ\81¯ï¼\8c使ç\94¨Jabber/GTalké\80\9aç\9f¥我。"
+msgstr "å°\86æ\88\91没æ\9c\89å\85³æ³¨ç\9a\84ç\94¨æ\88·ç»\99æ\88\91ç\9a\84å\9b\9eå¤\8dé\80\9aè¿\87 Jabber/GTalk å\8f\91é\80\81ç»\99我。"
 
 #. TRANS: Checkbox label in IM preferences form.
 #: actions/imsettings.php:179
@@ -2157,15 +2073,13 @@ msgstr "即时通讯帐号错误。"
 
 #. TRANS: Server error thrown on database error canceling IM address confirmation.
 #: actions/imsettings.php:397
-#, fuzzy
 msgid "Couldn't delete IM confirmation."
-msgstr "无法删除电子邮件确认。"
+msgstr "无法删除 IM 确认。"
 
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
-msgstr "没有验证码"
+msgstr "IM 验证已取消。"
 
 #. TRANS: Message given trying to remove an IM address that is not
 #. TRANS: registered for the active user.
@@ -2175,14 +2089,13 @@ msgstr "这不是您的Jabber帐号。"
 
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
-#, fuzzy
 msgid "The IM address was removed."
-msgstr "发布用的电子邮件被移除。"
+msgstr "IM 地址已移除。"
 
 #: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
 msgid "Inbox for %1$s - page %2$d"
-msgstr "%s 的收件箱"
+msgstr "%1$s的收件箱 - 第%2$d页"
 
 #: actions/inbox.php:62
 #, php-format
@@ -2195,12 +2108,12 @@ msgstr "这是您的收件箱,包含发给您的私人消息。"
 
 #: actions/invite.php:39
 msgid "Invites have been disabled."
-msgstr ""
+msgstr "邀请已被禁用。"
 
 #: actions/invite.php:41
-#, fuzzy, php-format
+#, php-format
 msgid "You must be logged in to invite other users to use %s."
-msgstr "您必须登录才能创建小组。"
+msgstr "您必须登录才能邀请他人使用%s。"
 
 #: actions/invite.php:72
 #, php-format
@@ -2217,11 +2130,11 @@ msgstr "邀请新用户"
 
 #: actions/invite.php:128
 msgid "You are already subscribed to these users:"
-msgstr "您已订阅这些用户:"
+msgstr "您已关注了这些用户:"
 
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr "%1$s (%2$s)"
@@ -2229,7 +2142,7 @@ msgstr "%1$s (%2$s)"
 #: actions/invite.php:136
 msgid ""
 "These people are already users and you were automatically subscribed to them:"
-msgstr "这些好友已注册,您已自动订阅这些用户。"
+msgstr "这些好友已注册,您已自动关注了这些用户:"
 
 #: actions/invite.php:144
 msgid "Invitation(s) sent to the following people:"
@@ -2266,7 +2179,7 @@ msgstr "在邀请中加几句话(可选)。"
 #: actions/invite.php:198
 msgctxt "BUTTON"
 msgid "Send"
-msgstr ""
+msgstr "发布"
 
 #. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:228
@@ -2305,60 +2218,55 @@ msgid ""
 "\n"
 "Sincerely, %2$s\n"
 msgstr ""
-"%1$s 邀请你加入 %2$s (%3$s).\n"
+"%1$s 邀请您加入 %2$s (%3$s)。\n"
 "\n"
-"%2$s 是一个能让你和你认识的、感兴趣的人保持联系的微博客服务。 \n"
-"你可以和你认识的人分享你的近况、想法或者你的网络生活。你也可以结交有共同兴趣"
+"%2$s 是一个能让您和您认识的或感兴趣的人保持联系的微博客服务。 \n"
+"\n"
+"您可以和您认识的人分享您的近况、想法或者您的网络生活。您也可以结交有共同兴趣"
 "的新朋友。\n"
 "\n"
-"%1$s 说:\n"
+"%1$s 说\n"
 "\n"
 "%4$s\n"
 "\n"
-"你可以在这里查阅 %1$s's 的资料 %2$s :\n"
+"您可以在这里查阅%1$s在%2$s的资料页:\n"
 "\n"
 "%5$s\n"
 "\n"
-"如果你想使用这个服务,请点击一下链接接受邀请。\n"
+"如果您想试试这个服务,请点击下面的链接接受邀请。\n"
+"\n"
 "%6$s\n"
 "\n"
-"如果不愿意,请跳过这条信息。感谢您的耐心和时间。\n"
+"如果您目前不愿意,请跳过这条信息。感谢您的耐心和时间。\n"
 "\n"
 "诚挚的感谢, %2$s\n"
 
 #: actions/joingroup.php:60
-#, fuzzy
 msgid "You must be logged in to join a group."
-msgstr "æ\82¨å¿\85é¡»ç\99»å½\95æ\89\8dè\83½å\88\9b建小组。"
+msgstr "æ\82¨å¿\85é¡»ç\99»å½\95æ\89\8dè\83½å\8a å\85¥小组。"
 
 #: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
 msgid "No nickname or ID."
-msgstr "没有昵称。"
+msgstr "没有昵称或 ID。"
 
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
-msgstr ""
+msgstr "%1$s加入了%2$s小组"
 
 #: actions/leavegroup.php:60
-#, fuzzy
 msgid "You must be logged in to leave a group."
-msgstr "您必须登录才能创建小组。"
+msgstr "您必须登录才能离开小组。"
 
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
+#. TRANS: Error text shown when trying to leave an existing group the user is not a member of.
+#: actions/leavegroup.php:100 lib/command.php:389
 msgid "You are not a member of that group."
-msgstr "您已经是该组成员"
+msgstr "您不是该群小组成员。"
 
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
+#: actions/leavegroup.php:137
+#, php-format
 msgid "%1$s left group %2$s"
-msgstr "%1$s 的 %2$s 状态"
+msgstr "%1$s离开了%2$s小组。"
 
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
@@ -2370,7 +2278,7 @@ msgstr "用户名或密码不正确。"
 
 #: actions/login.php:154 actions/otp.php:120
 msgid "Error setting user. You are probably not authorized."
-msgstr ""
+msgstr "设置用户时出错。您可能没有被认证。"
 
 #: actions/login.php:210 actions/login.php:263 lib/logingroupnav.php:79
 msgid "Login"
@@ -2386,7 +2294,7 @@ msgstr "记住登录状态"
 
 #: actions/login.php:259 actions/register.php:487
 msgid "Automatically login in the future; not for shared computers!"
-msgstr "ä¿\9dæ\8c\81è¿\99å\8f°æ\9cºå\99¨ä¸\8aç\9a\84ç\99»å½\95ç\8a¶æ\80\81ã\80\82ä¸\8dè¦\81å\9c¨å\85±ç\94¨ç\9a\84æ\9cºå\99¨ä¸\8aä¿\9dæ\8c\81ç\99»å½\95!"
+msgstr "ä¸\8b次è\87ªå\8a¨ç\99»å½\95ï¼\8c请ä¸\8dè¦\81å\9c¨å\85¬å\85±ç\94µè\84\91ä¸\8a使ç\94¨æ­¤é\80\89项!"
 
 #: actions/login.php:269
 msgid "Lost or forgotten password?"
@@ -2399,80 +2307,79 @@ msgid ""
 msgstr "由于安全原因,修改设置前需要输入用户名和密码。"
 
 #: actions/login.php:292
-#, fuzzy
 msgid "Login with your username and password."
-msgstr "用户名或密码不正确。"
+msgstr "用用户名和密码登录。"
 
 #: actions/login.php:295
 #, php-format
 msgid ""
 "Don't have a username yet? [Register](%%action.register%%) a new account."
-msgstr ""
+msgstr "没有账户?[注册](%%action.register%%) 一个新帐号。"
 
 #: actions/makeadmin.php:92
 msgid "Only an admin can make another user an admin."
-msgstr ""
+msgstr "只有管理员可以让另一个用户成为管理员。"
 
 #: actions/makeadmin.php:96
 #, php-format
 msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr ""
+msgstr "%1$s已经是\"%2$s\"小组的管理员了。"
 
 #: actions/makeadmin.php:133
 #, php-format
 msgid "Can't get membership record for %1$s in group %2$s."
-msgstr ""
+msgstr "无法找到%1$s在%2$s小组的记录。"
 
 #: actions/makeadmin.php:146
 #, php-format
 msgid "Can't make %1$s an admin for group %2$s."
-msgstr ""
+msgstr "无法让%1$s成为%2$s小组的管理员。"
 
 #: actions/microsummary.php:69
 msgid "No current status."
-msgstr ""
+msgstr "没有当前状态。"
 
 #: actions/newapplication.php:52
 msgid "New Application"
-msgstr ""
+msgstr "新应用"
 
 #: actions/newapplication.php:64
-#, fuzzy
 msgid "You must be logged in to register an application."
-msgstr "您必须登录才能创建小组。"
+msgstr "你必须登录才能登记你的应用。"
 
 #: actions/newapplication.php:143
-#, fuzzy
 msgid "Use this form to register a new application."
-msgstr "使用此表格创建组。"
+msgstr "通过此表单登记一个新的应用。"
 
 #: actions/newapplication.php:176
 msgid "Source URL is required."
-msgstr ""
+msgstr "Source URL 必填。"
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
-msgstr "无法创建收藏。"
+msgstr "无法创建应用。"
 
 #: actions/newgroup.php:53
 msgid "New group"
-msgstr "新组"
+msgstr "新组"
 
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
-msgstr "使用此表格创建组。"
+msgstr "通过此表单创建小组。"
 
 #: actions/newmessage.php:71 actions/newmessage.php:231
 msgid "New message"
 msgstr "新消息"
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
+#. TRANS: Error text shown when trying to send a direct message to a user without a mutual subscription (each user must be subscribed to the other).
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:502
 msgid "You can't send a message to this user."
 msgstr "无法向此用户发送消息。"
 
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "没有内容!"
 
@@ -2480,30 +2387,32 @@ msgstr "没有内容!"
 msgid "No recipient specified."
 msgstr "没有收件人。"
 
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr "不要向自己发送消息;跟自己悄悄说就得了。"
 
 #: actions/newmessage.php:181
-#, fuzzy
 msgid "Message sent"
-msgstr "消息没æ\9c\89æ­£æ\96\87ï¼\81"
+msgstr "消息å·²å\8f\91é\80\81"
 
-#: actions/newmessage.php:185
-#, fuzzy, php-format
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
+#, php-format
 msgid "Direct message to %s sent."
-msgstr "å·²å\90\91 %s å\8f\91é\80\81æ¶\88æ\81¯"
+msgstr "å\90\91%så\8f\91é\80\81ç§\81ä¿¡æ\88\90å\8a\9fã\80\82"
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr "Ajax错误"
 
 #: actions/newnotice.php:69
 msgid "New notice"
-msgstr "新通告"
+msgstr "新消息"
 
-#: actions/newnotice.php:217
+#: actions/newnotice.php:227
 msgid "Notice posted"
 msgstr "消息已发布。"
 
@@ -2513,17 +2422,17 @@ msgid ""
 "Search for notices on %%site.name%% by their contents. Separate search terms "
 "by spaces; they must be 3 characters or more."
 msgstr ""
-"在 %%site.name%% 的通告内容中搜索。搜索条件至少包含 3 个字符,多个搜索条件用"
-"格分隔。"
+"在%%site.name%%的消息内容中搜索。搜索条件至少包含 3 个字符,多个搜索条件用空"
+"格分隔。"
 
 #: actions/noticesearch.php:78
 msgid "Text search"
-msgstr "æ\90\9cç´¢æ\96\87æ\9c¬"
+msgstr "æ\90\9cç´¢æ\88æ\81¯"
 
 #: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "Search results for \"%1$s\" on %2$s"
-msgstr "来自 %1$s 的 %2$s 消息"
+msgstr "在%2$s上搜索\"%1$s\"的结果"
 
 #: actions/noticesearch.php:121
 #, php-format
@@ -2531,6 +2440,8 @@ msgid ""
 "Be the first to [post on this topic](%%%%action.newnotice%%%%?"
 "status_textarea=%s)!"
 msgstr ""
+"成为第一个[对该主题发布消息]的人(%%%%action.newnotice%%%%?status_textarea=%"
+"s) !"
 
 #: actions/noticesearch.php:124
 #, php-format
@@ -2538,78 +2449,77 @@ msgid ""
 "Why not [register an account](%%%%action.register%%%%) and be the first to "
 "[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
 msgstr ""
+"现在就 [注册账户](%%%%action.register%%%%) 并成为第一个 [对该主题发布消息的"
+"人](%%%%action.newnotice%%%%?status_textarea=%s) !"
 
 #: actions/noticesearchrss.php:96
 #, php-format
 msgid "Updates with \"%s\""
-msgstr ""
+msgstr "\"%s\"的更新"
 
 #: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
 msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "%2$s 上 %1$s 的更新!"
+msgstr "%2$s上符合搜索关键字\"%1$s\"的更新!"
 
 #: actions/nudge.php:85
 msgid ""
 "This user doesn't allow nudges or hasn't confirmed or set their email yet."
-msgstr ""
+msgstr "此用户不允许呼叫或者还没有验证其电子邮件地址。"
 
 #: actions/nudge.php:94
 msgid "Nudge sent"
-msgstr "振铃呼叫发出。"
+msgstr "呼叫已发出。"
 
 #: actions/nudge.php:97
 msgid "Nudge sent!"
-msgstr "振铃呼叫已经发出!"
+msgstr "呼叫已发出!"
 
 #: actions/oauthappssettings.php:59
-#, fuzzy
 msgid "You must be logged in to list your applications."
-msgstr "您必须登录才能创建小组。"
+msgstr "必须登录才能查看您的程序列表。"
 
 #: actions/oauthappssettings.php:74
-#, fuzzy
 msgid "OAuth applications"
-msgstr "其他选项"
+msgstr "OAuth 应用"
 
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
-msgstr ""
+msgstr "您已经登记的程序。"
 
 #: actions/oauthappssettings.php:135
 #, php-format
 msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "您还没登记任何程序。"
 
 #: actions/oauthconnectionssettings.php:72
 msgid "Connected applications"
-msgstr ""
+msgstr "关联的应用"
 
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "您已允许以下程序访问你的账户。"
 
 #: actions/oauthconnectionssettings.php:175
 msgid "You are not a user of that application."
-msgstr ""
+msgstr "您不是那个应用的用户。"
 
 #: actions/oauthconnectionssettings.php:186
 #, php-format
 msgid "Unable to revoke access for app: %s."
-msgstr ""
+msgstr "不能取消%s程序的访问。"
 
 #: actions/oauthconnectionssettings.php:198
 msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "您还没允许任何程序使用您的账户。"
 
 #: actions/oauthconnectionssettings.php:211
 msgid "Developers can edit the registration settings for their applications "
-msgstr ""
+msgstr "开发者可以修改他们程序的登记设置 "
 
 #: actions/oembed.php:80 actions/shownotice.php:100
-#, fuzzy
 msgid "Notice has no profile."
-msgstr "用户没有个人信息。"
+msgstr "消息没有对应用户。"
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2620,17 +2530,17 @@ msgstr "%1$s 的 %2$s 状态"
 #: actions/oembed.php:159
 #, php-format
 msgid "Content type %s not supported."
-msgstr ""
+msgstr "%s文件类型不被支持。"
 
 #. TRANS: Error message displaying attachments. %s is the site's base URL.
 #: actions/oembed.php:163
 #, php-format
 msgid "Only %s URLs over plain HTTP please."
-msgstr ""
+msgstr "请只用HTTP明文的%sURLs的地址。"
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr "不支持的数据格式。"
 
@@ -2640,12 +2550,11 @@ msgstr "搜索用户"
 
 #: actions/opensearch.php:67
 msgid "Notice Search"
-msgstr "搜索通告"
+msgstr "搜索消息"
 
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
-msgstr "头å\83\8f设置"
+msgstr "å\85¶ä»\96设置"
 
 #: actions/othersettings.php:71
 msgid "Manage various other options."
@@ -2653,58 +2562,52 @@ msgstr "管理其他选项。"
 
 #: actions/othersettings.php:108
 msgid " (free service)"
-msgstr ""
+msgstr "(免费服务)"
 
 #: actions/othersettings.php:116
 msgid "Shorten URLs with"
-msgstr ""
+msgstr "缩短 URL 使用"
 
 #: actions/othersettings.php:117
 msgid "Automatic shortening service to use."
 msgstr "要使用的自动缩短服务。"
 
 #: actions/othersettings.php:122
-#, fuzzy
 msgid "View profile designs"
-msgstr "个人设置"
+msgstr "查看个人页面设计"
 
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
-msgstr ""
+msgstr "显示或隐藏个人页面设计。"
 
 #: actions/othersettings.php:153
-#, fuzzy
 msgid "URL shortening service is too long (max 50 chars)."
-msgstr "语言过长(不能超过50个字符)。"
+msgstr "短网址服务过长(不能超过50个字符)。"
 
 #: actions/otp.php:69
-#, fuzzy
 msgid "No user ID specified."
-msgstr "没æ\9c\89æ\94¶ä»¶äºº。"
+msgstr "æ­¤ID没æ\9c\89ç\9b¸åº\94ç\94¨æ\88·。"
 
 #: actions/otp.php:83
-#, fuzzy
 msgid "No login token specified."
-msgstr "没æ\9c\89æ\94¶ä»¶äºº。"
+msgstr "æ\8c\87å®\9aç\9a\84ç\99»å½\95令ç\89\8cæ\97 æ\95\88。"
 
 #: actions/otp.php:90
-#, fuzzy
 msgid "No login token requested."
-msgstr "æ\9cªæ\94¶å\88°è®¤è¯\81请æ±\82ï¼\81"
+msgstr "没æ\9c\89请æ±\82ç\99»å½\95令ç\89\8cã\80\82"
 
 #: actions/otp.php:95
 msgid "Invalid login token specified."
-msgstr ""
+msgstr "指定的登录令牌无效。"
 
 #: actions/otp.php:104
-#, fuzzy
 msgid "Login token expired."
-msgstr "登录"
+msgstr "登录令牌已过期。"
 
 #: actions/outbox.php:58
-#, fuzzy, php-format
+#, php-format
 msgid "Outbox for %1$s - page %2$d"
-msgstr "%s 的发件箱"
+msgstr "%1$s的发件箱 - 第%2$d页"
 
 #: actions/outbox.php:61
 #, php-format
@@ -2720,14 +2623,12 @@ msgid "Change password"
 msgstr "修改密码"
 
 #: actions/passwordsettings.php:69
-#, fuzzy
 msgid "Change your password."
-msgstr "修改密码"
+msgstr "修改您的密码"
 
 #: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
 msgid "Password change"
-msgstr "密码已保存。"
+msgstr "修改密码"
 
 #: actions/passwordsettings.php:104
 msgid "Old password"
@@ -2744,7 +2645,7 @@ msgstr "6 个或更多字符"
 #: actions/passwordsettings.php:112 actions/recoverpassword.php:239
 #: actions/register.php:440
 msgid "Confirm"
-msgstr "确认"
+msgstr "密码确认"
 
 #: actions/passwordsettings.php:113 actions/recoverpassword.php:240
 msgid "Same as password above"
@@ -2781,163 +2682,155 @@ msgstr "密码已保存。"
 #. TRANS: Menu item for site administration
 #: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:384
 msgid "Paths"
-msgstr ""
+msgstr "路径"
 
 #: actions/pathsadminpanel.php:70
 msgid "Path and server settings for this StatusNet site."
-msgstr ""
+msgstr "这个 StatusNet 网站的路径和服务器设置"
 
 #: actions/pathsadminpanel.php:157
 #, php-format
 msgid "Theme directory not readable: %s."
-msgstr ""
+msgstr "主题目录无法读取:%s。"
 
 #: actions/pathsadminpanel.php:163
 #, php-format
 msgid "Avatar directory not writable: %s."
-msgstr ""
+msgstr "头像目录无法写入:%s。"
 
 #: actions/pathsadminpanel.php:169
 #, php-format
 msgid "Background directory not writable: %s."
-msgstr ""
+msgstr "背景目录无法写入:%s。"
 
 #: actions/pathsadminpanel.php:177
 #, php-format
 msgid "Locales directory not readable: %s."
-msgstr ""
+msgstr "本地化目录无法读取:%s。"
 
 #: actions/pathsadminpanel.php:183
 msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "无效的 SSL 服务器。最大长度255个字符。"
 
 #: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-#, fuzzy
 msgid "Site"
-msgstr "邀请"
+msgstr "网站"
 
 #: actions/pathsadminpanel.php:238
-#, fuzzy
 msgid "Server"
-msgstr "æ\81¢å¤\8d"
+msgstr "æ\9c\8då\8a¡å\99¨"
 
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
-msgstr ""
+msgstr "网站的服务器主机名。"
 
 #: actions/pathsadminpanel.php:242
 msgid "Path"
-msgstr ""
+msgstr "路径"
 
 #: actions/pathsadminpanel.php:242
 msgid "Site path"
-msgstr ""
+msgstr "网站路径"
 
 #: actions/pathsadminpanel.php:246
 msgid "Path to locales"
-msgstr ""
+msgstr "本地化文件路径"
 
 #: actions/pathsadminpanel.php:246
 msgid "Directory path to locales"
-msgstr ""
+msgstr "本地化文件的目录路径"
 
 #: actions/pathsadminpanel.php:250
 msgid "Fancy URLs"
-msgstr ""
+msgstr "优化 URLs"
 
 #: actions/pathsadminpanel.php:252
 msgid "Use fancy (more readable and memorable) URLs?"
-msgstr ""
+msgstr "使用优化的 URLs(更简洁易记)?"
 
 #: actions/pathsadminpanel.php:259
 msgid "Theme"
-msgstr ""
+msgstr "主题"
 
 #: actions/pathsadminpanel.php:264
 msgid "Theme server"
-msgstr ""
+msgstr "主题服务器"
 
 #: actions/pathsadminpanel.php:268
 msgid "Theme path"
-msgstr ""
+msgstr "主题路径"
 
 #: actions/pathsadminpanel.php:272
 msgid "Theme directory"
-msgstr ""
+msgstr "主题目录"
 
 #: actions/pathsadminpanel.php:279
-#, fuzzy
 msgid "Avatars"
 msgstr "头像"
 
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
-msgstr "头像设置"
+msgstr "头像服务器"
 
 #: actions/pathsadminpanel.php:288
-#, fuzzy
 msgid "Avatar path"
-msgstr "头像已更新。"
+msgstr "头像路径"
 
 #: actions/pathsadminpanel.php:292
 msgid "Avatar directory"
-msgstr ""
+msgstr "头像目录"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
-msgstr ""
+msgstr "背景"
 
 #: actions/pathsadminpanel.php:305
 msgid "Background server"
-msgstr ""
+msgstr "背景服务器"
 
 #: actions/pathsadminpanel.php:309
 msgid "Background path"
-msgstr ""
+msgstr "背景图路径"
 
 #: actions/pathsadminpanel.php:313
 msgid "Background directory"
-msgstr ""
+msgstr "背景图目录"
 
 #: actions/pathsadminpanel.php:320
-#, fuzzy
 msgid "SSL"
-msgstr "SMS短信"
+msgstr "SSL"
 
 #: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
-#, fuzzy
 msgid "Never"
-msgstr "æ\81¢å¤\8d"
+msgstr "ä»\8eä¸\8d"
 
 #: actions/pathsadminpanel.php:324
-#, fuzzy
 msgid "Sometimes"
-msgstr "通告"
+msgstr "有时"
 
 #: actions/pathsadminpanel.php:325
 msgid "Always"
-msgstr ""
+msgstr "总是"
 
 #: actions/pathsadminpanel.php:329
 msgid "Use SSL"
-msgstr ""
+msgstr "使用 SSL"
 
 #: actions/pathsadminpanel.php:330
 msgid "When to use SSL"
-msgstr ""
+msgstr "使用 SSL 的时机"
 
 #: actions/pathsadminpanel.php:335
 msgid "SSL server"
-msgstr ""
+msgstr "SSL 服务器"
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
-msgstr ""
+msgstr "直接SSL请求访问的服务器"
 
 #: actions/pathsadminpanel.php:352
 msgid "Save paths"
-msgstr ""
+msgstr "保存路径"
 
 #: actions/peoplesearch.php:52
 #, php-format
@@ -2945,32 +2838,31 @@ msgid ""
 "Search for people on %%site.name%% by their name, location, or interests. "
 "Separate the terms by spaces; they must be 3 characters or more."
 msgstr ""
-"在 %%site.name%% 的用户信息中搜索,可以搜索姓名、未知和爱好。搜索条件至少包"
-"含 3 个字符,多个搜索条件用空格分隔。"
+"通过姓名、位置和爱好搜索在%%site.name%%的用户。搜索条件至少包含 3 个字符,多"
+"个搜索条件用空格分隔。"
 
 #: actions/peoplesearch.php:58
 msgid "People search"
 msgstr "搜索用户"
 
 #: actions/peopletag.php:68
-#, fuzzy, php-format
+#, php-format
 msgid "Not a valid people tag: %s."
-msgstr "不是有效的电子邮件。"
+msgstr "不是有效的标签:%s。"
 
 #: actions/peopletag.php:142
 #, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
-msgstr ""
+msgstr "用户自加标签%s - 第%d 页"
 
 #: actions/postnotice.php:95
-#, fuzzy
 msgid "Invalid notice content."
-msgstr "大小不正确。"
+msgstr "无效的消息内容。"
 
 #: actions/postnotice.php:101
 #, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr ""
+msgstr "消息许可证“%1$s”与这个网站的许可证“%2$s”不兼容。"
 
 #: actions/profilesettings.php:60
 msgid "Profile settings"
@@ -2982,9 +2874,8 @@ msgid ""
 msgstr "在这里更新个人信息,让大家对您了解得更多。"
 
 #: actions/profilesettings.php:99
-#, fuzzy
 msgid "Profile information"
-msgstr "个人设置"
+msgstr "个人信息"
 
 #: actions/profilesettings.php:108 lib/groupeditform.php:154
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -3004,16 +2895,16 @@ msgstr "主页"
 
 #: actions/profilesettings.php:117 actions/register.php:462
 msgid "URL of your homepage, blog, or profile on another site"
-msgstr "æ\82¨ç\9a\84主页ã\80\81å\8d\9a客æ\88\96å\9c¨å\85¶ä»\96ç«\99ç\82¹的URL"
+msgstr "æ\82¨ç\9a\84主页ã\80\81å\8d\9a客æ\88\96å\9c¨å\85¶ä»\96ç½\91ç«\99的URL"
 
 #: actions/profilesettings.php:122 actions/register.php:468
 #, php-format
 msgid "Describe yourself and your interests in %d chars"
-msgstr ""
+msgstr "用不超过%d个字符描述您自己和您的爱好"
 
 #: actions/profilesettings.php:125 actions/register.php:471
 msgid "Describe yourself and your interests"
-msgstr ""
+msgstr "描述您自己和您的爱好"
 
 #: actions/profilesettings.php:127 actions/register.php:473
 msgid "Bio"
@@ -3028,11 +2919,11 @@ msgstr "位置"
 
 #: actions/profilesettings.php:134 actions/register.php:480
 msgid "Where you are, like \"City, State (or Region), Country\""
-msgstr "你的位置,格式类似\"城市,省份,国家\""
+msgstr "您的地理位置,格式类似\"城市,省份,国家\""
 
 #: actions/profilesettings.php:138
 msgid "Share my current location when posting notices"
-msgstr ""
+msgstr "当发布消息时分享我的地理位置"
 
 #: actions/profilesettings.php:145 actions/tagother.php:149
 #: actions/tagother.php:209 lib/subscriptionlist.php:106
@@ -3043,7 +2934,7 @@ msgstr "标签"
 #: actions/profilesettings.php:147
 msgid ""
 "Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
-msgstr "你的标签 (字母letters, 数字numbers, -, ., 和 _), 以逗号或空格分隔"
+msgstr "您的标签 (字母、数字、“-”、“. ”和“ _”), 以逗号或空格分隔"
 
 #: actions/profilesettings.php:151
 msgid "Language"
@@ -3064,12 +2955,12 @@ msgstr "您一般处于哪个时区?"
 #: actions/profilesettings.php:167
 msgid ""
 "Automatically subscribe to whoever subscribes to me (best for non-humans)"
-msgstr "自动订阅任何订阅我的更新的人(这个选项最适合机器人)"
+msgstr "自动关注任何关注我的人 (这个选项适合机器人)"
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "位置过长(不能超过255个字符)。"
+msgstr "描述过长(不能超过%d个字符)。"
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
@@ -3080,27 +2971,25 @@ msgid "Language is too long (max 50 chars)."
 msgstr "语言过长(不能超过50个字符)。"
 
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
-msgstr "电子邮件地址 %s 不正确"
+msgstr "无效的标签:\"%s\"。"
 
 #: actions/profilesettings.php:306
 msgid "Couldn't update user for autosubscribe."
-msgstr "无法更新用户的自动订阅选项。"
+msgstr "无法更新用户的自动关注。"
 
 #: actions/profilesettings.php:363
-#, fuzzy
 msgid "Couldn't save location prefs."
-msgstr "无法保存个人信息。"
+msgstr "无法保存标签。"
 
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "无法保存个人信息。"
 
 #: actions/profilesettings.php:383
-#, fuzzy
 msgid "Couldn't save tags."
-msgstr "无法保存个人信息。"
+msgstr "无法保存标签。"
 
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
@@ -3110,50 +2999,49 @@ msgstr "设置已保存。"
 #: actions/public.php:83
 #, php-format
 msgid "Beyond the page limit (%s)."
-msgstr ""
+msgstr "超出页面限制(%s)。"
 
 #: actions/public.php:92
-#, fuzzy
 msgid "Could not retrieve public stream."
-msgstr "无法获取收藏的通告。"
+msgstr "无法获取到公共的时间线。"
 
 #: actions/public.php:130
-#, fuzzy, php-format
+#, php-format
 msgid "Public timeline, page %d"
-msgstr "å\85¬å¼\80ç\9a\84æ\97¶é\97´è¡¨"
+msgstr "å\85¬å\85±æ\97¶é\97´çº¿ï¼\8c第%d页"
 
 #: actions/public.php:132 lib/publicgroupnav.php:79
 msgid "Public timeline"
-msgstr "å\85¬å¼\80ç\9a\84æ\97¶é\97´è¡¨"
+msgstr "å\85¬å\85±æ\97¶é\97´çº¿"
 
 #: actions/public.php:160
 msgid "Public Stream Feed (RSS 1.0)"
-msgstr ""
+msgstr "公开的 RSS 聚合 (RSS 1.0)"
 
 #: actions/public.php:164
 msgid "Public Stream Feed (RSS 2.0)"
-msgstr ""
+msgstr "公开的 RSS 聚合 (RSS 2.0)"
 
 #: actions/public.php:168
 msgid "Public Stream Feed (Atom)"
-msgstr ""
+msgstr "公开的 RSS 聚合 (Atom)"
 
 #: actions/public.php:188
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the public timeline for %%site.name%% but no one has posted anything "
 "yet."
-msgstr "这是 %s 和好友的时间线,但是没有任何人发布内容。"
+msgstr "这是%%site.name%%的公共时间线,但是还没有人发布任何内容。"
 
 #: actions/public.php:191
 msgid "Be the first to post!"
-msgstr ""
+msgstr "成为第一个发布消息的人!"
 
 #: actions/public.php:195
 #, php-format
 msgid ""
 "Why not [register an account](%%action.register%%) and be the first to post!"
-msgstr ""
+msgstr "现在就 [注册](%%action.register%%) 并成为第一个发布消息的人!"
 
 #: actions/public.php:242
 #, php-format
@@ -3163,6 +3051,10 @@ msgid ""
 "tool. [Join now](%%action.register%%) to share notices about yourself with "
 "friends, family, and colleagues! ([Read more](%%doc.help%%))"
 msgstr ""
+"欢迎来到%%site.name%%,一个基于免费软件 [StatusNet](http://status.net/) 创建"
+"的 [微博客](http://zh.wikipedia.org/zh-hans/%E5%BE%AE%E5%8D%9A%E5%AE%A2) 服"
+"务。[现在加入](%%action.register%%) 并与你的朋友、家人和同事们一起分享你的消"
+"息。([查看更多](%%doc.help%%))"
 
 #: actions/public.php:247
 #, php-format
@@ -3171,40 +3063,41 @@ msgid ""
 "blogging) service based on the Free Software [StatusNet](http://status.net/) "
 "tool."
 msgstr ""
+"这里是%%site.name%%,一个基于自由软件[StatusNet](http://status.net/)的[微博"
+"客](http://zh.wikipedia.org/zh-hans/%E5%BE%AE%E5%8D%9A%E5%AE%A2) 。"
 
 #: actions/publictagcloud.php:57
-#, fuzzy
 msgid "Public tag cloud"
-msgstr "标签云聚集"
+msgstr "公开的标签云"
 
 #: actions/publictagcloud.php:63
 #, php-format
 msgid "These are most popular recent tags on %s "
-msgstr "这些是最近的 %s 流行标签 "
+msgstr "这些是%s最近的流行的标签 "
 
 #: actions/publictagcloud.php:69
 #, php-format
 msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
-msgstr ""
+msgstr "还没有人发布带[标签](%%doc.tags%%)的消息。"
 
 #: actions/publictagcloud.php:72
 msgid "Be the first to post one!"
-msgstr ""
+msgstr "成为第一个发布消息的人!"
 
 #: actions/publictagcloud.php:75
 #, php-format
 msgid ""
 "Why not [register an account](%%action.register%%) and be the first to post "
 "one!"
-msgstr ""
+msgstr "现在就[注册](%%action.register%%)并发布第一个!"
 
 #: actions/publictagcloud.php:134
 msgid "Tag cloud"
-msgstr "标签云聚集"
+msgstr "标签云"
 
 #: actions/recoverpassword.php:36
 msgid "You are already logged in!"
-msgstr "已登录!"
+msgstr "您已经登录了!"
 
 #: actions/recoverpassword.php:62
 msgid "No such recovery code."
@@ -3216,7 +3109,7 @@ msgstr "不是恢复码。"
 
 #: actions/recoverpassword.php:73
 msgid "Recovery code for unknown user."
-msgstr "æ\81¢å¤\8dç \81æ\9cªç\9f¥"
+msgstr "æ\9cªç\9f¥ç\94¨æ\88·ç\9a\84æ\81¢å¤\8dç \81"
 
 #: actions/recoverpassword.php:86
 msgid "Error with confirmation code."
@@ -3224,32 +3117,29 @@ msgstr "验证码出错。"
 
 #: actions/recoverpassword.php:97
 msgid "This confirmation code is too old. Please start again."
-msgstr "验证码超时,请重来。"
+msgstr "验证码已过期,请重来。"
 
 #: actions/recoverpassword.php:111
 msgid "Could not update user with confirmed email address."
 msgstr "无法更新已确认的电子邮件。"
 
 #: actions/recoverpassword.php:152
-#, fuzzy
 msgid ""
 "If you have forgotten or lost your password, you can get a new one sent to "
 "the email address you have stored in your account."
-msgstr "恢复密码的指示已被发送到您的注册邮箱。"
+msgstr "如果您忘记或丢失了密码,您可以发送一个新的密码到您之前设置的邮箱中。"
 
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
-msgstr ""
+msgstr "您的身份已被验证,请在下面输入新的密码。 "
 
 #: actions/recoverpassword.php:188
-#, fuzzy
 msgid "Password recovery"
-msgstr "请求恢复密码"
+msgstr "恢复密码"
 
 #: actions/recoverpassword.php:191
-#, fuzzy
 msgid "Nickname or email address"
-msgstr "输入昵称或电子邮件。"
+msgstr "昵称或电子邮件"
 
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
@@ -3269,7 +3159,7 @@ msgstr "恢复密码"
 
 #: actions/recoverpassword.php:210 actions/recoverpassword.php:335
 msgid "Password recovery requested"
-msgstr "请求恢复密码"
+msgstr "已请求密码恢复"
 
 #: actions/recoverpassword.php:213
 msgid "Unknown action"
@@ -3277,7 +3167,7 @@ msgstr "未知动作"
 
 #: actions/recoverpassword.php:236
 msgid "6 or more characters, and don't forget it!"
-msgstr "6 个或更多字符,不能忘记!"
+msgstr "至少6个字符,还有,别忘记它!"
 
 #: actions/recoverpassword.php:243
 msgid "Reset"
@@ -3293,7 +3183,7 @@ msgstr "没有拥有这个用户名或电子邮件的用户。"
 
 #: actions/recoverpassword.php:299
 msgid "No registered email address for that user."
-msgstr "用户没有注册电子邮件。"
+msgstr "该用户没有登记电子邮件。"
 
 #: actions/recoverpassword.php:313
 msgid "Error saving address confirmation."
@@ -3303,7 +3193,7 @@ msgstr "保存地址确认时出错。"
 msgid ""
 "Instructions for recovering your password have been sent to the email "
 "address registered to your account."
-msgstr "恢复密码的指示已被发送到您的注册邮箱。"
+msgstr "恢复密码的说明已被发送到您登记的电子邮箱中。"
 
 #: actions/recoverpassword.php:357
 msgid "Unexpected password reset."
@@ -3315,7 +3205,7 @@ msgstr "密码必须是 6 个字符或更多。"
 
 #: actions/recoverpassword.php:369
 msgid "Password and confirmation do not match."
-msgstr "密码和确认不匹配。"
+msgstr "密码和确认密码不匹配。"
 
 #: actions/recoverpassword.php:388 actions/register.php:255
 msgid "Error setting user."
@@ -3327,16 +3217,15 @@ msgstr "新密码已保存,您现在已登录。"
 
 #: actions/register.php:92 actions/register.php:196 actions/register.php:412
 msgid "Sorry, only invited people can register."
-msgstr "对不起,请邀请那些能注册的人。"
+msgstr "对不起,只有被邀请的用户才能注册。"
 
 #: actions/register.php:99
-#, fuzzy
 msgid "Sorry, invalid invitation code."
-msgstr "验证码出错。"
+msgstr "对不起,无效的邀请码。"
 
 #: actions/register.php:119
 msgid "Registration successful"
-msgstr "注册成功"
+msgstr "注册成功"
 
 #: actions/register.php:121 actions/register.php:506 lib/logingroupnav.php:85
 msgid "Register"
@@ -3348,7 +3237,7 @@ msgstr "不允许注册。"
 
 #: actions/register.php:205
 msgid "You can't register if you don't agree to the license."
-msgstr "您必须同意此授权方可注册。"
+msgstr "您必须同意许可协议才能注册。"
 
 #: actions/register.php:219
 msgid "Email address already exists."
@@ -3363,18 +3252,20 @@ msgid ""
 "With this form you can create a new account. You can then post notices and "
 "link up to friends and colleagues. "
 msgstr ""
+"您可以通过此表单建立一个新的账户。然后您就可以发布消息并与朋友和同事们保持联"
+"系。 "
 
 #: actions/register.php:432
 msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr "1 å\88° 64 ä¸ªå°\8få\86\99å­\97æ¯\8dæ\88\96æ\95°å­\97ï¼\8cä¸\8då\8c\85å\90«æ \87ç\82¹å\8f\8a空ç\99½。此项必填。"
+msgstr "1 å\88° 64 ä½\8dç\9a\84å°\8få\86\99å­\97æ¯\8dæ\88\96æ\95°å­\97ï¼\8cä¸\8dè\83½ä½¿ç\94¨æ \87ç\82¹å\92\8c空格。此项必填。"
 
 #: actions/register.php:437
 msgid "6 or more characters. Required."
-msgstr "6 个或更多字符。此项必填。"
+msgstr "至少 6 位字符。此项必填。"
 
 #: actions/register.php:441
 msgid "Same as password above. Required."
-msgstr "相同的密码。此项必填。"
+msgstr "与上面输入相同的密码。此项必填。"
 
 #. TRANS: Link description in user account settings menu.
 #: actions/register.php:445 actions/register.php:449
@@ -3384,32 +3275,32 @@ msgstr "电子邮件"
 
 #: actions/register.php:446 actions/register.php:450
 msgid "Used only for updates, announcements, and password recovery"
-msgstr "只用于更新、通告或密码恢复"
+msgstr "只用于更新、通知及密码恢复"
 
 #: actions/register.php:457
 msgid "Longer name, preferably your \"real\" name"
-msgstr "长名字,最好是“实名”"
+msgstr "更长的名字,最好是“真实姓名”"
 
 #: actions/register.php:518
 #, php-format
 msgid ""
 "I understand that content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "我明白%1$s的信息是私人且保密的。"
 
 #: actions/register.php:528
 #, php-format
 msgid "My text and files are copyright by %1$s."
-msgstr ""
+msgstr "我的文字和文件的版权归%1$s所有。"
 
 #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved with ownership left to contributors.
 #: actions/register.php:532
 msgid "My text and files remain under my own copyright."
-msgstr ""
+msgstr "我的文字和文件的版权由我自己保留。"
 
 #. TRANS: Copyright checkbox label in registration dialog, for all rights reserved.
 #: actions/register.php:535
 msgid "All rights reserved."
-msgstr ""
+msgstr "保留所有权利。"
 
 #. TRANS: Copyright checkbox label in registration dialog, for Creative Commons-style licenses.
 #: actions/register.php:540
@@ -3418,6 +3309,8 @@ msgid ""
 "My text and files are available under %s except this private data: password, "
 "email address, IM address, and phone number."
 msgstr ""
+"我的文字和文件在%s下提供,除了隐私内容:密码、电子邮件地址、IM 地址和电话号"
+"码。"
 
 #: actions/register.php:583
 #, php-format
@@ -3437,6 +3330,17 @@ msgid ""
 "\n"
 "Thanks for signing up and we hope you enjoy using this service."
 msgstr ""
+"恭喜,%s!欢迎来到%%%%site.name%%%%。您可能想要……\n"
+"\n"
+"* 查看您的[资料页](%2$s) 并发布您的第一条消息.\n"
+"* 添加 [Jabber/GTalk 地址](%%%%action.imsettings%%%%) 然后通过 IM 发布信"
+"息。\n"
+"* [搜索](%%%%action.peoplesearch%%%%) 您认识的或和您有共同兴趣的朋友。 \n"
+"* 更新您的 [资料页设置](%%%%action.profilesettings%%%%) 告诉大家更多关于您的"
+"情况。 \n"
+"* 阅读 [在线文档](%%%%doc.help%%%%) 有的功能也许您还不熟悉。\n"
+"\n"
+"感谢您的注册,希望您喜欢这个服务。"
 
 #: actions/register.php:607
 msgid ""
@@ -3451,18 +3355,17 @@ msgid ""
 "register%%) a new  account. If you already have an account  on a [compatible "
 "microblogging site](%%doc.openmublog%%),  enter your profile URL below."
 msgstr ""
-"要订阅,你可以登录 (%%action.login%%), 或注册(%%action.register%%) 一个新帐"
-"号。如果你已经有在另一个兼容的微博客的帐号(%%doc.openmublog%%),  请填入你资料"
-"的互联网地址URL."
+"要关注用户或小组,您需要[登录](%%action.login%%),或[注册](%%action.register%"
+"%) 一个新账户。如果您已经在另一个[兼容的微博客](%%doc.openmublog%%)有账户,请"
+"填入您的资料页 URL。"
 
 #: actions/remotesubscribe.php:112
 msgid "Remote subscribe"
-msgstr "远程订阅"
+msgstr "远程关注"
 
 #: actions/remotesubscribe.php:124
-#, fuzzy
 msgid "Subscribe to a remote user"
-msgstr "订阅 %s"
+msgstr "关注一个远程用户"
 
 #: actions/remotesubscribe.php:129
 msgid "User nickname"
@@ -3470,64 +3373,60 @@ msgstr "昵称"
 
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
-msgstr "希望订阅的用户的昵称"
+msgstr "希望关注的用户昵称"
 
 #: actions/remotesubscribe.php:133
 msgid "Profile URL"
-msgstr "个人信息URL"
+msgstr "资料页 URL"
 
 #: actions/remotesubscribe.php:134
 msgid "URL of your profile on another compatible microblogging service"
-msgstr "您在其他兼容的微博客服务的个人信息URL"
+msgstr "您在其他兼容的微博客服务的资料页 URL"
 
 #: actions/remotesubscribe.php:137 lib/subscribeform.php:139
 #: lib/userprofile.php:406
 msgid "Subscribe"
-msgstr "订阅"
+msgstr "关注"
 
 #: actions/remotesubscribe.php:159
 msgid "Invalid profile URL (bad format)"
-msgstr "个人信息URL不正确(格式错误)"
+msgstr "无效的用户 URL (格式错误)"
 
 #: actions/remotesubscribe.php:168
 msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr ""
+msgstr "不是有效的资料页 URL (没有YADIS 文档或定义了无效的 XRDS)。"
 
 #: actions/remotesubscribe.php:176
 msgid "That’s a local profile! Login to subscribe."
-msgstr ""
+msgstr "这是一个本地用户!需要登录才能关注。"
 
 #: actions/remotesubscribe.php:183
 msgid "Couldn’t get a request token."
-msgstr ""
+msgstr "无法获得一个 request token。"
 
 #: actions/repeat.php:57
-#, fuzzy
 msgid "Only logged-in users can repeat notices."
-msgstr "å\8fªæ\9c\89ç\94¨æ\88·è\87ªå·±å\8f¯ä»¥è®¿é\97®é\82®ç®±。"
+msgstr "å\8fªæ\9c\89ç\99»å½\95ç\9a\84ç\94¨æ\88·æ\89\8dè\83½é\87\8då¤\8då\8f\91æ¶\88æ\81¯。"
 
 #: actions/repeat.php:64 actions/repeat.php:71
-#, fuzzy
 msgid "No notice specified."
-msgstr "没æ\9c\89æ\94¶ä»¶äºº。"
+msgstr "没æ\9c\89æ\8c\87å®\9aç\9a\84æ¶\88æ\81¯。"
 
 #: actions/repeat.php:76
-#, fuzzy
 msgid "You can't repeat your own notice."
-msgstr "您必须同意此授权方可注册。"
+msgstr "你不能重复自己的消息。"
 
 #: actions/repeat.php:90
 msgid "You already repeated that notice."
-msgstr ""
+msgstr "您已转发过了那个消息。"
 
 #: actions/repeat.php:114 lib/noticelist.php:676
-#, fuzzy
 msgid "Repeated"
-msgstr "特征"
+msgstr "已转发"
 
 #: actions/repeat.php:119
 msgid "Repeated!"
-msgstr ""
+msgstr "已转发!"
 
 #: actions/replies.php:126 actions/repliesrss.php:68
 #: lib/personalgroupnav.php:105
@@ -3536,31 +3435,31 @@ msgid "Replies to %s"
 msgstr "%s 的回复"
 
 #: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s, page %2$d"
-msgstr "%s 的回复"
+msgstr "对%s的回复,第%2$d页"
 
 #: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 1.0)"
-msgstr "%s 好友的聚合(RSS 1.0)"
+msgstr "%s 的回复聚合 (RSS 1.0)"
 
 #: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (RSS 2.0)"
-msgstr "%s 好友的聚合(RSS 2.0)"
+msgstr "%s 的回复聚合 (RSS 2.0)"
 
 #: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "Replies feed for %s (Atom)"
-msgstr "%s 好友的聚合(Atom)"
+msgstr "%s 的回复聚合 (Atom)"
 
 #: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
 msgid ""
 "This is the timeline showing replies to %1$s but %2$s hasn't received a "
 "notice to them yet."
-msgstr "这是 %s 和好友的时间线,但是没有任何人发布内容。"
+msgstr "这里显示了所有发送@给%s的信息,但是%2$s还没有收到任何人的消息。"
 
 #: actions/replies.php:204
 #, php-format
@@ -3568,6 +3467,7 @@ msgid ""
 "You can engage other users in a conversation, subscribe to more people or "
 "[join groups](%%action.groups%%)."
 msgstr ""
+"您可以让其他用户参与对话,关注更多的人或者 [加入小组](%%action.groups%%)。"
 
 #: actions/replies.php:206
 #, php-format
@@ -3575,100 +3475,94 @@ msgid ""
 "You can try to [nudge %1$s](../%2$s) or [post something to them](%%%%action."
 "newnotice%%%%?status_textarea=%3$s)."
 msgstr ""
+"您可以试着 [呼叫%1$s](../%2$s) 或者给他们 [发一些消息](%%%%action.newnotice%%"
+"%%?status_textarea=%3$s)。"
 
 #: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
 msgid "Replies to %1$s on %2$s!"
-msgstr "å\8f\91é\80\81ç»\99 %1$s ç\9a\84 %2$s æ¶\88æ\81¯"
+msgstr "对%sç\9a\84å\9b\9eå¤\8dï¼\8c第%2$d页"
 
 #: actions/revokerole.php:75
-#, fuzzy
 msgid "You cannot revoke user roles on this site."
-msgstr "在这个网站你被禁止发布消息。"
+msgstr "您不能在这个网站移除用户角色。"
 
 #: actions/revokerole.php:82
 msgid "User doesn't have this role."
-msgstr ""
+msgstr "用户没有角色。"
 
 #: actions/rsd.php:146 actions/version.php:159
-#, fuzzy
 msgid "StatusNet"
-msgstr "统计"
+msgstr "StatusNet"
 
 #: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
 msgid "You cannot sandbox users on this site."
-msgstr "æ\97 æ³\95å\90\91æ­¤ç\94¨æ\88·å\8f\91é\80\81æ¶\88æ\81¯。"
+msgstr "æ\82¨ä¸\8dè\83½å\9c¨è¿\99个ç½\91ç«\99æ\8e\88äº\88ç\94¨æ\88·è§\92è\89²。"
 
 #: actions/sandbox.php:72
 msgid "User is already sandboxed."
-msgstr ""
+msgstr "用于已经在沙盒中了。"
 
 #. TRANS: Menu item for site administration
 #: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
 #: lib/adminpanelaction.php:392
 msgid "Sessions"
-msgstr ""
+msgstr "会话"
 
 #: actions/sessionsadminpanel.php:65
 msgid "Session settings for this StatusNet site."
-msgstr ""
+msgstr "这个 StatusNet 网站的设计设置"
 
 #: actions/sessionsadminpanel.php:175
 msgid "Handle sessions"
-msgstr ""
+msgstr "管理会话"
 
 #: actions/sessionsadminpanel.php:177
 msgid "Whether to handle sessions ourselves."
-msgstr ""
+msgstr "是否自己处理sessions。"
 
 #: actions/sessionsadminpanel.php:181
 msgid "Session debugging"
-msgstr ""
+msgstr "会话调试"
 
 #: actions/sessionsadminpanel.php:183
 msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "打开会话的调试输出。"
 
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
-#, fuzzy
 msgid "Save site settings"
-msgstr "头像设置"
+msgstr "保存访问设置"
 
 #: actions/showapplication.php:82
-#, fuzzy
 msgid "You must be logged in to view an application."
 msgstr "您必须登录才能创建小组。"
 
 #: actions/showapplication.php:157
 msgid "Application profile"
-msgstr ""
+msgstr "未找到应用。"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
-msgstr ""
+msgstr "图标"
 
 #. TRANS: Form input field label for application name.
 #: actions/showapplication.php:169 actions/version.php:197
 #: lib/applicationeditform.php:199
-#, fuzzy
 msgid "Name"
-msgstr "称"
+msgstr "称"
 
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
-#, fuzzy
 msgid "Organization"
-msgstr "分页"
+msgstr "组织名称必填。"
 
 #. TRANS: Form input field label.
 #: actions/showapplication.php:187 actions/version.php:200
 #: lib/applicationeditform.php:216 lib/groupeditform.php:172
-#, fuzzy
 msgid "Description"
-msgstr "订阅"
+msgstr "描述"
 
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
@@ -3678,59 +3572,58 @@ msgstr "统计"
 #: actions/showapplication.php:203
 #, php-format
 msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgstr "由%1$s创建 - 默认访问权限%2$s - %3$d个用户"
 
 #: actions/showapplication.php:213
 msgid "Application actions"
-msgstr ""
+msgstr "应用程序动作"
 
 #: actions/showapplication.php:236
 msgid "Reset key & secret"
-msgstr ""
+msgstr "重置key和secret"
 
 #: actions/showapplication.php:261
 msgid "Application info"
-msgstr ""
+msgstr "应用程序信息"
 
 #: actions/showapplication.php:263
 msgid "Consumer key"
-msgstr ""
+msgstr "Consumer key"
 
 #: actions/showapplication.php:268
 msgid "Consumer secret"
-msgstr ""
+msgstr "Consumer secret"
 
 #: actions/showapplication.php:273
 msgid "Request token URL"
-msgstr ""
+msgstr "请求令牌URL"
 
 #: actions/showapplication.php:278
 msgid "Access token URL"
-msgstr ""
+msgstr "访问令牌URL"
 
 #: actions/showapplication.php:283
 msgid "Authorize URL"
-msgstr ""
+msgstr "授权URL"
 
 #: actions/showapplication.php:288
 msgid ""
 "Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
 "signature method."
-msgstr ""
+msgstr "提示:我们支持HMAC-SHA1签名。我们不支持明文的签名方法。"
 
 #: actions/showapplication.php:309
-#, fuzzy
 msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "确定要删除这条消息吗?"
+msgstr "您确定要重置你的consumer key和secret吗?"
 
 #: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s 收藏的通告"
+msgstr "%1$s收藏的消息,第%2$d页"
 
 #: actions/showfavorites.php:132
 msgid "Could not retrieve favorite notices."
-msgstr "无法获取收藏的通告。"
+msgstr "无法获取收藏的消息。"
 
 #: actions/showfavorites.php:171
 #, php-format
@@ -3752,13 +3645,15 @@ msgid ""
 "You haven't chosen any favorite notices yet. Click the fave button on "
 "notices you like to bookmark them for later or shed a spotlight on them."
 msgstr ""
+"您还没收藏任何消息呢。点击消息上的添加收藏按钮就可以添加到收藏夹以后查看或者"
+"收藏一堆有趣的消息。"
 
 #: actions/showfavorites.php:208
 #, php-format
 msgid ""
 "%s hasn't added any favorite notices yet. Post something interesting they "
 "would add to their favorites :)"
-msgstr ""
+msgstr "%s还没有收藏任何的消息。发一些他/她可能会添加到收藏的有趣的消息吧 :)"
 
 #: actions/showfavorites.php:212
 #, php-format
@@ -3767,25 +3662,26 @@ msgid ""
 "action.register%%%%) and then post something interesting they would add to "
 "their favorites :)"
 msgstr ""
+"%s还没有收藏任何的消息。现在就 [注册账户](%%%%action.register%%%%) 并发一些"
+"他/她可能会添加到收藏的有趣的消息吧 :)"
 
 #: actions/showfavorites.php:243
 msgid "This is a way to share what you like."
-msgstr ""
+msgstr "这是一种分享你喜欢的内容的方式。"
 
 #: actions/showgroup.php:82 lib/groupnav.php:86
 #, php-format
 msgid "%s group"
-msgstr "%s 组"
+msgstr "%s 组"
 
 #: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s group, page %2$d"
-msgstr "组,第 %d 页"
+msgstr "%1$s小组,第%2$d页"
 
 #: actions/showgroup.php:227
-#, fuzzy
 msgid "Group profile"
-msgstr "组logo"
+msgstr "小组资料"
 
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
@@ -3794,32 +3690,31 @@ msgstr "URL 互联网地址"
 
 #: actions/showgroup.php:283 actions/tagother.php:128
 #: actions/userauthorization.php:187 lib/userprofile.php:195
-#, fuzzy
 msgid "Note"
-msgstr "é\80\9aå\91\8a"
+msgstr "注é\87\8a"
 
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
-msgstr ""
+msgstr "别名"
 
 #: actions/showgroup.php:302
 msgid "Group actions"
-msgstr "组动作"
+msgstr "组动作"
 
 #: actions/showgroup.php:338
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "%s 好友的聚合(RSS 1.0)"
+msgstr "%s小组的消息聚合 (RSS 1.0)"
 
 #: actions/showgroup.php:344
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "%s 好友的聚合(RSS 2.0)"
+msgstr "%s小组的消息聚合 (RSS 2.0)"
 
 #: actions/showgroup.php:350
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s group (Atom)"
-msgstr "%s 好友的聚合(Atom)"
+msgstr "%s小组的消息聚合 (Atom)"
 
 #: actions/showgroup.php:355
 #, php-format
@@ -3827,24 +3722,22 @@ msgid "FOAF for %s group"
 msgstr "%s 的发件箱"
 
 #: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
-#, fuzzy
 msgid "Members"
-msgstr "用户始于"
+msgstr "成员"
 
 #: actions/showgroup.php:398 lib/profileaction.php:117
 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
 msgid "(None)"
-msgstr "ï¼\88没æ\9c\89)"
+msgstr "ï¼\88æ\97 )"
 
 #: actions/showgroup.php:404
 msgid "All members"
 msgstr "所有成员"
 
 #: actions/showgroup.php:439
-#, fuzzy
 msgid "Created"
-msgstr "特征"
+msgstr "建立"
 
 #: actions/showgroup.php:455
 #, php-format
@@ -3855,6 +3748,11 @@ msgid ""
 "their life and interests. [Join now](%%%%action.register%%%%) to become part "
 "of this group and many more! ([Read more](%%%%doc.help%%%%))"
 msgstr ""
+"**%s**是%%%%site.name%%%%上的一个用户小组,%%%%site.name%%%%是一个基于自由软"
+"件[StatusNet](http://status.net/)的[微博客](http://zh.wikipedia.org/zh-hans/%"
+"E5%BE%AE%E5%8D%9A%E5%AE%A2)服务。用户通过短消息分享他们的生活和兴趣。现在[加"
+"入](%%%%action.register%%%%)成为该小组的一员并享受更多的欢乐!([阅读更多](%%"
+"%%doc.help%%%%))"
 
 #: actions/showgroup.php:461
 #, php-format
@@ -3864,11 +3762,14 @@ msgid ""
 "[StatusNet](http://status.net/) tool. Its members share short messages about "
 "their life and interests. "
 msgstr ""
+"**%s** 是%%%%site.name%%%%上的一个小组,%%%%site.name%%%%是一个基于自由软件 "
+"[StatusNet](http://status.net/) 的[微博客](http://zh.wikipedia.org/zh-hans/%"
+"E5%BE%AE%E5%8D%9A%E5%AE%A2)。%%%%site.name%%%%的用户分享关于他们生活和各种兴"
+"趣的消息。"
 
 #: actions/showgroup.php:489
-#, fuzzy
 msgid "Admins"
-msgstr "admin管理员"
+msgstr "管理员"
 
 #: actions/showmessage.php:81
 msgid "No such message."
@@ -3889,55 +3790,54 @@ msgid "Message from %1$s on %2$s"
 msgstr "来自 %1$s 的 %2$s 消息"
 
 #: actions/shownotice.php:90
-#, fuzzy
 msgid "Notice deleted."
-msgstr "æ¶\88æ\81¯å·²å\8f\91å¸\83ã\80\82"
+msgstr "æ¶\88æ\81¯å·²å\88 é\99¤"
 
 #: actions/showstream.php:73
-#, fuzzy, php-format
+#, php-format
 msgid " tagged %s"
-msgstr "带 %s 标签的通告"
+msgstr "带%s标签的"
 
 #: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s, page %2$d"
-msgstr "%1$s 和好友,第%2$d页"
+msgstr "%1$s,第%2$d页"
 
 #: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "%s 好友的聚合(RSS 1.0)"
+msgstr "%1$s的有%2$s标签的消息聚合 (RSS 1.0)"
 
 #: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 1.0)"
-msgstr "%s 好友的聚合(RSS 1.0)"
+msgstr "%s的消息聚合 (RSS 1.0)"
 
 #: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (RSS 2.0)"
-msgstr "%s 好友的聚合(RSS 2.0)"
+msgstr "%s的消息聚合 (RSS 2.0)"
 
 #: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for %s (Atom)"
-msgstr "%s 好友的聚合(Atom)"
+msgstr "%s的消息聚合 (Atom)"
 
 #: actions/showstream.php:148
-#, fuzzy, php-format
+#, php-format
 msgid "FOAF for %s"
-msgstr "%s 的发件箱"
+msgstr "%s的FOAF"
 
 #: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
 msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
-msgstr "这是 %s 和好友的时间线,但是没有任何人发布内容。"
+msgstr "这是%1$s的时间线,但是%2$s还没有发布任何内容。"
 
 #: actions/showstream.php:205
 msgid ""
 "Seen anything interesting recently? You haven't posted any notices yet, now "
 "would be a good time to start :)"
-msgstr ""
+msgstr "最近看到了什么有趣的消息了么?您还没有发布消息呢,现在开始吧 :)"
 
 #: actions/showstream.php:207
 #, php-format
@@ -3945,6 +3845,8 @@ msgid ""
 "You can try to nudge %1$s or [post something to them](%%%%action.newnotice%%%"
 "%?status_textarea=%2$s)."
 msgstr ""
+"您可以试着呼叫%1$s或给他们 [发一些消息](%%%%action.newnotice%%%%?"
+"status_textarea=%2$s)。"
 
 #: actions/showstream.php:243
 #, php-format
@@ -3954,6 +3856,10 @@ msgid ""
 "[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
 "follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
 msgstr ""
+"**%s**在%%%%site.name%%%%有一个账号,%%%%site.name%%%%是一个基于自由软件"
+"[StatusNet](http://status.net/)的[微博客](http://zh.wikipedia.org/zh-hans/%"
+"E5%BE%AE%E5%8D%9A%E5%AE%A2)服务。[现在加入](%%%%action.register%%%%)并关注**%"
+"s**的消息和享受更多乐趣! ([阅读更多](%%%%doc.help%%%%))"
 
 #: actions/showstream.php:248
 #, php-format
@@ -3962,160 +3868,152 @@ msgid ""
 "wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
 "[StatusNet](http://status.net/) tool. "
 msgstr ""
+"**%s**在%%%%site.name%%%%有一个账号,%%%%site.name%%%%是一个基于自由软件"
+"[StatusNet](http://status.net/)的[微博客](http://zh.wikipedia.org/zh-hans/%"
+"E5%BE%AE%E5%8D%9A%E5%AE%A2)。"
 
 #: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
 msgid "Repeat of %s"
-msgstr "%s 的回复"
+msgstr "%s 的转发"
 
 #: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
 msgid "You cannot silence users on this site."
-msgstr "æ\97 æ³\95å\90\91æ­¤ç\94¨æ\88·å\8f\91é\80\81æ¶\88æ\81¯。"
+msgstr "æ\82¨ä¸\8dè\83½å\9c¨è¿\99个ç«\99ç\82¹ç§»é\99¤ç\94¨æ\88·è§\92è\89²。"
 
 #: actions/silence.php:72
 msgid "User is already silenced."
-msgstr ""
+msgstr "用户已经静默。"
 
 #: actions/siteadminpanel.php:69
 msgid "Basic settings for this StatusNet site"
-msgstr ""
+msgstr "这个 StatusNet 网站的基本设置"
 
 #: actions/siteadminpanel.php:133
 msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "网站名称长度必须大于零。"
 
 #: actions/siteadminpanel.php:141
-#, fuzzy
 msgid "You must have a valid contact email address."
-msgstr "不是有效的电子邮件。"
+msgstr "您必须有一个有效的 email 地址。"
 
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
-msgstr ""
+msgstr "未知的语言“%s”"
 
 #: actions/siteadminpanel.php:165
 msgid "Minimum text limit is 0 (unlimited)."
-msgstr ""
+msgstr "最短的文字限制为0(没有限制)。"
 
 #: actions/siteadminpanel.php:171
 msgid "Dupe limit must be one or more seconds."
-msgstr ""
+msgstr "防刷新限制至少要1秒或者更长。"
 
 #: actions/siteadminpanel.php:221
 msgid "General"
-msgstr ""
+msgstr "一般"
 
 #: actions/siteadminpanel.php:224
 msgid "Site name"
-msgstr ""
+msgstr "网站名称"
 
 #: actions/siteadminpanel.php:225
 msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr ""
+msgstr "您的网站名称,例如\\\"您公司网站的微博\\\""
 
 #: actions/siteadminpanel.php:229
 msgid "Brought by"
-msgstr ""
+msgstr "提供商"
 
 #: actions/siteadminpanel.php:230
 msgid "Text used for credits link in footer of each page"
-msgstr ""
+msgstr "用于每页页脚的 credits 链接文字"
 
 #: actions/siteadminpanel.php:234
 msgid "Brought by URL"
-msgstr ""
+msgstr "提供商 URL"
 
 #: actions/siteadminpanel.php:235
 msgid "URL used for credits link in footer of each page"
-msgstr ""
+msgstr "用于每页页脚的 credits URL"
 
 #: actions/siteadminpanel.php:239
-#, fuzzy
 msgid "Contact email address for your site"
-msgstr "新的电子邮件地址,用于发布 %s 信息"
+msgstr "网站的联系我们电子邮件地址"
 
 #: actions/siteadminpanel.php:245
-#, fuzzy
 msgid "Local"
-msgstr "本地显示"
+msgstr "本地"
 
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
-msgstr ""
+msgstr "默认时区"
 
 #: actions/siteadminpanel.php:257
 msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "默认的网站时区;通常使用 UTC。"
 
 #: actions/siteadminpanel.php:262
-#, fuzzy
 msgid "Default language"
-msgstr "é¦\96é\80\89语言"
+msgstr "é»\98认语言"
 
 #: actions/siteadminpanel.php:263
 msgid "Site language when autodetection from browser settings is not available"
-msgstr ""
+msgstr "当从浏览器自动获取语言不可用时网站的语言"
 
 #: actions/siteadminpanel.php:271
 msgid "Limits"
-msgstr ""
+msgstr "限制"
 
 #: actions/siteadminpanel.php:274
 msgid "Text limit"
-msgstr ""
+msgstr "文字限制"
 
 #: actions/siteadminpanel.php:274
 msgid "Maximum number of characters for notices."
-msgstr ""
+msgstr "消息最长的字符数。"
 
 #: actions/siteadminpanel.php:278
 msgid "Dupe limit"
-msgstr ""
+msgstr "防刷新限制"
 
 #: actions/siteadminpanel.php:278
 msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+msgstr "用户再次发布相同内容时需要等待的时间(秒)。"
 
 #: actions/sitenoticeadminpanel.php:56
-#, fuzzy
 msgid "Site Notice"
-msgstr "通告"
+msgstr "网站消息"
 
 #: actions/sitenoticeadminpanel.php:67
-#, fuzzy
 msgid "Edit site-wide message"
-msgstr "消息"
+msgstr "编辑整个网站的消息"
 
 #: actions/sitenoticeadminpanel.php:103
-#, fuzzy
 msgid "Unable to save site notice."
-msgstr "无法保存 Twitter 设置!"
+msgstr "保存网站消息"
 
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
-msgstr ""
+msgstr "整个网站最长的消息限制为255字符。"
 
 #: actions/sitenoticeadminpanel.php:176
-#, fuzzy
 msgid "Site notice text"
-msgstr "删除通告"
+msgstr "网站消息文字"
 
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
-msgstr ""
+msgstr "整个网站的消息文字(最长255字符;可使用HTML)"
 
 #: actions/sitenoticeadminpanel.php:198
-#, fuzzy
 msgid "Save site notice"
-msgstr "删除通告"
+msgstr "保存网站消息"
 
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
-#, fuzzy
 msgid "SMS settings"
-msgstr "头像设置"
+msgstr "SMS 设置"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4127,13 +4025,12 @@ msgstr "您可以通过 %%site.name%% 的电子邮件接收SMS短信。"
 #. TRANS: Message given in the SMS settings if SMS is not enabled on the site.
 #: actions/smssettings.php:97
 msgid "SMS is not available."
-msgstr ""
+msgstr "SMS 不可用。"
 
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
-#, fuzzy
 msgid "SMS address"
-msgstr "电子邮件地址"
+msgstr "SMS 地址"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4157,16 +4054,14 @@ msgstr "输入手机收到的验证码。"
 
 #. TRANS: Button label to confirm SMS confirmation code in SMS settings.
 #: actions/smssettings.php:148
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Confirm"
 msgstr "确认"
 
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
-#, fuzzy
 msgid "SMS phone number"
-msgstr "没有电话号码。"
+msgstr "SMS 电话号码"
 
 #. TRANS: SMS phone number input field instructions in SMS settings form.
 #: actions/smssettings.php:156
@@ -4175,22 +4070,20 @@ msgstr "电话号码,不带标点或空格,包含地区代码"
 
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
-#, fuzzy
 msgid "SMS preferences"
-msgstr "首选项已保存。"
+msgstr "SMS 偏好"
 
 #. TRANS: Checkbox label in SMS preferences form.
 #: actions/smssettings.php:201
 msgid ""
 "Send me notices through SMS; I understand I may incur exorbitant charges "
 "from my carrier."
-msgstr "通过SMS短信将通告发给我;我了解这样也许会给我带来不菲的开支。"
+msgstr "通过SMS短信将消息发给我;我了解这样也许会给我带来不菲的开支。"
 
 #. TRANS: Confirmation message for successful SMS preferences save.
 #: actions/smssettings.php:315
-#, fuzzy
 msgid "SMS preferences saved."
-msgstr "首选项已保存。"
+msgstr "SMS设置已保存。"
 
 #. TRANS: Message given saving SMS phone number without having provided one.
 #: actions/smssettings.php:338
@@ -4214,13 +4107,11 @@ msgstr "这个电话号码属于另一个用户。"
 
 #. TRANS: Message given saving valid SMS phone number that is to be confirmed.
 #: actions/smssettings.php:384
-#, fuzzy
 msgid ""
 "A confirmation code was sent to the phone number you added. Check your phone "
 "for the code and instructions on how to use it."
 msgstr ""
-"验证码已被发送到您新增的电子邮件。请检查收件箱(和垃圾箱),找到验证码并按要求"
-"使用它。"
+"验证码已被发送到您新增的电话号码。请检查您的电话,找到验证码并按要求使用它。"
 
 #. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
 #: actions/smssettings.php:413
@@ -4229,9 +4120,8 @@ msgstr "确认码错误。"
 
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
-msgstr "SMS短信确认"
+msgstr "SMS 验证已取消。"
 
 #. TRANS: Message given trying to remove an SMS phone number that is not
 #. TRANS: registered for the active user.
@@ -4242,13 +4132,12 @@ msgstr "这是他人的电话号码。"
 #. TRANS: Message given after successfully removing a registered SMS phone number.
 #: actions/smssettings.php:470
 msgid "The SMS phone number was removed."
-msgstr ""
+msgstr "SMS 电话号码已移除。"
 
 #. TRANS: Label for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:511
-#, fuzzy
 msgid "Mobile carrier"
-msgstr "选择运营商"
+msgstr "移动运营商"
 
 #. TRANS: Default option for mobile carrier dropdown menu in SMS settings.
 #: actions/smssettings.php:516
@@ -4275,120 +4164,114 @@ msgstr "没有输入验证码"
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
 msgid "Snapshots"
-msgstr ""
+msgstr "快照"
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "ç\94µå­\90é\82®ä»¶å\9c°å\9d\80确认"
+msgstr "管ç\90\86å¿«ç\85§é\85\8dç½®"
 
 #: actions/snapshotadminpanel.php:127
 msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "无效的快照运行值。"
 
 #: actions/snapshotadminpanel.php:133
 msgid "Snapshot frequency must be a number."
-msgstr ""
+msgstr "快照频率必须是一个数字。"
 
 #: actions/snapshotadminpanel.php:144
 msgid "Invalid snapshot report URL."
-msgstr ""
+msgstr "无效的快照报告 URL。"
 
 #: actions/snapshotadminpanel.php:200
 msgid "Randomly during web hit"
-msgstr ""
+msgstr "被访问时随机"
 
 #: actions/snapshotadminpanel.php:201
 msgid "In a scheduled job"
-msgstr ""
+msgstr "按照计划的作业"
 
 #: actions/snapshotadminpanel.php:206
 msgid "Data snapshots"
-msgstr ""
+msgstr "数据快照"
 
 #: actions/snapshotadminpanel.php:208
 msgid "When to send statistical data to status.net servers"
-msgstr ""
+msgstr "什么时候将统计数据发送到 status.net 服务器"
 
 #: actions/snapshotadminpanel.php:217
 msgid "Frequency"
-msgstr ""
+msgstr "频率"
 
 #: actions/snapshotadminpanel.php:218
 msgid "Snapshots will be sent once every N web hits"
-msgstr ""
+msgstr "每第N次访问是发送快照"
 
 #: actions/snapshotadminpanel.php:226
 msgid "Report URL"
-msgstr ""
+msgstr "报告 URL"
 
 #: actions/snapshotadminpanel.php:227
 msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgstr "快照将被发送到这个 URL"
 
 #: actions/snapshotadminpanel.php:248
-#, fuzzy
 msgid "Save snapshot settings"
-msgstr "头像设置"
+msgstr "保存访问设置"
 
 #: actions/subedit.php:70
-#, fuzzy
 msgid "You are not subscribed to that profile."
-msgstr "您已订阅这些用户:"
+msgstr "您没有关注这个用户"
 
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
-msgstr "无法添加新的订阅。"
+msgstr "无法保存关注。"
 
 #: actions/subscribe.php:77
 msgid "This action only accepts POST requests."
-msgstr ""
+msgstr "这个动作只接受 POST 请求"
 
 #: actions/subscribe.php:107
-#, fuzzy
 msgid "No such profile."
-msgstr "没æ\9c\89è¿\99份é\80\9aå\91\8a。"
+msgstr "没æ\9c\89è¿\99个æ\96\87件。"
 
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr ""
+msgstr "您不能用这个操作关注一个 OMB 0.1 远程用户。"
 
 #: actions/subscribe.php:145
-#, fuzzy
 msgid "Subscribed"
-msgstr "订阅"
+msgstr "已关注"
 
 #: actions/subscribers.php:50
-#, fuzzy, php-format
+#, php-format
 msgid "%s subscribers"
-msgstr "订阅者"
+msgstr "%s个关注者"
 
 #: actions/subscribers.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscribers, page %2$d"
-msgstr "%1$s 和好友,第%2$d页"
+msgstr "%1$s个关注者,第%2$d页"
 
 #: actions/subscribers.php:63
 msgid "These are the people who listen to your notices."
-msgstr "这些用户订阅了您的通告。"
+msgstr "这些用户关注了您的消息。"
 
 #: actions/subscribers.php:67
 #, php-format
 msgid "These are the people who listen to %s's notices."
-msgstr "这些用户订阅了 %s 的通告。"
+msgstr "这些用户关注了%s的消息。"
 
 #: actions/subscribers.php:108
 msgid ""
 "You have no subscribers. Try subscribing to people you know and they might "
 "return the favor"
-msgstr ""
+msgstr "还没有人关注您,尝试关注一些您认识的用户,他们或许会关注您"
 
 #: actions/subscribers.php:110
 #, php-format
 msgid "%s has no subscribers. Want to be the first?"
-msgstr ""
+msgstr "还没有人关注%s,成为第一个关注者?"
 
 #: actions/subscribers.php:114
 #, php-format
@@ -4396,25 +4279,27 @@ msgid ""
 "%s has no subscribers. Why not [register an account](%%%%action.register%%%"
 "%) and be the first?"
 msgstr ""
+"还没有人关注%s。现在就[注册一个帐号](%%%%action.register%%%%)并成为第一个关注"
+"者!"
 
 #: actions/subscriptions.php:52
-#, fuzzy, php-format
+#, php-format
 msgid "%s subscriptions"
-msgstr "所有订阅"
+msgstr "%s的关注"
 
 #: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s subscriptions, page %2$d"
-msgstr "%1$s 和好友,第%2$d页"
+msgstr "%1$s的关注,第%2$d页"
 
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
-msgstr "这是您订阅的用户。"
+msgstr "这是您关注的用户。"
 
 #: actions/subscriptions.php:69
 #, php-format
 msgid "These are the people whose notices %s listens to."
-msgstr "这是 %s 订阅的用户。"
+msgstr "这是%s关注的用户。"
 
 #: actions/subscriptions.php:126
 #, php-format
@@ -4425,54 +4310,56 @@ msgid ""
 "featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
 "automatically subscribe to people you already follow there."
 msgstr ""
+"您现在还看不到其他人的消息,试着去关注一些您认识的人。试一下 [用户搜索](%%"
+"action.peoplesearch%%),在我们的 [推荐用户](%%action.featured%%) 中找一些您感"
+"兴趣的小组的用户。如果您是  [Twitter用户](%%action.twittersettings%%),您可以"
+"自动关注您已经关注的用户。"
 
 #: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not listening to anyone."
-msgstr "%1$s 开始关注您的 %2$s 信息。"
+msgstr "%s没有关注任何人。"
 
 #: actions/subscriptions.php:208
-#, fuzzy
 msgid "Jabber"
-msgstr "没有 Jabber ID。"
+msgstr "Jabber"
 
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
-msgstr "SMS短信"
+msgstr "SMS"
 
 #: actions/tag.php:69
-#, fuzzy, php-format
+#, php-format
 msgid "Notices tagged with %1$s, page %2$d"
-msgstr "带 %s 标签的通告"
+msgstr "带%1$s标签的消息,第%2$d页"
 
 #: actions/tag.php:87
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "%s 好友的聚合"
+msgstr "%s标签的消息聚合 (RSS 1.0)"
 
 #: actions/tag.php:93
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "%s 好友的聚合"
+msgstr "%s标签的消息聚合 (RSS 2.0)"
 
 #: actions/tag.php:99
-#, fuzzy, php-format
+#, php-format
 msgid "Notice feed for tag %s (Atom)"
-msgstr "%s 好友的聚合"
+msgstr "%s标签的消息聚合 (Atom)"
 
 #: actions/tagother.php:39
 msgid "No ID argument."
-msgstr ""
+msgstr "没有 ID 冲突。"
 
 #: actions/tagother.php:65
-#, fuzzy, php-format
+#, php-format
 msgid "Tag %s"
-msgstr "标签"
+msgstr "将%s加为标签"
 
 #: actions/tagother.php:77 lib/userprofile.php:76
-#, fuzzy
 msgid "User profile"
-msgstr "用户没有个人信息。"
+msgstr "用户页面"
 
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
@@ -4480,9 +4367,8 @@ msgid "Photo"
 msgstr "相片"
 
 #: actions/tagother.php:141
-#, fuzzy
 msgid "Tag user"
-msgstr "标签"
+msgstr "将用户加为标签"
 
 #: actions/tagother.php:151
 msgid ""
@@ -4494,75 +4380,68 @@ msgstr ""
 #: actions/tagother.php:193
 msgid ""
 "You can only tag people you are subscribed to or who are subscribed to you."
-msgstr "你只能给你订阅的人或订阅你的人加标签。"
+msgstr "您只能给您关注或关注您的人添加标签。"
 
 #: actions/tagother.php:200
-#, fuzzy
 msgid "Could not save tags."
-msgstr "无法保存个人信息。"
+msgstr "无法保存标签。"
 
 #: actions/tagother.php:236
 msgid "Use this form to add tags to your subscribers or subscriptions."
-msgstr "使用这个表格给你的关注者或你的订阅加注标签。"
+msgstr "使用这个表单给您的关注者或您关注的用户添加标签。"
 
 #: actions/tagrss.php:35
-#, fuzzy
 msgid "No such tag."
-msgstr "æ\9cªæ\89¾å\88°æ­¤æ¶\88æ\81¯。"
+msgstr "没æ\9c\89æ­¤æ \87ç­¾。"
 
 #: actions/unblock.php:59
 msgid "You haven't blocked that user."
-msgstr ""
+msgstr "您未屏蔽该用户。"
 
 #: actions/unsandbox.php:72
-#, fuzzy
 msgid "User is not sandboxed."
-msgstr "用户没有通告。"
+msgstr "用户还没在沙盒中。"
 
 #: actions/unsilence.php:72
-#, fuzzy
 msgid "User is not silenced."
-msgstr "用户没有个人信息。"
+msgstr "用户已经静默。"
 
 #: actions/unsubscribe.php:77
-#, fuzzy
 msgid "No profile ID in request."
-msgstr "未收到认证请求!"
+msgstr "请求不含资料页 ID。"
 
 #: actions/unsubscribe.php:98
-#, fuzzy
 msgid "Unsubscribed"
-msgstr "退订"
+msgstr "已取消关注"
 
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
 msgid ""
 "Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
-msgstr ""
+msgstr "Listenee stream 许可证“‘%1$s” 与本网站的许可证 “%2$s”不兼容。"
 
 #. TRANS: User admin panel title
 #: actions/useradminpanel.php:59
-#, fuzzy
 msgctxt "TITLE"
 msgid "User"
 msgstr "用户"
 
 #: actions/useradminpanel.php:70
 msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "这个 StatusNet 网站的用户设置"
 
 #: actions/useradminpanel.php:149
 msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "无效的自述限制,必须为数字。"
 
 #: actions/useradminpanel.php:155
 msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "无效的欢迎文字。最大长度255个字符。"
 
 #: actions/useradminpanel.php:165
 #, php-format
 msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "无效的默认关注:“%1$s”不是一个用户。"
 
 #. TRANS: Link description in user account settings menu.
 #: actions/useradminpanel.php:218 lib/accountsettingsaction.php:111
@@ -4572,52 +4451,47 @@ msgstr "个人信息"
 
 #: actions/useradminpanel.php:222
 msgid "Bio Limit"
-msgstr ""
+msgstr "自述限制"
 
 #: actions/useradminpanel.php:223
 msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "个人资料自述最长的字符数。"
 
 #: actions/useradminpanel.php:231
-#, fuzzy
 msgid "New users"
-msgstr "邀请新用户"
+msgstr "新用户"
 
 #: actions/useradminpanel.php:235
 msgid "New user welcome"
-msgstr ""
+msgstr "新用户欢迎"
 
 #: actions/useradminpanel.php:236
 msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "给新用户的欢迎文字(不能超过255个字符)。"
 
 #: actions/useradminpanel.php:241
-#, fuzzy
 msgid "Default subscription"
-msgstr "所有订阅"
+msgstr "默认关注"
 
 #: actions/useradminpanel.php:242
-#, fuzzy
 msgid "Automatically subscribe new users to this user."
-msgstr "自动订阅任何订阅我的更新的人(这个选项最适合机器人)"
+msgstr "自动关注所有关注我的人 (这个选项适合机器人)"
 
 #: actions/useradminpanel.php:251
-#, fuzzy
 msgid "Invitations"
-msgstr "已发送邀请"
+msgstr "邀请"
 
 #: actions/useradminpanel.php:256
-#, fuzzy
 msgid "Invitations enabled"
-msgstr "已发送邀请"
+msgstr "邀请已启用"
 
 #: actions/useradminpanel.php:258
 msgid "Whether to allow users to invite new users."
-msgstr ""
+msgstr "是否允许用户发送注册邀请。"
 
 #: actions/userauthorization.php:105
 msgid "Authorize subscription"
-msgstr "确认订阅"
+msgstr "授权关注"
 
 #: actions/userauthorization.php:110
 msgid ""
@@ -4625,10 +4499,12 @@ msgid ""
 "user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
 "click “Reject”."
 msgstr ""
+"请检查这些详细信息,确认希望关注此用户的消息。如果您不想关注,请点击\\\"拒绝"
+"\\\"。"
 
 #: actions/userauthorization.php:196 actions/version.php:167
 msgid "License"
-msgstr ""
+msgstr "许可协议"
 
 #: actions/userauthorization.php:217
 msgid "Accept"
@@ -4636,26 +4512,24 @@ msgstr "接受"
 
 #: actions/userauthorization.php:218 lib/subscribeform.php:115
 #: lib/subscribeform.php:139
-#, fuzzy
 msgid "Subscribe to this user"
-msgstr "订阅 %s"
+msgstr "关注这个用户"
 
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr "拒绝"
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
-msgstr "确认订阅"
+msgstr "拒绝此关注"
 
 #: actions/userauthorization.php:232
 msgid "No authorization request!"
-msgstr "æ\9cªæ\94¶å\88°è®¤è¯\81请求!"
+msgstr "没æ\9c\89æ\8e\88æ\9d\83请求!"
 
 #: actions/userauthorization.php:254
 msgid "Subscription authorized"
-msgstr "订阅已确认"
+msgstr "已授权关注"
 
 #: actions/userauthorization.php:256
 msgid ""
@@ -4663,87 +4537,88 @@ msgid ""
 "with the site’s instructions for details on how to authorize the "
 "subscription. Your subscription token is:"
 msgstr ""
+"已授权关注,但是没有回传 URL。请到网站查看如何授权关注。您的 subscription "
+"token 是:"
 
 #: actions/userauthorization.php:266
 msgid "Subscription rejected"
-msgstr "订阅被拒绝"
+msgstr "关注已拒绝"
 
 #: actions/userauthorization.php:268
 msgid ""
 "The subscription has been rejected, but no callback URL was passed. Check "
 "with the site’s instructions for details on how to fully reject the "
 "subscription."
-msgstr ""
+msgstr "关注已拒绝,但是没有回传 URL。请到网站查看如何完全拒绝关注。"
 
 #: actions/userauthorization.php:303
 #, php-format
 msgid "Listener URI ‘%s’ not found here."
-msgstr ""
+msgstr "Listener URI ‘%s’ 没有找到。"
 
 #: actions/userauthorization.php:308
 #, php-format
 msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
+msgstr "Listenee URI ‘%s’ 过长。"
 
 #: actions/userauthorization.php:314
 #, php-format
 msgid "Listenee URI ‘%s’ is a local user."
-msgstr ""
+msgstr "Listenee URI ‘%s’ 是一个本地用户。"
 
 #: actions/userauthorization.php:329
 #, php-format
 msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
+msgstr "个人信息 URL “%s” 是为本地用户的。"
 
 #: actions/userauthorization.php:345
 #, php-format
 msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
+msgstr "头像地址‘%s’无效。"
 
 #: actions/userauthorization.php:350
 #, php-format
 msgid "Can’t read avatar URL ‘%s’."
-msgstr ""
+msgstr "无法读取头像 URL '%s'。"
 
 #: actions/userauthorization.php:355
 #, php-format
 msgid "Wrong image type for avatar URL ‘%s’."
-msgstr ""
+msgstr "头像 URL ‘%s’ 图像格式错误。"
 
 #: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
 msgid "Profile design"
-msgstr "个人设置"
+msgstr "查看个人页面设计"
 
 #: actions/userdesignsettings.php:87 lib/designsettings.php:76
 msgid ""
 "Customize the way your profile looks with a background image and a colour "
 "palette of your choice."
-msgstr ""
+msgstr "通过背景图片和调色板自定义您的页面外观。"
 
 #: actions/userdesignsettings.php:282
 msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "享受您的成果吧!"
 
 #. TRANS: Message is used as a page title. %1$s is a nick name, %2$d is a page number.
 #: actions/usergroups.php:66
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s groups, page %2$d"
-msgstr "组,第 %d 页"
+msgstr "%1$s个小组,第%2$d页"
 
 #: actions/usergroups.php:132
 msgid "Search for more groups"
-msgstr ""
+msgstr "搜索更多小组"
 
 #: actions/usergroups.php:159
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not a member of any group."
-msgstr "您未告知此个人信息"
+msgstr "%s还未加入任何小组。"
 
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
-msgstr ""
+msgstr "试一下[搜索小组](%%action.groupsearch%%)并加入他们。"
 
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle in atom group notice feed.
@@ -4757,9 +4632,9 @@ msgid "Updates from %1$s on %2$s!"
 msgstr "%2$s 上 %1$s 的更新!"
 
 #: actions/version.php:75
-#, fuzzy, php-format
+#, php-format
 msgid "StatusNet %s"
-msgstr "统计"
+msgstr "StatusNet %s"
 
 #: actions/version.php:155
 #, php-format
@@ -4767,10 +4642,11 @@ msgid ""
 "This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
 "Inc. and contributors."
 msgstr ""
+"此网站使用%1$s版本%2$s,2008-2010 StatusNet, Inc. 和其他贡献者版权所有。"
 
 #: actions/version.php:163
 msgid "Contributors"
-msgstr ""
+msgstr "贡献者"
 
 #: actions/version.php:170
 msgid ""
@@ -4779,6 +4655,8 @@ msgid ""
 "Software Foundation, either version 3 of the License, or (at your option) "
 "any later version. "
 msgstr ""
+"StatusNet 是一个免费软件,您可以在遵守自由软件基金会发布的 GNU Affero GPL 或"
+"第三版或以后的版本的情况下重新部署或者修改它,"
 
 #: actions/version.php:176
 msgid ""
@@ -4787,38 +4665,39 @@ msgid ""
 "FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License "
 "for more details. "
 msgstr ""
+"这个程序的发布是希望它可以有用,但没有任何的担保;也没有售后性或者符合其他特"
+"别目的的担保。查看 GNU Affero GPL 了解更多信息。"
 
 #: actions/version.php:182
 #, php-format
 msgid ""
 "You should have received a copy of the GNU Affero General Public License "
 "along with this program.  If not, see %s."
-msgstr ""
+msgstr "您应该在本程序中收到了一份 GNU Affero GPL 的副本,如果没有收到请看%s。"
 
 #: actions/version.php:191
 msgid "Plugins"
-msgstr ""
+msgstr "插件"
 
 #. TRANS: Secondary navigation menu option leading to version information on the StatusNet site.
 #: actions/version.php:198 lib/action.php:789
-#, fuzzy
 msgid "Version"
-msgstr "个人"
+msgstr "版本"
 
 #: actions/version.php:199
 msgid "Author(s)"
-msgstr ""
+msgstr "作者"
 
 #. TRANS: Server exception thrown when a URL cannot be processed.
 #: classes/File.php:143
 #, php-format
 msgid "Cannot process URL '%s'"
-msgstr ""
+msgstr "不能处理 URL “%s”"
 
 #. TRANS: Server exception thrown when... Robin thinks something is impossible!
 #: classes/File.php:175
 msgid "Robin thinks something is impossible."
-msgstr ""
+msgstr "麦子认为卖烧麦是份很令人愉快的工作。"
 
 #. TRANS: Message given if an upload is larger than the configured maximum.
 #. TRANS: %1$d is the byte limit for uploads, %2$d is the byte count for the uploaded file.
@@ -4828,68 +4707,63 @@ msgid ""
 "No file may be larger than %1$d bytes and the file you sent was %2$d bytes. "
 "Try to upload a smaller version."
 msgstr ""
+"不能有文件大于%1$d字节,您上传的文件是%2$d字节。换一个小点的版本试一下。"
 
 #. TRANS: Message given if an upload would exceed user quota.
 #. TRANS: %d (number) is the user quota in bytes.
 #: classes/File.php:202
 #, php-format
 msgid "A file this large would exceed your user quota of %d bytes."
-msgstr ""
+msgstr "这么大的文件会超过您%d字节的用户配额。"
 
 #. TRANS: Message given id an upload would exceed a user's monthly quota.
 #. TRANS: $d (number) is the monthly user quota in bytes.
 #: classes/File.php:211
 #, php-format
 msgid "A file this large would exceed your monthly quota of %d bytes."
-msgstr ""
+msgstr "这么大的文件会超过您%d字节的每月配额。"
 
 #. TRANS: Client exception thrown if a file upload does not have a valid name.
 #: classes/File.php:248 classes/File.php:263
-#, fuzzy
 msgid "Invalid filename."
-msgstr "大小不正确。"
+msgstr "无效的文件名。"
 
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
-#, fuzzy
 msgid "Group join failed."
-msgstr "å°\8fç»\84æ\9cªæ\89¾å\88°。"
+msgstr "å\8a å\85¥å°\8fç»\84失败。"
 
 #. TRANS: Exception thrown when trying to leave a group the user is not a member of.
 #: classes/Group_member.php:55
-#, fuzzy
 msgid "Not part of group."
-msgstr "无法更新组"
+msgstr "不是小组成员。"
 
 #. TRANS: Exception thrown when trying to leave a group fails.
 #: classes/Group_member.php:63
-#, fuzzy
 msgid "Group leave failed."
-msgstr "上传失败"
+msgstr "离开小组失败。"
 
 #. TRANS: Server exception thrown when updating a local group fails.
 #: classes/Local_group.php:42
-#, fuzzy
 msgid "Could not update local group."
-msgstr "无法更新"
+msgstr "无法更新本地小组。"
 
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
-#, fuzzy, php-format
+#, php-format
 msgid "Could not create login token for %s"
-msgstr "无法创建收藏。"
+msgstr "无法创建别名。"
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
 msgid "No database name or DSN found anywhere."
-msgstr ""
+msgstr "没有找到数据库名称或者 DSN。"
 
 #. TRANS: Client exception thrown when a user tries to send a direct message while being banned from sending them.
 #: classes/Message.php:46
-#, fuzzy
 msgid "You are banned from sending direct messages."
-msgstr "发送消息出错。"
+msgstr "您被禁止发送私信。"
 
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
@@ -4899,173 +4773,157 @@ msgstr "无法添加信息。"
 #. TRANS: Message given when a message could not be updated on the server.
 #: classes/Message.php:74
 msgid "Could not update message with new URI."
-msgstr "无法添加新URI的信息。"
+msgstr "无法通过新的 URI 更新消息。"
 
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
 #: classes/Notice.php:98
 #, php-format
 msgid "No such profile (%1$d) for notice (%2$d)."
-msgstr ""
+msgstr "没有对于 消息 (%2$d) 的 个人信息页 (%1$d) 。"
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
-msgstr "æ·»å\8a å¤´å\83\8få\87ºé\94\99"
+msgstr "æ\8f\92å\85¥æ \87ç­¾æ\97¶æ\95°æ\8d®åº\93å\87ºé\94\99ï¼\9a%s"
 
 #. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
+#: classes/Notice.php:265
 msgid "Problem saving notice. Too long."
-msgstr "保存通告时出错。"
+msgstr "保存消息时出错。太长。"
 
 #. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-#, fuzzy
+#: classes/Notice.php:270
 msgid "Problem saving notice. Unknown user."
-msgstr "保存通告时出错。"
+msgstr "保存消息时出错。未知用户。"
 
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
-msgstr "在短时间里发布了过多的消息,请深呼吸,过几分钟再发消息。"
+msgstr "在短时间里发布了过多的消息,请深呼吸,过几分钟再发消息。"
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
-#, fuzzy
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
-msgstr "你在短时间里发布了过多的消息,请深呼吸,过几分钟再发消息。"
+msgstr "您在短时间里发布了过多的重复消息,请深呼吸,过几分钟再发消息。"
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
-msgstr "在这个网站被禁止发布消息。"
+msgstr "在这个网站被禁止发布消息。"
 
 #. TRANS: Server exception thrown when a notice cannot be saved.
 #. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
+#: classes/Notice.php:358 classes/Notice.php:385
 msgid "Problem saving notice."
-msgstr "保存通告时出错。"
+msgstr "保存消息时出错。"
 
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
-msgstr ""
+msgstr "对 saveKnownGroups 提供的类型无效"
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
-#, fuzzy
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
-msgstr "保存通告时出错。"
+msgstr "保存小组收件箱时出错。"
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
-#, fuzzy, php-format
+#: classes/Notice.php:1751
+#, php-format
 msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
 
 #. TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
 #: classes/Profile.php:737
 #, php-format
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; does not exist."
-msgstr ""
+msgstr "无法取消用户#%2$d的\\\"%1$s\\\"权限,不存在。"
 
 #. TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
 #. TRANS: %1$s is the role name, %2$s is the user ID (number).
 #: classes/Profile.php:746
 #, php-format
 msgid "Cannot revoke role \"%1$s\" for user #%2$d; database error."
-msgstr ""
+msgstr "无法取消用户#%2$d的\\\"%1$s\\\"权限,数据库错误。"
 
 #. TRANS: Exception thrown when a right for a non-existing user profile is checked.
 #: classes/Remote_profile.php:54
-#, fuzzy
 msgid "Missing profile."
-msgstr "用户没有个人信息。"
+msgstr "丢失的个人信息。"
 
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
-#, fuzzy
 msgid "Unable to save tag."
-msgstr "无法保存 Twitter 设置!"
+msgstr "无法保存标签。"
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
-#, fuzzy
 msgid "You have been banned from subscribing."
-msgstr "那个用户阻止了你的订阅。"
+msgstr "您被禁止添加关注。"
 
 #. TRANS: Exception thrown when trying to subscribe while already subscribed.
 #: classes/Subscription.php:80
-#, fuzzy
 msgid "Already subscribed!"
-msgstr "未订阅!"
+msgstr "已经关注了!"
 
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
-#, fuzzy
 msgid "User has blocked you."
-msgstr "用户没有个人信息。"
+msgstr "用户将你屏蔽了。"
 
 #. TRANS: Exception thrown when trying to unsibscribe without a subscription.
 #: classes/Subscription.php:171
-#, fuzzy
 msgid "Not subscribed!"
-msgstr "未订阅!"
+msgstr "未关注!"
 
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
-msgstr "无法添加新的订阅。"
+msgstr "无法删除自我关注。"
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
-msgstr "无法添加新的订阅。"
+msgstr "无法删除关注 OMB token。"
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
-msgstr "无法添加新的订阅。"
+msgstr "无法取消关注。"
 
 #. TRANS: Notice given on user registration.
 #. TRANS: %1$s is the sitename, $2$s is the registering user's nickname.
 #: classes/User.php:365
-#, fuzzy, php-format
+#, php-format
 msgid "Welcome to %1$s, @%2$s!"
-msgstr "发送给 %1$s 的 %2$s 消息"
+msgstr "欢迎来到 %1$s,@%2$s!"
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
 msgid "Could not create group."
-msgstr "无法创建组。"
+msgstr "无法创建组。"
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
-msgstr "无法创建组。"
+msgstr "无法设置小组 URI。"
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
-msgstr "无法创建组。"
+msgstr "无法设置小组成员。"
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
-msgstr "无法保存个人信息。"
+msgstr "无法保存本地小组信息。"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:109
@@ -5075,7 +4933,7 @@ msgstr "修改您的个人信息"
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:116
 msgid "Upload an avatar"
-msgstr "上一个头像。"
+msgstr "上一个头像。"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:123
@@ -5089,9 +4947,8 @@ msgstr "修改电子邮件"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:137
-#, fuzzy
 msgid "Design your profile"
-msgstr "用户没有个人信息。"
+msgstr "页面设计"
 
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:144
@@ -5105,9 +4962,9 @@ msgstr "其他"
 
 #. TRANS: Page title. %1$s is the title, %2$s is the site name.
 #: lib/action.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
 
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
@@ -5123,110 +4980,98 @@ msgstr "主站导航"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
 msgid "Personal profile and friends timeline"
-msgstr ""
+msgstr "个人资料及朋友的时间线"
 
 #. TRANS: Main menu option when logged in for access to personal profile and friends timeline
 #: lib/action.php:445
-#, fuzzy
 msgctxt "MENU"
 msgid "Personal"
 msgstr "个人"
 
 #. TRANS: Tooltip for main menu option "Account"
 #: lib/action.php:447
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change your email, avatar, password, profile"
-msgstr "修改密码"
+msgstr "修改您的 email 地址、头像、密码、资料"
 
 #. TRANS: Tooltip for main menu option "Services"
 #: lib/action.php:452
 msgctxt "TOOLTIP"
 msgid "Connect to services"
-msgstr ""
+msgstr "关联的服务"
 
 #. TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
 #: lib/action.php:455
 msgid "Connect"
-msgstr "连接"
+msgstr "关联"
 
 #. TRANS: Tooltip for menu option "Admin"
 #: lib/action.php:458
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Change site configuration"
-msgstr "主站导航"
+msgstr "更改网站配置"
 
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
-#, fuzzy
 msgctxt "MENU"
 msgid "Admin"
-msgstr "admin管理员"
+msgstr "管理"
 
 #. TRANS: Tooltip for main menu option "Invite"
 #: lib/action.php:465
-#, fuzzy, php-format
+#, php-format
 msgctxt "TOOLTIP"
 msgid "Invite friends and colleagues to join you on %s"
-msgstr "使用这个表单来邀请好友和同事加入。"
+msgstr "邀请好友和同事加入%s。"
 
 #. TRANS: Main menu option when logged in and invitations are allowed for inviting new users
 #: lib/action.php:468
-#, fuzzy
 msgctxt "MENU"
 msgid "Invite"
 msgstr "邀请"
 
 #. TRANS: Tooltip for main menu option "Logout"
 #: lib/action.php:474
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Logout from the site"
-msgstr "登录"
+msgstr "从网站登出"
 
 #. TRANS: Main menu option when logged in to log out the current user
 #: lib/action.php:477
-#, fuzzy
 msgctxt "MENU"
 msgid "Logout"
-msgstr "logo已更新。"
+msgstr "登出"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
 msgctxt "TOOLTIP"
 msgid "Create an account"
-msgstr ""
+msgstr "创建一个账户"
 
 #. TRANS: Main menu option when not logged in to register a new account
 #: lib/action.php:485
-#, fuzzy
 msgctxt "MENU"
 msgid "Register"
 msgstr "注册"
 
 #. TRANS: Tooltip for main menu option "Login"
 #: lib/action.php:488
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Login to the site"
-msgstr "登录"
+msgstr "登录这个网站"
 
 #: lib/action.php:491
-#, fuzzy
 msgctxt "MENU"
 msgid "Login"
 msgstr "登录"
 
 #. TRANS: Tooltip for main menu option "Help"
 #: lib/action.php:494
-#, fuzzy
 msgctxt "TOOLTIP"
 msgid "Help me!"
-msgstr "帮助"
+msgstr "帮助我!"
 
 #: lib/action.php:497
-#, fuzzy
 msgctxt "MENU"
 msgid "Help"
 msgstr "帮助"
@@ -5235,10 +5080,9 @@ msgstr "帮助"
 #: lib/action.php:500
 msgctxt "TOOLTIP"
 msgid "Search for people or text"
-msgstr ""
+msgstr "搜索人或文字"
 
 #: lib/action.php:503
-#, fuzzy
 msgctxt "MENU"
 msgid "Search"
 msgstr "搜索"
@@ -5246,9 +5090,8 @@ msgstr "搜索"
 #. TRANS: DT element for site notice. String is hidden in default CSS.
 #. TRANS: Menu item for site administration
 #: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
 msgid "Site notice"
-msgstr "新通告"
+msgstr "网站消息"
 
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
@@ -5257,15 +5100,13 @@ msgstr "本地显示"
 
 #. TRANS: DT element for page notice. String is hidden in default CSS.
 #: lib/action.php:659
-#, fuzzy
 msgid "Page notice"
-msgstr "新通告"
+msgstr "页面消息"
 
 #. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
 #: lib/action.php:762
-#, fuzzy
 msgid "Secondary site navigation"
-msgstr "站导航"
+msgstr "站导航"
 
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
@@ -5280,12 +5121,12 @@ msgstr "关于"
 #. TRANS: Secondary navigation menu option leading to Frequently Asked Questions.
 #: lib/action.php:774
 msgid "FAQ"
-msgstr "常见问题FAQ"
+msgstr "FAQ"
 
 #. TRANS: Secondary navigation menu option leading to Terms of Service.
 #: lib/action.php:779
 msgid "TOS"
-msgstr ""
+msgstr "条款"
 
 #. TRANS: Secondary navigation menu option leading to privacy policy.
 #: lib/action.php:783
@@ -5295,22 +5136,21 @@ msgstr "隐私"
 #. TRANS: Secondary navigation menu option.
 #: lib/action.php:786
 msgid "Source"
-msgstr "æ\9d¥æº\90"
+msgstr "æº\90ç \81"
 
 #. TRANS: Secondary navigation menu option leading to contact information on the StatusNet site.
 #: lib/action.php:792
 msgid "Contact"
-msgstr "联系"
+msgstr "联系"
 
 #: lib/action.php:794
-#, fuzzy
 msgid "Badge"
-msgstr "呼叫"
+msgstr "挂件"
 
 #. TRANS: DT element for StatusNet software license.
 #: lib/action.php:823
 msgid "StatusNet software license"
-msgstr "StatusNet软件注册证"
+msgstr "StatusNet 软件许可证"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is set.
 #: lib/action.php:827
@@ -5319,6 +5159,8 @@ msgid ""
 "**%%site.name%%** is a microblogging service brought to you by [%%site."
 "broughtby%%](%%site.broughtbyurl%%)."
 msgstr ""
+"**%%site.name%%**是一个微博客服务,提供者为[%%site.broughtby%%](%%site."
+"broughtbyurl%%)。"
 
 #. TRANS: First sentence of the StatusNet site license. Used if 'broughtby' is not set.
 #: lib/action.php:830
@@ -5334,40 +5176,38 @@ msgid ""
 "s, available under the [GNU Affero General Public License](http://www.fsf."
 "org/licensing/licenses/agpl-3.0.html)."
 msgstr ""
-"它运行[StatusNet](http://status.net/)微博客服务,版本 %s,采用[GNU Affero "
-"General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)"
-"授权。"
+"它运行[StatusNet](http://status.net/)微博客服务,版本 %s,[GNU Affero GPL]"
+"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)授权。"
 
 #. TRANS: DT element for StatusNet site content license.
 #: lib/action.php:850
-#, fuzzy
 msgid "Site content license"
-msgstr "StatusNet软件注册证"
+msgstr "网站内容许可协议"
 
 #. TRANS: Content license displayed when license is set to 'private'.
 #. TRANS: %1$s is the site name.
 #: lib/action.php:857
 #, php-format
 msgid "Content and data of %1$s are private and confidential."
-msgstr ""
+msgstr "%1$s的内容和数据是私人且保密的。"
 
 #. TRANS: Content license displayed when license is set to 'allrightsreserved'.
 #. TRANS: %1$s is the copyright owner.
 #: lib/action.php:864
 #, php-format
 msgid "Content and data copyright by %1$s. All rights reserved."
-msgstr ""
+msgstr "内容和数据%1$s版权所有并保留所有权利。"
 
 #. TRANS: Content license displayed when license is set to 'allrightsreserved' and no owner is set.
 #: lib/action.php:868
 msgid "Content and data copyright by contributors. All rights reserved."
-msgstr ""
+msgstr "内容和数据贡献者版权所有并保留所有权利。"
 
 #. TRANS: license message in footer. %1$s is the site name, %2$s is a link to the license URL, with a licence name set in configuration.
 #: lib/action.php:881
 #, php-format
 msgid "All %1$s content and data are available under the %2$s license."
-msgstr ""
+msgstr "所有%1$s的内容和数据在%2$s许可下有效。"
 
 #. TRANS: DT element for pagination (previous/next, etc.).
 #: lib/action.php:1192
@@ -5377,94 +5217,84 @@ msgstr "分页"
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: present than the currently displayed information.
 #: lib/action.php:1203
-#, fuzzy
 msgid "After"
-msgstr "其他"
+msgstr "之后"
 
 #. TRANS: Pagination message to go to a page displaying information more in the
 #. TRANS: past than the currently displayed information.
 #: lib/action.php:1213
 msgid "Before"
-msgstr ""
+msgstr "之前"
 
 #. TRANS: Client exception thrown when a feed instance is a DOMDocument.
 #: lib/activity.php:122
 msgid "Expecting a root feed element but got a whole XML document."
-msgstr ""
+msgstr "只期待一个 root feed 元素但收到了整个的 XML 文档。"
 
 #: lib/activityutils.php:208
 msgid "Can't handle remote content yet."
-msgstr ""
+msgstr "还不能处理远程内容。"
 
 #: lib/activityutils.php:244
 msgid "Can't handle embedded XML content yet."
-msgstr ""
+msgstr "还不能处理嵌入式 XML 内容。"
 
 #: lib/activityutils.php:248
 msgid "Can't handle embedded Base64 content yet."
-msgstr ""
+msgstr "还不能处理嵌入式 Base64 内容。"
 
 #. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
 #: lib/adminpanelaction.php:98
-#, fuzzy
 msgid "You cannot make changes to this site."
-msgstr "æ\97 æ³\95å\90\91æ­¤ç\94¨æ\88·å\8f\91é\80\81æ¶\88æ\81¯。"
+msgstr "æ\82¨ä¸\8dè\83½å\9c¨è¿\99个ç«\99ç\82¹æ\8e\88äº\88ç\94¨æ\88·è§\92è\89²。"
 
 #. TRANS: Client error message throw when a certain panel's settings cannot be changed.
 #: lib/adminpanelaction.php:110
-#, fuzzy
 msgid "Changes to that panel are not allowed."
-msgstr "不允许注册。"
+msgstr "不允许对该面板进行修改。"
 
 #. TRANS: Client error message.
 #: lib/adminpanelaction.php:229
-#, fuzzy
 msgid "showForm() not implemented."
-msgstr "命令尚未实现。"
+msgstr "showForm() 尚未实现。"
 
 #. TRANS: Client error message
 #: lib/adminpanelaction.php:259
-#, fuzzy
 msgid "saveSettings() not implemented."
-msgstr "命令尚未实现。"
+msgstr "saveSettings() 尚未实现。"
 
 #. TRANS: Client error message thrown if design settings could not be deleted in
 #. TRANS: the admin panel Design.
 #: lib/adminpanelaction.php:284
-#, fuzzy
 msgid "Unable to delete design setting."
-msgstr "无法保存 Twitter 设置!"
+msgstr "无法删除设计设置。"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
-#, fuzzy
 msgid "Basic site configuration"
-msgstr "电子邮件地址确认"
+msgstr "基本网站配置"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:352
-#, fuzzy
 msgctxt "MENU"
 msgid "Site"
-msgstr "邀请"
+msgstr "网站"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:358
-#, fuzzy
 msgid "Design configuration"
-msgstr "SMS短信确认"
+msgstr "设计配置"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
 msgctxt "MENU"
 msgid "Design"
-msgstr ""
+msgstr "设计"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
-#, fuzzy
 msgid "User configuration"
-msgstr "SMS短信确认"
+msgstr "用户配置"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:368 lib/personalgroupnav.php:115
@@ -5473,115 +5303,109 @@ msgstr "用户"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:374
-#, fuzzy
 msgid "Access configuration"
-msgstr "SMS短信确认"
+msgstr "访问配置"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
-#, fuzzy
 msgid "Paths configuration"
-msgstr "SMS短信确认"
+msgstr "路径配置"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:390
-#, fuzzy
 msgid "Sessions configuration"
-msgstr "SMS短信确认"
+msgstr "会话配置"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:398
-#, fuzzy
 msgid "Edit site notice"
-msgstr "删除通告"
+msgstr "编辑网站消息"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:406
-#, fuzzy
 msgid "Snapshots configuration"
-msgstr "SMS短信确认"
+msgstr "更改站点配置"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
-msgstr ""
+msgstr "API 资源需要读写的访问权限,但是你只有只读的权限。"
 
 #. TRANS: Form legend.
 #: lib/applicationeditform.php:137
 msgid "Edit application"
-msgstr ""
+msgstr "编辑应用"
 
 #. TRANS: Form guide.
 #: lib/applicationeditform.php:187
 msgid "Icon for this application"
-msgstr ""
+msgstr "该应用的图标"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
 #, php-format
 msgid "Describe your application in %d characters"
-msgstr ""
+msgstr "用不超过%d个字符描述您的应用"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:213
 msgid "Describe your application"
-msgstr ""
+msgstr "描述您的应用"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:224
 msgid "URL of the homepage of this application"
-msgstr ""
+msgstr "这个应用的主页 URL"
 
 #. TRANS: Form input field label.
 #: lib/applicationeditform.php:226
-#, fuzzy
 msgid "Source URL"
-msgstr "来源"
+msgstr "来源网址"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:233
 msgid "Organization responsible for this application"
-msgstr ""
+msgstr "该应用的负责组织"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
 msgid "URL for the homepage of the organization"
-msgstr ""
+msgstr "这个组织的主页 URL"
 
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:251
 msgid "URL to redirect to after authentication"
-msgstr ""
+msgstr "通过授权后转向的 URL"
 
 #. TRANS: Radio button label for application type
 #: lib/applicationeditform.php:278
 msgid "Browser"
-msgstr ""
+msgstr "浏览器"
 
 #. TRANS: Radio button label for application type
 #: lib/applicationeditform.php:295
 msgid "Desktop"
-msgstr ""
+msgstr "桌面"
 
 #. TRANS: Form guide.
 #: lib/applicationeditform.php:297
 msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "应用的类型,浏览器或桌面"
 
 #. TRANS: Radio button label for access type.
 #: lib/applicationeditform.php:320
 msgid "Read-only"
-msgstr ""
+msgstr "只读"
 
 #. TRANS: Radio button label for access type.
 #: lib/applicationeditform.php:339
 msgid "Read-write"
-msgstr ""
+msgstr "读写"
 
 #. TRANS: Form guide.
 #: lib/applicationeditform.php:341
 msgid "Default access for this application: read-only, or read-write"
-msgstr ""
+msgstr "该应用默认的访问权限:只读或读写"
 
 #. TRANS: Submit button title
 #: lib/applicationeditform.php:359
@@ -5591,58 +5415,55 @@ msgstr "取消"
 #. TRANS: Application access type
 #: lib/applicationlist.php:136
 msgid "read-write"
-msgstr ""
+msgstr "读写"
 
 #. TRANS: Application access type
 #: lib/applicationlist.php:138
 msgid "read-only"
-msgstr ""
+msgstr "只读"
 
 #. TRANS: Used in application list. %1$s is a modified date, %2$s is access type (read-write or read-only)
 #: lib/applicationlist.php:144
 #, php-format
 msgid "Approved %1$s - \"%2$s\" access."
-msgstr ""
+msgstr "通过了%1$s - \"%2$s\"的访问权限。"
 
 #. TRANS: Button label
 #: lib/applicationlist.php:159
-#, fuzzy
 msgctxt "BUTTON"
 msgid "Revoke"
-msgstr "恢复"
+msgstr "取消"
 
 #. TRANS: DT element label in attachment list.
 #: lib/attachmentlist.php:88
 msgid "Attachments"
-msgstr ""
+msgstr "附件"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
-msgstr ""
+msgstr "作者"
 
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:279
-#, fuzzy
 msgid "Provider"
-msgstr "预览"
+msgstr "提供者"
 
 #: lib/attachmentnoticesection.php:67
 msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "出现这个附件的消息"
 
 #: lib/attachmenttagcloudsection.php:48
 msgid "Tags for this attachment"
-msgstr ""
+msgstr "此附件的标签"
 
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
-#, fuzzy
 msgid "Password changing failed"
-msgstr "密码已保存。"
+msgstr "不允许更改密码"
 
 #: lib/authenticationplugin.php:236
 msgid "Password changing is not allowed"
-msgstr ""
+msgstr "不允许更改密码"
 
 #: lib/channel.php:157 lib/channel.php:177
 msgid "Command results"
@@ -5656,248 +5477,165 @@ msgstr "执行完毕"
 msgid "Command failed"
 msgstr "执行失败"
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
-msgstr "用户没有通告。"
-
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, fuzzy, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "无法更新已确认的电子邮件。"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "无法更新已确认的电子邮件。"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr "对不起,这个命令还没有实现。"
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
-msgstr ""
-
-#. TRANS: Message given having nudged another user.
-#. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
-#, fuzzy, php-format
-msgid "Nudge sent to %s"
-msgstr "振铃呼叫发出。"
+msgstr "呼叫自己不太符合逻辑吧。"
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
 "Subscribers: %2$s\n"
 "Notices: %3$s"
 msgstr ""
+"关注数: %1$s\\n\n"
+"关注者: %2$s\\n\n"
+"消息数: %3$s"
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
-msgstr "通告被标记为收藏。"
-
-#: lib/command.php:323
-msgid "You are already a member of that group"
-msgstr "您已经是该组成员"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr ""
-
-#. TRANS: Message given having failed to remove a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
-#, php-format
-msgid "Could not remove user %1$s from group %2$s"
-msgstr ""
+msgstr "消息被标记为收藏。"
 
 #. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
+#: lib/command.php:434
 #, php-format
 msgid "Fullname: %s"
 msgstr "全名:%s"
 
 #. TRANS: Whois output. %s is the location of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
+#: lib/command.php:438 lib/mail.php:268
 #, php-format
 msgid "Location: %s"
 msgstr "位置:%s"
 
 #. TRANS: Whois output. %s is the homepage of the queried user.
 #. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
+#: lib/command.php:442 lib/mail.php:271
 #, php-format
 msgid "Homepage: %s"
 msgstr "主页:%s"
 
 #. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
+#: lib/command.php:446
 #, php-format
 msgid "About: %s"
 msgstr "关于:%s"
 
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
 "same server."
-msgstr ""
+msgstr "%s是一个远程的用户;您只能给同一个服务器上的用户发送私信。"
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
-#, php-format
-msgid "Direct message to %s sent"
-msgstr "已向 %s 发送消息"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr "消息包含%2$d个字符,超出长度限制 - 不能超过%1$d个字符。"
 
-#: lib/command.php:494
+#. TRANS: Error text shown sending a direct message fails with an unknown reason.
+#: lib/command.php:517
 msgid "Error sending direct message."
 msgstr "发送消息出错。"
 
-#: lib/command.php:514
-#, fuzzy
-msgid "Cannot repeat your own notice"
-msgstr "无法开启通告。"
-
-#: lib/command.php:519
-#, fuzzy
-msgid "Already repeated that notice"
-msgstr "无法删除通告。"
-
-#. TRANS: Message given having repeated a notice from another user.
-#. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
-#, fuzzy, php-format
-msgid "Notice from %s repeated"
-msgstr "消息已发布。"
-
-#: lib/command.php:531
-#, fuzzy
+#. TRANS: Error text shown when repeating a notice fails with an unknown reason.
+#: lib/command.php:557
 msgid "Error repeating notice."
-msgstr "保存用户设置时出错。"
-
-#: lib/command.php:562
-#, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
-
-#: lib/command.php:571
-#, fuzzy, php-format
-msgid "Reply to %s sent"
-msgstr "%s 的回复"
+msgstr "转发消息时出错。"
 
-#: lib/command.php:573
-#, fuzzy
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
-msgstr "保存通告时出错。"
-
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
-msgstr "指定要订阅的用户名"
-
-#: lib/command.php:628
-msgid "Can't subscribe to OMB profiles by command."
-msgstr ""
-
-#: lib/command.php:634
-#, php-format
-msgid "Subscribed to %s"
-msgstr "订阅 %s"
-
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
-msgstr "指定要取消订阅的用户名"
+msgstr "保存消息时出错。"
 
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
 #: lib/command.php:664
-#, php-format
-msgid "Unsubscribed from %s"
-msgstr "取消订阅 %s"
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "无法通过命令行关注 OMB 用户。"
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr "命令尚未实现。"
 
-#: lib/command.php:685
+#. TRANS: Text shown when issuing the command "off" successfully.
+#: lib/command.php:728
 msgid "Notification off."
-msgstr "通关闭。"
+msgstr "通知已关闭。"
 
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
-msgstr "无法关闭通。"
+msgstr "无法关闭通。"
 
-#: lib/command.php:708
+#. TRANS: Text shown when issuing the command "on" successfully.
+#: lib/command.php:754
 msgid "Notification on."
-msgstr "通开启。"
+msgstr "通知已开启。"
 
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
-msgstr "无法开启通告。"
-
-#: lib/command.php:723
-msgid "Login command is disabled"
-msgstr ""
+msgstr "无法开启通知。"
 
-#: lib/command.php:734
-#, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
-
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "取消订阅 %s"
-
-#: lib/command.php:778
-#, fuzzy
+#. TRANS: Text shown after requesting other users a user is subscribed to without having any subscriptions.
+#: lib/command.php:831
 msgid "You are not subscribed to anyone."
-msgstr "您已订阅这些用户:"
+msgstr "您没有关注任何人。"
 
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
-msgstr[0] "您已订阅这些用户:"
+msgstr[0] "您已关注了这个用户:"
 
-#: lib/command.php:800
-#, fuzzy
+#. TRANS: Text shown after requesting other users that are subscribed to a user
+#. TRANS: (followers) without having any subscribers.
+#: lib/command.php:858
 msgid "No one is subscribed to you."
-msgstr "æ\97 æ³\95订é\98\85ä»\96人æ\9b´æ\96°。"
+msgstr "没æ\9c\89人å\85³æ³¨æ\82¨。"
 
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
-msgstr[0] "无法订阅他人更新。"
+msgstr[0] "这个用户正在关注您:"
 
-#: lib/command.php:822
-#, fuzzy
+#. TRANS: Text shown after requesting groups a user is subscribed to without having
+#. TRANS: any group subscriptions.
+#: lib/command.php:885
 msgid "You are not a member of any groups."
-msgstr "您未告知此个人信息"
+msgstr "您不是该小组成员。"
 
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
-msgstr[0] "æ\82¨æ\9cªå\91\8aç\9f¥æ­¤ä¸ªäººä¿¡æ\81¯"
+msgstr[0] "æ\82¨æ\98¯è¯¥å°\8fç»\84æ\88\90å\91\98ï¼\9a"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5938,23 +5676,60 @@ msgid ""
 "tracks - not yet implemented.\n"
 "tracking - not yet implemented.\n"
 msgstr ""
+"命令:\n"
+"on - 打开提醒\n"
+"off - 关闭提醒\n"
+"help - 显示此帮助\n"
+"follow <昵称> - 关注该用户\n"
+"groups - 列出您加入的小组\n"
+"subscriptions - 列出您关注的用户\n"
+"subscribers - 列出您的关注者\n"
+"leave <昵称> - 取消关注该用户\n"
+"d <昵称> <文字> - 给该用户发送私信\n"
+"get <昵称> - 获取该用户的最后一条消息\n"
+"whois <昵称> - 获取该用户的个人信息\n"
+"lose <昵称> - 强行取消该用户对您的关注\n"
+"fav <昵称> - 将该用户最后一条消息加为'收藏'\n"
+"fav #<消息id> - 将该id的消息加为'收藏'\n"
+"repeat #<消息id> - 转发该id的消息\n"
+"repeat <昵称> - 转发该用户的最后一条消息\n"
+"reply #<notice_id> - 对该id消息回复\n"
+"reply <昵称> - 对该用户的最后一条小心回复\n"
+"join <小组> - 加入小组\n"
+"login - 获取网页登录的地址\n"
+"drop <小组> - 离开小组\n"
+"stats - 获取您的统计\n"
+"stop - 和'off'相同\n"
+"quit - 和'off'相同\n"
+"sub <昵称> - 和'follow'相同\n"
+"unsub <昵称> - 和'leave'相同\n"
+"last <昵称> - 和'get'相同\n"
+"on <昵称> - 尚未实现。\n"
+"off <昵称> - 尚未实现。\n"
+"nudge <昵称> - 提醒该用户更新消息。\n"
+"invite <电话号码> - 尚未实现。\n"
+"track <word> - 尚未实现。\n"
+"untrack <word> - 尚未实现。\n"
+"track off - 尚未实现。\n"
+"untrack all - 尚未实现。\n"
+"tracks - 尚未实现。\n"
+"tracking - 尚未实现。\n"
 
 #: lib/common.php:135
-#, fuzzy
 msgid "No configuration file found. "
-msgstr "没有验证码"
+msgstr "没有找到配置文件。 "
 
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
-msgstr ""
+msgstr "我在以下位置查找了配置文件:"
 
 #: lib/common.php:138
 msgid "You may wish to run the installer to fix this."
-msgstr ""
+msgstr "或许您想运行安装程序来解决这个问题。"
 
 #: lib/common.php:139
 msgid "Go to the installer."
-msgstr ""
+msgstr "去安装程序。"
 
 #: lib/connectsettingsaction.php:110
 msgid "IM"
@@ -5966,45 +5741,40 @@ msgstr "使用即时通讯工具(IM)更新"
 
 #: lib/connectsettingsaction.php:116
 msgid "Updates by SMS"
-msgstr "使用SMS短信更新"
+msgstr "使用 SMS 更新"
 
 #: lib/connectsettingsaction.php:120
-#, fuzzy
 msgid "Connections"
-msgstr "连接"
+msgstr "关联"
 
 #: lib/connectsettingsaction.php:121
 msgid "Authorized connected applications"
-msgstr ""
+msgstr "被授权已连接的应用"
 
 #: lib/dberroraction.php:60
 msgid "Database error"
-msgstr ""
+msgstr "数据库错误"
 
 #: lib/designsettings.php:105
-#, fuzzy
 msgid "Upload file"
-msgstr "上传失败"
+msgstr "上传文件"
 
 #: lib/designsettings.php:109
-#, fuzzy
 msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "您可以上传您的个人页面背景。文件最大 2MB。"
 
 #: lib/designsettings.php:418
 msgid "Design defaults restored."
-msgstr ""
+msgstr "默认设计已恢复。"
 
 #: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
 msgid "Disfavor this notice"
-msgstr "%s 收藏的通告"
+msgstr "取消收藏这个消息"
 
 #: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
 msgid "Favor this notice"
-msgstr "%s 收藏的通告"
+msgstr "收藏这个消息"
 
 #: lib/favorform.php:140
 msgid "Favor"
@@ -6012,39 +5782,37 @@ msgstr "收藏"
 
 #: lib/feed.php:85
 msgid "RSS 1.0"
-msgstr ""
+msgstr "RSS 1.0"
 
 #: lib/feed.php:87
 msgid "RSS 2.0"
-msgstr ""
+msgstr "RSS 2.0"
 
 #: lib/feed.php:89
 msgid "Atom"
-msgstr ""
+msgstr "Atom"
 
 #: lib/feed.php:91
 msgid "FOAF"
-msgstr ""
+msgstr "FOAF"
 
 #: lib/feedlist.php:64
 msgid "Export data"
-msgstr "导出数据"
+msgstr "RSS 订阅"
 
 #: lib/galleryaction.php:121
 msgid "Filter tags"
-msgstr ""
+msgstr "过滤标签"
 
 #: lib/galleryaction.php:131
 msgid "All"
 msgstr "全部"
 
 #: lib/galleryaction.php:139
-#, fuzzy
 msgid "Select tag to filter"
-msgstr "é\80\89æ\8b©è¿\90è\90¥å\95\86"
+msgstr "é\80\89æ\8b©è¦\81è¿\87滤ç\9a\84æ \87ç­¾"
 
 #: lib/galleryaction.php:140
-#, fuzzy
 msgid "Tag"
 msgstr "标签"
 
@@ -6059,46 +5827,43 @@ msgstr "执行"
 #: lib/grantroleform.php:91
 #, php-format
 msgid "Grant this user the \"%s\" role"
-msgstr ""
+msgstr "给这个用户添加\\\"%s\\\"权限"
 
 #: lib/groupeditform.php:163
-#, fuzzy
 msgid "URL of the homepage or blog of the group or topic"
-msgstr "您的主页、博客或在其他站点的URL"
+msgstr "这个小组或主题的主页或博客 URL"
 
 #: lib/groupeditform.php:168
 msgid "Describe the group or topic"
-msgstr ""
+msgstr "小组或主题的描述"
 
 #: lib/groupeditform.php:170
 #, php-format
 msgid "Describe the group or topic in %d characters"
-msgstr ""
+msgstr "小组或主题的描述,不能超过%d个字符"
 
 #: lib/groupeditform.php:179
-#, fuzzy
 msgid ""
 "Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "你的位置,格式类似\"城市,省份,国家\""
+msgstr "小组的地理位置,例如“国家、省份、城市”"
 
 #: lib/groupeditform.php:187
 #, php-format
 msgid "Extra nicknames for the group, comma- or space- separated, max %d"
-msgstr ""
+msgstr "该小组额外的昵称,用逗号或者空格分隔开,最长%d"
 
 #: lib/groupnav.php:85
 msgid "Group"
-msgstr "组"
+msgstr "组"
 
 #: lib/groupnav.php:101
-#, fuzzy
 msgid "Blocked"
-msgstr "阻止"
+msgstr "被屏蔽"
 
 #: lib/groupnav.php:102
 #, php-format
 msgid "%s blocked users"
-msgstr ""
+msgstr "%s屏蔽的用户"
 
 #: lib/groupnav.php:108
 #, php-format
@@ -6106,9 +5871,8 @@ msgid "Edit %s group properties"
 msgstr "编辑 %s群选项"
 
 #: lib/groupnav.php:113
-#, fuzzy
 msgid "Logo"
-msgstr "登录"
+msgstr "Logo"
 
 #: lib/groupnav.php:114
 #, php-format
@@ -6116,17 +5880,17 @@ msgid "Add or edit %s logo"
 msgstr "添加或编辑 %s 图标"
 
 #: lib/groupnav.php:120
-#, fuzzy, php-format
+#, php-format
 msgid "Add or edit %s design"
-msgstr "添加或编辑 %s 图标"
+msgstr "添加或编辑%s设计"
 
 #: lib/groupsbymemberssection.php:71
 msgid "Groups with most members"
-msgstr "人气最旺的"
+msgstr "人气最旺的小组"
 
 #: lib/groupsbypostssection.php:71
 msgid "Groups with most posts"
-msgstr "消息最多的群"
+msgstr "发布消息最多的小组"
 
 #: lib/grouptagcloudsection.php:56
 #, php-format
@@ -6143,9 +5907,9 @@ msgid "Unsupported image file format."
 msgstr "不支持这种图像格式。"
 
 #: lib/imagefile.php:88
-#, fuzzy, php-format
+#, php-format
 msgid "That file is too big. The maximum file size is %s."
-msgstr "你可以给你的组上载一个logo图。"
+msgstr "文件太大。文件大小限制在%s以下。"
 
 #: lib/imagefile.php:93
 msgid "Partial upload."
@@ -6160,7 +5924,6 @@ msgid "Not an image or corrupt file."
 msgstr "不是图片文件或文件已损坏。"
 
 #: lib/imagefile.php:122
-#, fuzzy
 msgid "Lost our file."
 msgstr "文件数据丢失"
 
@@ -6170,40 +5933,37 @@ msgstr "未知文件类型"
 
 #: lib/imagefile.php:244
 msgid "MB"
-msgstr ""
+msgstr "MB"
 
 #: lib/imagefile.php:246
 msgid "kB"
-msgstr ""
+msgstr "kB"
 
 #: lib/jabber.php:387
 #, php-format
 msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
 
 #: lib/jabber.php:567
 #, php-format
 msgid "Unknown inbox source %d."
-msgstr ""
+msgstr "未知的收件箱来源%d。"
 
 #: lib/joinform.php:114
-#, fuzzy
 msgid "Join"
-msgstr "登录"
+msgstr "加入"
 
 #: lib/leaveform.php:114
-#, fuzzy
 msgid "Leave"
-msgstr "保存"
+msgstr "离开"
 
 #: lib/logingroupnav.php:80
-#, fuzzy
 msgid "Login with a username and password"
-msgstr "用户名或密码不正确。"
+msgstr "用用户名和密码登录。"
 
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
-msgstr ""
+msgstr "注册一个新帐户"
 
 #. TRANS: Subject for address confirmation email
 #: lib/mail.php:174
@@ -6227,6 +5987,18 @@ msgid ""
 "Thanks for your time, \n"
 "%s\n"
 msgstr ""
+"嗨, %s。\n"
+"\n"
+"刚刚有人在%s填写了您的电子邮件地址。\n"
+"\n"
+"如果是您的操作并且您想完成您的确认,请使用下面的URL:\n"
+"\n"
+"%s\n"
+"\n"
+"如果您不知道这封邮件是怎么回事,忽略掉这封邮件就好。\n"
+"\n"
+"谢谢您的宝贵时间,\n"
+"%s\n"
 
 #. TRANS: Subject of new-subscriber notification e-mail
 #: lib/mail.php:243
@@ -6240,6 +6012,8 @@ msgid ""
 "If you believe this account is being used abusively, you can block them from "
 "your subscribers list and report as spam to site administrators at %s"
 msgstr ""
+"如果您认为此帐户正被人恶意使用,您可以将其从您的关注者中屏蔽掉并到 %s 报告给"
+"网站的管理员为他们在发垃圾信息。"
 
 #. TRANS: Main body of new-subscriber notification e-mail
 #: lib/mail.php:254
@@ -6256,12 +6030,22 @@ msgid ""
 "----\n"
 "Change your email address or notification options at %8$s\n"
 msgstr ""
+"%1$s开始关注您在%2$s的消息。\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"真诚的问候,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"在%8$s更改您的 email 地址或通知选项\n"
 
 #. TRANS: Profile info line in new-subscriber notification e-mail
 #: lib/mail.php:274
-#, fuzzy, php-format
+#, php-format
 msgid "Bio: %s"
-msgstr "位置:%s"
+msgstr "自我介绍:%s"
 
 #. TRANS: Subject of notification mail for new posting email address
 #: lib/mail.php:304
@@ -6288,7 +6072,9 @@ msgstr ""
 "\n"
 "更多电子邮件的帮助请见 %3$s。\n"
 "\n"
-"为您效力的 %4$s"
+"真诚的问候,\n"
+"\n"
+"%4$s"
 
 #. TRANS: Subject line for SMS-by-email notification messages
 #: lib/mail.php:433
@@ -6299,19 +6085,19 @@ msgstr "%s 状态"
 #. TRANS: Subject line for SMS-by-email address confirmation message
 #: lib/mail.php:460
 msgid "SMS confirmation"
-msgstr "SMS短信确认"
+msgstr "SMS 验证"
 
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
-#, fuzzy, php-format
+#, php-format
 msgid "%s: confirm you own this phone number with this code:"
-msgstr "等待确认此电话号码。"
+msgstr "%s:通过此代码证明这是您的手机:"
 
 #. TRANS: Subject for 'nudge' notification email
 #: lib/mail.php:484
 #, php-format
 msgid "You've been nudged by %s"
-msgstr "%s 振铃呼叫你"
+msgstr "%s呼叫您"
 
 #. TRANS: Body for 'nudge' notification email
 #: lib/mail.php:489
@@ -6329,12 +6115,22 @@ msgid ""
 "With kind regards,\n"
 "%4$s\n"
 msgstr ""
+"%1$s (%2$s) 想知道您这几天在做什么并邀请您来发布一些消息。\n"
+"\n"
+"那就让他/她知道您的动态吧 :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"请勿回复此邮件,他/她不会收到此邮件的内容。\n"
+"\n"
+"亲切的问候,\n"
+"%4$s\n"
 
 #. TRANS: Subject for direct-message notification email
 #: lib/mail.php:536
 #, php-format
 msgid "New private message from %s"
-msgstr "%s 发送了新的私人信息"
+msgstr "来自%s的私信"
 
 #. TRANS: Body for direct-message notification email
 #: lib/mail.php:541
@@ -6355,12 +6151,26 @@ msgid ""
 "With kind regards,\n"
 "%5$s\n"
 msgstr ""
+"%1$s (%2$s) 给您发了一条私信“:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"您可以到这里回复这条私信:\n"
+"\n"
+"%4$s\n"
+"\n"
+"请勿回复此邮件,他/她不会收到此邮件的内容。\n"
+"\n"
+"亲切的问候,\n"
+"%5$s\n"
 
 #. TRANS: Subject for favorite notification email
 #: lib/mail.php:589
-#, fuzzy, php-format
+#, php-format
 msgid "%s (@%s) added your notice as a favorite"
-msgstr "如果有人收藏我的通告,发邮件通知我。"
+msgstr "%s (@%s) 收藏了您的消息"
 
 #. TRANS: Body for favorite notification email
 #: lib/mail.php:592
@@ -6383,6 +6193,22 @@ msgid ""
 "Faithfully yours,\n"
 "%6$s\n"
 msgstr ""
+"%1$s (@%7$s) 刚刚在 %2$s 收藏了一条您的消息。\n"
+"\n"
+"您的这条消息的URL:\n"
+"\n"
+"%3$s\n"
+"\n"
+"您的这条消息的内容是:\n"
+"\n"
+"%4$s\n"
+"\n"
+"您可以到这里查看所有 %1$s 收藏的消息:\n"
+"\n"
+"%5$s\n"
+"\n"
+"真诚的问候,\n"
+"%6$s\n"
 
 #. TRANS: Line in @-reply notification e-mail. %s is conversation URL.
 #: lib/mail.php:651
@@ -6392,11 +6218,14 @@ msgid ""
 "\n"
 "\t%s"
 msgstr ""
+"到这里查看完整的对话:\n"
+"\n"
+"\t%s"
 
 #: lib/mail.php:657
 #, php-format
 msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "%s (@%s) 给您发送了一条消息"
 
 #. TRANS: Body of @-reply notification e-mail.
 #: lib/mail.php:660
@@ -6425,20 +6254,44 @@ msgid ""
 "\n"
 "P.S. You can turn off these email notifications here: %8$s\n"
 msgstr ""
+"%1$s (@%9$s) 刚刚在%2$s通过(@回复)发送了一条消息给您。\n"
+"\n"
+"消息的地址是:\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"消息的内容是:\n"
+"\n"
+"\t%4$s\n"
+"\n"
+"%5$s您可以到这里回复:\n"
+"\n"
+"\t%6$s\n"
+"\n"
+"所有给您的 @回复 消息:\n"
+"\n"
+"%7$s\n"
+"\n"
+"真切的问候,\n"
+"%2$s\n"
+"\n"
+"P.S. 您可以到这里关掉这些邮件提醒:%8$s\n"
 
 #: lib/mailbox.php:89
 msgid "Only the user can read their own mailboxes."
-msgstr "只有用户自己可以访问邮箱。"
+msgstr "只有该用户才能查看自己的私信。"
 
 #: lib/mailbox.php:139
 msgid ""
 "You have no private messages. You can send private message to engage other "
 "users in conversation. People can send you messages for your eyes only."
 msgstr ""
+"您没有任何私信。您可以试着发送私信给其他用户鼓励他们用私信和您交流。其他用户"
+"发给你您私信只有您看得到。"
 
 #: lib/mailbox.php:228 lib/noticelist.php:506
 msgid "from"
-msgstr ""
+msgstr "来自"
 
 #: lib/mailhandler.php:37
 msgid "Could not parse message."
@@ -6450,173 +6303,169 @@ msgstr "不是已注册用户。"
 
 #: lib/mailhandler.php:46
 msgid "Sorry, that is not your incoming email address."
-msgstr "对不起,这个发布用的电子邮件属于其他用户。"
+msgstr "抱歉,这个不是您的收信电子邮件地址。"
 
 #: lib/mailhandler.php:50
 msgid "Sorry, no incoming email allowed."
-msgstr "对不起,发布用的电子邮件无法使用。"
+msgstr "抱歉,现在不允许电子邮件发布。"
 
 #: lib/mailhandler.php:228
-#, fuzzy, php-format
+#, php-format
 msgid "Unsupported message type: %s"
-msgstr "不支持这种图像格式。"
+msgstr "不支持的信息格式:%s"
 
 #: lib/mediafile.php:98 lib/mediafile.php:123
 msgid "There was a database error while saving your file. Please try again."
-msgstr ""
+msgstr "保存您的文件时数据库出现了一个错误。请重试。"
 
 #: lib/mediafile.php:142
 msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
-msgstr ""
+msgstr "上传文件大小超过了 php.ini 中 upload_max_filesize 的设置限制。"
 
 #: lib/mediafile.php:147
 msgid ""
 "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
 "the HTML form."
-msgstr ""
+msgstr "上传文件大小超过了 HTML 表单中 MAX_FILE_SIZE 的设置限制。"
 
 #: lib/mediafile.php:152
 msgid "The uploaded file was only partially uploaded."
-msgstr ""
+msgstr "上传的文件只有部分被上传。"
 
 #: lib/mediafile.php:159
 msgid "Missing a temporary folder."
-msgstr ""
+msgstr "缺少一个临时文件夹。"
 
 #: lib/mediafile.php:162
 msgid "Failed to write file to disk."
-msgstr ""
+msgstr "写入磁盘失败。"
 
 #: lib/mediafile.php:165
 msgid "File upload stopped by extension."
-msgstr ""
+msgstr "文件上传被扩展停止了。"
 
 #: lib/mediafile.php:179 lib/mediafile.php:217
 msgid "File exceeds user's quota."
-msgstr ""
+msgstr "文件超过了用户的配额。"
 
 #: lib/mediafile.php:197 lib/mediafile.php:234
 msgid "File could not be moved to destination directory."
-msgstr ""
+msgstr "文件不能被移动到目标目录。"
 
 #: lib/mediafile.php:202 lib/mediafile.php:238
-#, fuzzy
 msgid "Could not determine file's MIME type."
-msgstr "æ\97 æ³\95å\88 é\99¤æ\94¶è\97\8f。"
+msgstr "æ\97 æ³\95å\88¤æ\96­æ\96\87件ç\9a\84 MIME ç±»å\9e\8b。"
 
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
-msgstr ""
+msgstr "试一下其他的%s格式。"
 
 #: lib/mediafile.php:323
 #, php-format
 msgid "%s is not a supported file type on this server."
-msgstr ""
+msgstr "这个服务器不支持%s的文件格式。"
 
 #: lib/messageform.php:120
-#, fuzzy
 msgid "Send a direct notice"
-msgstr "å\88 é\99¤é\80\9aå\91\8a"
+msgstr "å\8f\91é\80\81ä¸\80æ\9d¡ç§\81ä¿¡"
 
 #: lib/messageform.php:146
 msgid "To"
 msgstr "到"
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
+#: lib/messageform.php:159 lib/noticeform.php:186
 msgid "Available characters"
-msgstr "6 个或更多字符"
+msgstr "可用的字符"
 
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
-msgstr ""
+msgstr "发布"
 
 #: lib/noticeform.php:160
-#, fuzzy
 msgid "Send a notice"
-msgstr "新通告"
+msgstr "发送一个消息"
 
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
-msgstr "怎么样,%s?"
+msgstr "%s,最近怎么样?"
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
-msgstr ""
+msgstr "附件"
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
-msgstr ""
+msgstr "添加一个文件附件"
 
-#: lib/noticeform.php:212
+#: lib/noticeform.php:213
 msgid "Share my location"
-msgstr ""
+msgstr "分享我的地理位置。"
 
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr ""
+msgstr "不要分享我的地理位置。"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
-msgstr ""
+msgstr "抱歉,获取您的地理位置时间过长,请稍候重试"
 
 #. TRANS: Used in coordinates as abbreviation of north
 #: lib/noticelist.php:436
 msgid "N"
-msgstr ""
+msgstr "N"
 
 #. TRANS: Used in coordinates as abbreviation of south
 #: lib/noticelist.php:438
 msgid "S"
-msgstr ""
+msgstr "S"
 
 #. TRANS: Used in coordinates as abbreviation of east
 #: lib/noticelist.php:440
 msgid "E"
-msgstr ""
+msgstr "E"
 
 #. TRANS: Used in coordinates as abbreviation of west
 #: lib/noticelist.php:442
 msgid "W"
-msgstr ""
+msgstr "W"
 
 #: lib/noticelist.php:444
 #, php-format
 msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-msgstr ""
+msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
 
 #: lib/noticelist.php:453
 msgid "at"
-msgstr ""
+msgstr "位于"
+
+#: lib/noticelist.php:502
+msgid "web"
+msgstr "网页"
 
 #: lib/noticelist.php:568
-#, fuzzy
 msgid "in context"
-msgstr "没æ\9c\89å\86\85容ï¼\81"
+msgstr "æ\9f¥ç\9c\8b对è¯\9d"
 
 #: lib/noticelist.php:603
 msgid "Repeated by"
-msgstr ""
+msgstr "被转发"
 
 #: lib/noticelist.php:630
-#, fuzzy
 msgid "Reply to this notice"
-msgstr "无法删除通告。"
+msgstr "回复这个消息"
 
 #: lib/noticelist.php:631
-#, fuzzy
 msgid "Reply"
 msgstr "回复"
 
 #: lib/noticelist.php:675
-#, fuzzy
 msgid "Notice repeated"
-msgstr "消息已发布。"
+msgstr "消息已转发"
 
 #: lib/nudgeform.php:116
 msgid "Nudge this user"
@@ -6627,7 +6476,6 @@ msgid "Nudge"
 msgstr "呼叫"
 
 #: lib/nudgeform.php:128
-#, fuzzy
 msgid "Send a nudge to this user"
 msgstr "呼叫这个用户"
 
@@ -6648,17 +6496,16 @@ msgid "Error inserting remote profile"
 msgstr "添加远程的个人信息出错"
 
 #: lib/oauthstore.php:345
-#, fuzzy
 msgid "Duplicate notice"
-msgstr "删除通告"
+msgstr "转发消息"
 
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
-msgstr "无法添加新的订阅。"
+msgstr "无法添加新的关注。"
 
 #: lib/personalgroupnav.php:99
 msgid "Personal"
-msgstr "个人"
+msgstr "我的主页"
 
 #: lib/personalgroupnav.php:104
 msgid "Replies"
@@ -6674,7 +6521,7 @@ msgstr "收件箱"
 
 #: lib/personalgroupnav.php:126
 msgid "Your incoming messages"
-msgstr "æ\82¨æ\8e¥æ\94¶ç\9a\84æ¶\88æ\81¯"
+msgstr "æ\82¨æ\94¶å\88°ç\9a\84ç§\81ä¿¡"
 
 #: lib/personalgroupnav.php:130
 msgid "Outbox"
@@ -6682,132 +6529,122 @@ msgstr "发件箱"
 
 #: lib/personalgroupnav.php:131
 msgid "Your sent messages"
-msgstr "您发送的消息"
+msgstr "您发送的私信"
 
 #: lib/personaltagcloudsection.php:56
-#, fuzzy, php-format
+#, php-format
 msgid "Tags in %s's notices"
-msgstr "这个组所发布的消息的标签"
+msgstr "%s的消息中的标签"
 
 #: lib/plugin.php:115
-#, fuzzy
 msgid "Unknown"
-msgstr "未知动作"
+msgstr "未知"
 
 #: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
 msgid "Subscriptions"
-msgstr "订阅"
+msgstr "关注的"
 
 #: lib/profileaction.php:126
 msgid "All subscriptions"
-msgstr "所有订阅"
+msgstr "所有关注的"
 
 #: lib/profileaction.php:144 lib/profileaction.php:214 lib/subgroupnav.php:90
 msgid "Subscribers"
-msgstr "订阅者"
+msgstr "关注者"
 
 #: lib/profileaction.php:161
-#, fuzzy
 msgid "All subscribers"
-msgstr "订阅者"
+msgstr "所有关注者"
 
 #: lib/profileaction.php:191
-#, fuzzy
 msgid "User ID"
-msgstr "用户"
+msgstr "用户 ID"
 
 #: lib/profileaction.php:196
 msgid "Member since"
-msgstr "用户始于"
+msgstr "注册时间"
 
 #. TRANS: Average count of posts made per day since account registration
 #: lib/profileaction.php:235
 msgid "Daily average"
-msgstr ""
+msgstr "日均"
 
 #: lib/profileaction.php:264
 msgid "All groups"
-msgstr "所有组"
+msgstr "所有组"
 
 #: lib/profileformaction.php:123
 msgid "Unimplemented method."
-msgstr ""
+msgstr "未使用的方法。"
 
 #: lib/publicgroupnav.php:78
 msgid "Public"
-msgstr "å\85¬å\91\8a"
+msgstr "å\85¬å\85±"
 
 #: lib/publicgroupnav.php:82
 msgid "User groups"
-msgstr "用户组"
+msgstr "用户组"
 
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
 msgid "Recent tags"
-msgstr ""
+msgstr "最近标签"
 
 #: lib/publicgroupnav.php:88
 msgid "Featured"
-msgstr "特征"
+msgstr "推荐用户"
 
 #: lib/publicgroupnav.php:92
-#, fuzzy
 msgid "Popular"
-msgstr "ç\94¨æ\88·"
+msgstr "ç\83­é\97¨æ\94¶è\97\8f"
 
 #: lib/redirectingaction.php:95
 msgid "No return-to arguments."
-msgstr ""
+msgstr "没有 return-to 冲突。"
 
 #: lib/repeatform.php:107
-#, fuzzy
 msgid "Repeat this notice?"
-msgstr "无法删除通告。"
+msgstr "转发这个消息?"
 
 #: lib/repeatform.php:132
 msgid "Yes"
 msgstr "是"
 
 #: lib/repeatform.php:132
-#, fuzzy
 msgid "Repeat this notice"
-msgstr "无法删除通告。"
+msgstr "转发这个消息"
 
 #: lib/revokeroleform.php:91
 #, php-format
 msgid "Revoke the \"%s\" role from this user"
-msgstr ""
+msgstr "取消这个用户的\"%s\"权限"
 
 #: lib/router.php:709
 msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "没有单独的用户被定义为单用户模式。"
 
 #: lib/sandboxform.php:67
-#, fuzzy
 msgid "Sandbox"
-msgstr "æ\94¶ä»¶ç®±"
+msgstr "æ²\99ç\9b\92"
 
 #: lib/sandboxform.php:78
-#, fuzzy
 msgid "Sandbox this user"
-msgstr "å\91¼å\8f«è¿\99个ç\94¨æ\88·"
+msgstr "å°\86è¿\99个ç\94¨æ\88·æ\94¾å\85¥æ²\99ç\9b\92ã\80\82"
 
 #: lib/searchaction.php:120
-#, fuzzy
 msgid "Search site"
-msgstr "搜索"
+msgstr "搜索帮助"
 
 #: lib/searchaction.php:126
 msgid "Keyword(s)"
-msgstr ""
+msgstr "关键词"
 
 #: lib/searchaction.php:127
 msgid "Search"
 msgstr "搜索"
 
 #: lib/searchaction.php:162
-#, fuzzy
 msgid "Search help"
-msgstr "搜索"
+msgstr "搜索帮助"
 
 #: lib/searchgroupnav.php:80
 msgid "People"
@@ -6815,16 +6652,15 @@ msgstr "用户"
 
 #: lib/searchgroupnav.php:81
 msgid "Find people on this site"
-msgstr "搜索用户信息"
+msgstr "搜索本站用户"
 
 #: lib/searchgroupnav.php:83
 msgid "Find content of notices"
-msgstr "搜索通告内容"
+msgstr "搜索消息内容"
 
 #: lib/searchgroupnav.php:85
-#, fuzzy
 msgid "Find groups on this site"
-msgstr "搜索用户信息"
+msgstr "搜索本站小组"
 
 #: lib/section.php:89
 msgid "Untitled section"
@@ -6836,22 +6672,21 @@ msgstr "更多..."
 
 #: lib/silenceform.php:67
 msgid "Silence"
-msgstr ""
+msgstr "禁言"
 
 #: lib/silenceform.php:78
-#, fuzzy
 msgid "Silence this user"
-msgstr "å\91¼å\8f«è¿\99个ç\94¨æ\88·"
+msgstr "å°\86æ­¤ç\94¨æ\88·ç¦\81è¨\80"
 
 #: lib/subgroupnav.php:83
-#, fuzzy, php-format
+#, php-format
 msgid "People %s subscribes to"
-msgstr "远程订阅"
+msgstr "%s关注的用户"
 
 #: lib/subgroupnav.php:91
-#, fuzzy, php-format
+#, php-format
 msgid "People subscribed to %s"
-msgstr "订阅 %s"
+msgstr "关注了%s的用户"
 
 #: lib/subgroupnav.php:99
 #, php-format
@@ -6863,222 +6698,201 @@ msgid "Invite"
 msgstr "邀请"
 
 #: lib/subgroupnav.php:106
-#, fuzzy, php-format
+#, php-format
 msgid "Invite friends and colleagues to join you on %s"
-msgstr "使用这个表单来邀请好友和同事加入。"
+msgstr "邀请朋友和同事来%s一起和你交流"
 
 #: lib/subscriberspeopleselftagcloudsection.php:48
 #: lib/subscriptionspeopleselftagcloudsection.php:48
 msgid "People Tagcloud as self-tagged"
-msgstr ""
+msgstr "用户自我标签的用户标签云"
 
 #: lib/subscriberspeopletagcloudsection.php:48
 #: lib/subscriptionspeopletagcloudsection.php:48
 msgid "People Tagcloud as tagged"
-msgstr ""
+msgstr "被标签的用户标签云"
 
 #: lib/tagcloudsection.php:56
-#, fuzzy
 msgid "None"
-msgstr "(没有)"
+msgstr ""
 
 #: lib/themeuploader.php:50
 msgid "This server cannot handle theme uploads without ZIP support."
-msgstr ""
+msgstr "服务器不支持 ZIP,无法处理上传的主题。"
 
 #: lib/themeuploader.php:58 lib/themeuploader.php:61
 msgid "The theme file is missing or the upload failed."
-msgstr ""
+msgstr "主题文件丢失或上传失败。"
 
 #: lib/themeuploader.php:91 lib/themeuploader.php:102
 #: lib/themeuploader.php:253 lib/themeuploader.php:257
 #: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
 msgid "Failed saving theme."
-msgstr "更新头像失败。"
+msgstr "保存主题失败"
 
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
-msgstr ""
+msgstr "无效的主题:目录结构损坏。"
 
 #: lib/themeuploader.php:166
 #, php-format
 msgid "Uploaded theme is too large; must be less than %d bytes uncompressed."
-msgstr ""
+msgstr "上传的主题过大,解压后必须小于%d字节。"
 
 #: lib/themeuploader.php:178
 msgid "Invalid theme archive: missing file css/display.css"
-msgstr ""
+msgstr "无效的主题存档:css/display.css 文件丢失"
 
 #: lib/themeuploader.php:205
 msgid ""
 "Theme contains invalid file or folder name. Stick with ASCII letters, "
 "digits, underscore, and minus sign."
 msgstr ""
+"主题包含无效的文件或文件夹的名称。请只使用 ASCII 字母,数字,下划线和减号。"
 
 #: lib/themeuploader.php:216
 #, php-format
 msgid "Theme contains file of type '.%s', which is not allowed."
-msgstr ""
+msgstr "主题包含不允许的”.%s“格式文件。"
 
 #: lib/themeuploader.php:234
-#, fuzzy
 msgid "Error opening theme archive."
-msgstr "发送消息出错。"
+msgstr "打开主题文件时出错。"
 
 #: lib/topposterssection.php:74
 msgid "Top posters"
-msgstr ""
+msgstr "灌水精英"
 
 #: lib/unsandboxform.php:69
 msgid "Unsandbox"
-msgstr ""
+msgstr "移出沙盒"
 
 #: lib/unsandboxform.php:80
-#, fuzzy
 msgid "Unsandbox this user"
-msgstr "å\91¼å\8f«è¿\99个ç\94¨æ\88·"
+msgstr "å°\86è¿\99个ç\94¨æ\88·ä»\8eæ²\99ç\9b\92中移å\87º"
 
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
-msgstr ""
+msgstr "取消禁言"
 
 #: lib/unsilenceform.php:78
-#, fuzzy
 msgid "Unsilence this user"
-msgstr "å\91¼å\8f«è¿\99个ç\94¨æ\88·"
+msgstr "å\8f\96æ¶\88对è¿\99个ç\94¨æ\88·ç\9a\84ç¦\81è¨\80"
 
 #: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-#, fuzzy
 msgid "Unsubscribe from this user"
-msgstr "取消订阅 %s"
+msgstr "取消关注这个用户"
 
 #: lib/unsubscribeform.php:137
 msgid "Unsubscribe"
-msgstr "退订"
-
-#: lib/usernoprofileexception.php:58
-#, fuzzy, php-format
-msgid "User %s (%d) has no profile record."
-msgstr "用户没有个人信息。"
+msgstr "取消关注"
 
 #: lib/userprofile.php:117
-#, fuzzy
 msgid "Edit Avatar"
-msgstr "头像"
+msgstr "编辑头像"
 
 #: lib/userprofile.php:234 lib/userprofile.php:248
-#, fuzzy
 msgid "User actions"
-msgstr "ç»\84动作"
+msgstr "ç\94¨æ\88·动作"
 
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
-msgstr ""
+msgstr "用户删除处理中……"
 
 #: lib/userprofile.php:263
-#, fuzzy
 msgid "Edit profile settings"
-msgstr "个人设置"
+msgstr "编辑个人信息设置"
 
 #: lib/userprofile.php:264
 msgid "Edit"
 msgstr "编辑"
 
 #: lib/userprofile.php:287
-#, fuzzy
 msgid "Send a direct message to this user"
-msgstr "无法向此用户发送消息。"
+msgstr "给该用户发送私信"
 
 #: lib/userprofile.php:288
-#, fuzzy
 msgid "Message"
-msgstr "æ\96°æ\88æ\81¯"
+msgstr "消息"
 
 #: lib/userprofile.php:326
 msgid "Moderate"
-msgstr ""
+msgstr "审核"
 
 #: lib/userprofile.php:364
-#, fuzzy
 msgid "User role"
-msgstr "用户"
+msgstr "用户权限"
 
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
-msgstr ""
+msgstr "管理员"
 
 #: lib/userprofile.php:367
 msgctxt "role"
 msgid "Moderator"
-msgstr ""
+msgstr "审核员"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr "几秒前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
-msgstr "分钟前"
+msgstr "约1分钟前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
-msgstr "%d 分钟前"
+msgstr "约%d分钟前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
-msgstr "小时前"
+msgstr "约1小时前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
-msgstr "%d 小时前"
+msgstr "约%d小时前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
-msgstr "天前"
+msgstr "约1天前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
-msgstr "%d 天前"
+msgstr "约%d天前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
-msgstr "个月前"
+msgstr "约1个月前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
-msgstr "%d 个月前"
+msgstr "约%d个月前"
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
-msgstr "年前"
+msgstr "约1年前"
 
 #: lib/webcolor.php:82
-#, fuzzy, php-format
+#, php-format
 msgid "%s is not a valid color!"
-msgstr "主页的URL不正确。"
+msgstr "%s不是有效的颜色!"
 
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
+msgstr "%s不是有效的颜色!应使用3或6个十六进制字符。"
index 3f29e3f5bf76f095370edd04b6320c913d559119..99a4e357eabd31a9cd5bcd016f1c77ec0d8a3dec 100644 (file)
@@ -7,28 +7,21 @@ msgid ""
 msgstr ""
 "Project-Id-Version: StatusNet\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-08-11 10:11+0000\n"
-"PO-Revision-Date: 2010-08-11 10:13:29+0000\n"
+"POT-Creation-Date: 2010-08-28 15:28+0000\n"
+"PO-Revision-Date: 2010-08-28 15:31:48+0000\n"
 "Language-Team: Traditional Chinese\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r70848); Translate extension (2010-07-21)\n"
+"X-Generator: MediaWiki 1.17alpha (r71856); Translate extension (2010-08-20)\n"
 "X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
 "X-Language-Code: zh-hant\n"
 "X-Message-Group: out-statusnet\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-#. TRANS: Page title
-#. TRANS: Menu item for site administration
-#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:376
-#, fuzzy
-msgid "Access"
-msgstr "接受"
-
 #. TRANS: Page notice
 #: actions/accessadminpanel.php:67
 msgid "Site access settings"
-msgstr ""
+msgstr "使用者設定發生錯誤"
 
 #. TRANS: Form legend for registration form.
 #: actions/accessadminpanel.php:161
@@ -66,11 +59,6 @@ msgstr ""
 msgid "Closed"
 msgstr ""
 
-#. TRANS: Title / tooltip for button to save access settings in site admin panel
-#: actions/accessadminpanel.php:202
-msgid "Save access settings"
-msgstr ""
-
 #. TRANS: Button label to save e-mail preferences.
 #. TRANS: Button label to save IM preferences.
 #. TRANS: Button label to save SMS preferences.
@@ -85,10 +73,10 @@ msgstr ""
 #. TRANS: Server error when page not found (404)
 #: actions/all.php:68 actions/public.php:98 actions/replies.php:93
 #: actions/showfavorites.php:138 actions/tag.php:52
-#, fuzzy
 msgid "No such page."
 msgstr "無此使用者"
 
+#. TRANS: Error text shown when trying to send a direct message to a user that does not exist.
 #: actions/all.php:79 actions/allrss.php:68
 #: actions/apiaccountupdatedeliverydevice.php:114
 #: actions/apiaccountupdateprofile.php:105
@@ -108,17 +96,11 @@ msgstr "無此使用者"
 #: actions/remotesubscribe.php:154 actions/replies.php:73
 #: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
 #: actions/userbyid.php:74 actions/usergroups.php:93 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:478 lib/galleryaction.php:59
+#: actions/xrds.php:71 lib/command.php:498 lib/galleryaction.php:59
 #: lib/mailbox.php:82 lib/profileaction.php:77
 msgid "No such user."
 msgstr "無此使用者"
 
-#. TRANS: Page title. %1$s is user nickname, %2$d is page number
-#: actions/all.php:90
-#, fuzzy, php-format
-msgid "%1$s and friends, page %2$d"
-msgstr "%s與好友"
-
 #. TRANS: Page title. %1$s is user nickname
 #. TRANS: H1 text. %1$s is user nickname
 #. TRANS: Message is used as link title. %s is a user nickname.
@@ -176,12 +158,6 @@ msgid ""
 "post a notice to them."
 msgstr ""
 
-#. TRANS: H1 text
-#: actions/all.php:182
-#, fuzzy
-msgid "You and friends"
-msgstr "%s與好友"
-
 #. TRANS: Message is used as link description. %1$s is a username, %2$s is a site name.
 #. TRANS: Message is used as a subtitle. %1$s is a user nickname, %2$s is a site name.
 #: actions/allrss.php:121 actions/apitimelinefriends.php:216
@@ -190,32 +166,6 @@ msgstr "%s與好友"
 msgid "Updates from %1$s and friends on %2$s!"
 msgstr ""
 
-#: actions/apiaccountratelimitstatus.php:72
-#: actions/apiaccountupdatedeliverydevice.php:94
-#: actions/apiaccountupdateprofile.php:97
-#: actions/apiaccountupdateprofilebackgroundimage.php:94
-#: actions/apiaccountupdateprofilecolors.php:118
-#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
-#: actions/apifavoritecreate.php:100 actions/apifavoritedestroy.php:101
-#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
-#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:139
-#: actions/apigroupismember.php:115 actions/apigroupjoin.php:156
-#: actions/apigroupleave.php:142 actions/apigrouplist.php:137
-#: actions/apigrouplistall.php:122 actions/apigroupmembership.php:107
-#: actions/apigroupshow.php:116 actions/apihelptest.php:88
-#: actions/apistatusesdestroy.php:104 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:109 actions/apistatusnetconfig.php:141
-#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:174 actions/apitimelinefriends.php:271
-#: actions/apitimelinegroup.php:154 actions/apitimelinehome.php:175
-#: actions/apitimelinementions.php:174 actions/apitimelinepublic.php:241
-#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:161
-#: actions/apitimelineuser.php:163 actions/apiusershow.php:101
-#, fuzzy
-msgid "API method not found."
-msgstr "確認碼遺失"
-
 #: actions/apiaccountupdatedeliverydevice.php:86
 #: actions/apiaccountupdateprofile.php:89
 #: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -236,26 +186,6 @@ msgid ""
 "none."
 msgstr ""
 
-#: actions/apiaccountupdatedeliverydevice.php:133
-#, fuzzy
-msgid "Could not update user."
-msgstr "無法更新使用者"
-
-#: actions/apiaccountupdateprofile.php:112
-#: actions/apiaccountupdateprofilebackgroundimage.php:194
-#: actions/apiaccountupdateprofilecolors.php:185
-#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
-#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
-#: actions/replies.php:80 actions/usergroups.php:100 lib/galleryaction.php:66
-#: lib/profileaction.php:84
-msgid "User has no profile."
-msgstr ""
-
-#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
-msgid "Could not save profile."
-msgstr "無法儲存個人資料"
-
 #: actions/apiaccountupdateprofilebackgroundimage.php:108
 #: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
 #: actions/apistatusesupdate.php:212 actions/avatarsettings.php:257
@@ -268,30 +198,6 @@ msgid ""
 "current configuration."
 msgstr ""
 
-#: actions/apiaccountupdateprofilebackgroundimage.php:136
-#: actions/apiaccountupdateprofilebackgroundimage.php:146
-#: actions/apiaccountupdateprofilecolors.php:164
-#: actions/apiaccountupdateprofilecolors.php:174
-#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
-#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
-#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-msgid "Unable to save your design settings."
-msgstr ""
-
-#: actions/apiaccountupdateprofilebackgroundimage.php:187
-#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
-msgid "Could not update your design."
-msgstr "無法更新使用者"
-
-#: actions/apiblockcreate.php:105
-msgid "You cannot block yourself!"
-msgstr ""
-
-#: actions/apiblockcreate.php:126
-msgid "Block user failed."
-msgstr ""
-
 #: actions/apiblockdestroy.php:114
 msgid "Unblock user failed."
 msgstr ""
@@ -325,11 +231,6 @@ msgstr ""
 msgid "That's too long. Max message size is %d chars."
 msgstr ""
 
-#: actions/apidirectmessagenew.php:138
-#, fuzzy
-msgid "Recipient user not found."
-msgstr "確認碼遺失"
-
 #: actions/apidirectmessagenew.php:142
 msgid "Can't send direct messages to users who aren't your friend."
 msgstr ""
@@ -343,52 +244,27 @@ msgstr ""
 msgid "This status is already a favorite."
 msgstr ""
 
-#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:285
-#, fuzzy
+#. TRANS: Error message text shown when a favorite could not be set.
+#: actions/apifavoritecreate.php:131 actions/favor.php:84 lib/command.php:296
 msgid "Could not create favorite."
-msgstr "無法儲存個人資料"
-
-#: actions/apifavoritedestroy.php:123
-msgid "That status is not a favorite."
-msgstr ""
+msgstr "無法更新使用者"
 
 #: actions/apifavoritedestroy.php:135 actions/disfavor.php:87
-#, fuzzy
 msgid "Could not delete favorite."
-msgstr "ç\84¡æ³\95æ\9b´æ\96°ä½¿ç\94¨è\80\85"
+msgstr "ç\84¡æ³\95æ\96°å¢\9eè¨\82é\96±"
 
 #: actions/apifriendshipscreate.php:109
-#, fuzzy
 msgid "Could not follow user: profile not found."
 msgstr "無法儲存個人資料"
 
-#: actions/apifriendshipscreate.php:118
-#, php-format
-msgid "Could not follow user: %s is already on your list."
-msgstr ""
-
 #: actions/apifriendshipsdestroy.php:109
 msgid "Could not unfollow user: User not found."
-msgstr ""
-
-#: actions/apifriendshipsdestroy.php:120
-msgid "You cannot unfollow yourself."
-msgstr ""
+msgstr "無法儲存個人資料"
 
 #: actions/apifriendshipsexists.php:91
 msgid "Two valid IDs or screen_names must be supplied."
 msgstr ""
 
-#: actions/apifriendshipsshow.php:134
-#, fuzzy
-msgid "Could not determine source user."
-msgstr "無法更新使用者"
-
-#: actions/apifriendshipsshow.php:142
-#, fuzzy
-msgid "Could not find target user."
-msgstr "無法更新使用者"
-
 #: actions/apigroupcreate.php:167 actions/editgroup.php:186
 #: actions/newgroup.php:126 actions/profilesettings.php:215
 #: actions/register.php:212
@@ -401,13 +277,6 @@ msgstr "暱稱請用小寫字母或數字,勿加空格。"
 msgid "Nickname already in use. Try another one."
 msgstr "此暱稱已有人使用。再試試看別的吧。"
 
-#: actions/apigroupcreate.php:183 actions/editgroup.php:193
-#: actions/newgroup.php:133 actions/profilesettings.php:218
-#: actions/register.php:217
-#, fuzzy
-msgid "Not a valid nickname."
-msgstr "無暱稱"
-
 #: actions/apigroupcreate.php:199 actions/editapplication.php:215
 #: actions/editgroup.php:199 actions/newapplication.php:203
 #: actions/newgroup.php:139 actions/profilesettings.php:222
@@ -423,9 +292,9 @@ msgstr "全名過長(最多255字元)"
 
 #: actions/apigroupcreate.php:216 actions/editapplication.php:190
 #: actions/newapplication.php:172
-#, fuzzy, php-format
+#, php-format
 msgid "Description is too long (max %d chars)."
-msgstr "地點過長(共255個字)"
+msgstr "地點過長(共%d個字)"
 
 #: actions/apigroupcreate.php:227 actions/editgroup.php:208
 #: actions/newgroup.php:148 actions/profilesettings.php:232
@@ -439,17 +308,6 @@ msgstr "地點過長(共255個字)"
 msgid "Too many aliases! Maximum %d."
 msgstr ""
 
-#: actions/apigroupcreate.php:267
-#, fuzzy, php-format
-msgid "Invalid alias: \"%s\"."
-msgstr "尺寸錯誤"
-
-#: actions/apigroupcreate.php:276 actions/editgroup.php:232
-#: actions/newgroup.php:172
-#, fuzzy, php-format
-msgid "Alias \"%s\" already in use. Try another one."
-msgstr "此暱稱已有人使用。再試試看別的吧。"
-
 #: actions/apigroupcreate.php:289 actions/editgroup.php:238
 #: actions/newgroup.php:178
 msgid "Alias can't be the same as nickname."
@@ -458,33 +316,23 @@ msgstr ""
 #: actions/apigroupismember.php:96 actions/apigroupjoin.php:105
 #: actions/apigroupleave.php:105 actions/apigroupmembership.php:92
 #: actions/apigroupshow.php:83 actions/apitimelinegroup.php:92
-#, fuzzy
 msgid "Group not found."
 msgstr "確認碼遺失"
 
-#: actions/apigroupjoin.php:111 actions/joingroup.php:100
-#, fuzzy
-msgid "You are already a member of that group."
-msgstr "無法連結到伺服器:%s"
-
-#: actions/apigroupjoin.php:120 actions/joingroup.php:105 lib/command.php:327
-msgid "You have been blocked from that group by the admin."
-msgstr ""
-
-#: actions/apigroupjoin.php:139 actions/joingroup.php:134
+#. TRANS: Message given having failed to add a user to a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
+#: actions/apigroupjoin.php:139 actions/joingroup.php:134 lib/command.php:353
 #, php-format
 msgid "Could not join user %1$s to group %2$s."
-msgstr ""
-
-#: actions/apigroupleave.php:115
-#, fuzzy
-msgid "You are not a member of this group."
-msgstr "無法連結到伺服器:%s"
+msgstr "無法更新使用者"
 
+#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
 #: actions/apigroupleave.php:125 actions/leavegroup.php:129
+#: lib/command.php:401
 #, php-format
 msgid "Could not remove user %1$s from group %2$s."
-msgstr ""
+msgstr "無法更新使用者"
 
 #. TRANS: %s is a user name
 #: actions/apigrouplist.php:98
@@ -498,31 +346,15 @@ msgstr ""
 msgid "%1$s groups %2$s is a member of."
 msgstr ""
 
-#. TRANS: Message is used as a title. %s is a site name.
-#. TRANS: Message is used as a page title. %s is a nick name.
-#: actions/apigrouplistall.php:92 actions/usergroups.php:63
-#, php-format
-msgid "%s groups"
-msgstr ""
-
 #: actions/apigrouplistall.php:96
 #, php-format
 msgid "groups on %s"
 msgstr ""
 
-#: actions/apimediaupload.php:99
-msgid "Upload failed."
-msgstr ""
-
 #: actions/apioauthauthorize.php:101
 msgid "No oauth_token parameter provided."
 msgstr ""
 
-#: actions/apioauthauthorize.php:106
-#, fuzzy
-msgid "Invalid token."
-msgstr "尺寸錯誤"
-
 #: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
 #: actions/deletenotice.php:169 actions/disfavor.php:74
 #: actions/emailsettings.php:267 actions/favor.php:75 actions/geocode.php:55
@@ -541,18 +373,13 @@ msgstr "尺寸錯誤"
 msgid "There was a problem with your session token. Try again, please."
 msgstr ""
 
-#: actions/apioauthauthorize.php:135
-#, fuzzy
-msgid "Invalid nickname / password!"
-msgstr "使用者名稱或密碼無效"
-
 #: actions/apioauthauthorize.php:159
 msgid "Database error deleting OAuth application user."
-msgstr ""
+msgstr "個人圖像插入錯誤"
 
 #: actions/apioauthauthorize.php:185
 msgid "Database error inserting OAuth application user."
-msgstr ""
+msgstr "個人圖像插入錯誤"
 
 #: actions/apioauthauthorize.php:214
 #, php-format
@@ -594,12 +421,6 @@ msgid ""
 "give access to your %4$s account to third parties you trust."
 msgstr ""
 
-#. TRANS: Main menu option when logged in for access to user settings
-#: actions/apioauthauthorize.php:310 lib/action.php:450
-#, fuzzy
-msgid "Account"
-msgstr "關於"
-
 #: actions/apioauthauthorize.php:313 actions/login.php:252
 #: actions/profilesettings.php:106 actions/register.php:431
 #: actions/showgroup.php:245 actions/tagother.php:94
@@ -608,13 +429,6 @@ msgstr "關於"
 msgid "Nickname"
 msgstr "暱稱"
 
-#. TRANS: Link description in user account settings menu.
-#: actions/apioauthauthorize.php:316 actions/login.php:255
-#: actions/register.php:436 lib/accountsettingsaction.php:125
-#, fuzzy
-msgid "Password"
-msgstr "新密碼"
-
 #: actions/apioauthauthorize.php:328
 msgid "Deny"
 msgstr ""
@@ -640,14 +454,11 @@ msgstr ""
 msgid "No such notice."
 msgstr "無此通知"
 
-#: actions/apistatusesretweet.php:83
+#. TRANS: Error text shown when trying to repeat an own notice.
+#: actions/apistatusesretweet.php:83 lib/command.php:538
 msgid "Cannot repeat your own notice."
 msgstr ""
 
-#: actions/apistatusesretweet.php:91
-msgid "Already repeated that notice."
-msgstr ""
-
 #: actions/apistatusesshow.php:139
 msgid "Status deleted."
 msgstr ""
@@ -660,17 +471,11 @@ msgstr ""
 msgid "Client must provide a 'status' parameter with a value."
 msgstr ""
 
-#: actions/apistatusesupdate.php:242 actions/newnotice.php:155
-#: lib/mailhandler.php:60
-#, php-format
-msgid "That's too long. Max notice size is %d chars."
-msgstr ""
-
 #: actions/apistatusesupdate.php:283 actions/apiusershow.php:96
 msgid "Not found."
-msgstr ""
+msgstr "確認碼遺失"
 
-#: actions/apistatusesupdate.php:306 actions/newnotice.php:178
+#: actions/apistatusesupdate.php:306 actions/newnotice.php:181
 #, php-format
 msgid "Max notice size is %d chars, including attachment URL."
 msgstr ""
@@ -679,21 +484,11 @@ msgstr ""
 msgid "Unsupported format."
 msgstr ""
 
-#: actions/apitimelinefavorites.php:110
-#, fuzzy, php-format
-msgid "%1$s / Favorites from %2$s"
-msgstr "%1$s的狀態是%2$s"
-
 #: actions/apitimelinefavorites.php:119
 #, php-format
 msgid "%1$s updates favorited by %2$s / %2$s."
 msgstr ""
 
-#: actions/apitimelinementions.php:118
-#, fuzzy, php-format
-msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s的狀態是%2$s"
-
 #: actions/apitimelinementions.php:131
 #, php-format
 msgid "%1$s updates that reply to updates from %2$s / %3$s."
@@ -729,13 +524,7 @@ msgstr ""
 msgid "Updates tagged with %1$s on %2$s!"
 msgstr ""
 
-#: actions/apitrends.php:87
-#, fuzzy
-msgid "API method under construction."
-msgstr "確認碼遺失"
-
 #: actions/attachment.php:73
-#, fuzzy
 msgid "No such attachment."
 msgstr "無此通知"
 
@@ -774,7 +563,7 @@ msgstr ""
 #: actions/avatarsettings.php:119 actions/avatarsettings.php:197
 #: actions/grouplogo.php:254
 msgid "Avatar settings"
-msgstr ""
+msgstr "使用者設定發生錯誤"
 
 #: actions/avatarsettings.php:127 actions/avatarsettings.php:205
 #: actions/grouplogo.php:202 actions/grouplogo.php:262
@@ -807,10 +596,6 @@ msgstr ""
 msgid "Pick a square area of the image to be your avatar"
 msgstr ""
 
-#: actions/avatarsettings.php:347 actions/grouplogo.php:380
-msgid "Lost our file data."
-msgstr ""
-
 #: actions/avatarsettings.php:370
 msgid "Avatar updated."
 msgstr "更新個人圖像"
@@ -819,21 +604,10 @@ msgstr "更新個人圖像"
 msgid "Failed updating avatar."
 msgstr "無法上傳個人圖像"
 
-#: actions/avatarsettings.php:397
-#, fuzzy
-msgid "Avatar deleted."
-msgstr "更新個人圖像"
-
 #: actions/block.php:69
-#, fuzzy
 msgid "You already blocked that user."
 msgstr "此Jabber ID已有人使用"
 
-#: actions/block.php:107 actions/block.php:136 actions/groupblock.php:158
-#, fuzzy
-msgid "Block user"
-msgstr "無此使用者"
-
 #: actions/block.php:138
 msgid ""
 "Are you sure you want to block this user? Afterwards, they will be "
@@ -857,7 +631,7 @@ msgstr ""
 #. TRANS: Submit button title for 'No' when deleting a user.
 #: actions/block.php:157 actions/deleteuser.php:156
 msgid "Do not block this user"
-msgstr ""
+msgstr "此Jabber ID已有人使用"
 
 #. TRANS: Button label on the user block form.
 #. TRANS: Button label on the delete application form.
@@ -871,15 +645,12 @@ msgctxt "BUTTON"
 msgid "Yes"
 msgstr ""
 
-#. TRANS: Submit button title for 'Yes' when blocking a user.
-#: actions/block.php:164 actions/groupmembers.php:392 lib/blockform.php:80
-msgid "Block this user"
-msgstr ""
-
 #: actions/block.php:187
 msgid "Failed to save block information."
 msgstr ""
 
+#. TRANS: Command exception text shown when a group is requested that does not exist.
+#. TRANS: Error text shown when trying to leave a group that does not exist.
 #: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
 #: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
 #: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
@@ -889,17 +660,11 @@ msgstr ""
 #: actions/groupunblock.php:86 actions/joingroup.php:82
 #: actions/joingroup.php:93 actions/leavegroup.php:82
 #: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:166
-#: lib/command.php:368
-#, fuzzy
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:170
+#: lib/command.php:383
 msgid "No such group."
 msgstr "無此使用者"
 
-#: actions/blockedfromgroup.php:97
-#, php-format
-msgid "%s blocked profiles"
-msgstr ""
-
 #: actions/blockedfromgroup.php:100
 #, php-format
 msgid "%1$s blocked profiles, page %2$d"
@@ -917,10 +682,6 @@ msgstr ""
 msgid "Unblock"
 msgstr ""
 
-#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
-msgid "Unblock this user"
-msgstr ""
-
 #. TRANS: Title for mini-posting window loaded from bookmarklet.
 #: actions/bookmarklet.php:51
 #, php-format
@@ -935,23 +696,12 @@ msgstr "無確認碼"
 msgid "Confirmation code not found."
 msgstr "確認碼遺失"
 
-#: actions/confirmaddress.php:85
-#, fuzzy
-msgid "That confirmation code is not for you!"
-msgstr "確認碼遺失"
-
 #. TRANS: Server error for an unknow address type, which can be 'email', 'jabber', or 'sms'.
 #: actions/confirmaddress.php:91
 #, php-format
 msgid "Unrecognized address type %s."
 msgstr ""
 
-#. TRANS: Client error for an already confirmed email/jabbel/sms address.
-#: actions/confirmaddress.php:96
-#, fuzzy
-msgid "That address has already been confirmed."
-msgstr "此電子信箱已註冊過了"
-
 #. TRANS: Server error thrown on database error updating e-mail preferences.
 #. TRANS: Server error thrown on database error removing a registered e-mail address.
 #. TRANS: Server error thrown on database error updating IM preferences.
@@ -974,7 +724,6 @@ msgid "Couldn't delete email confirmation."
 msgstr "無法取消信箱確認"
 
 #: actions/confirmaddress.php:146
-#, fuzzy
 msgid "Confirm address"
 msgstr "確認"
 
@@ -983,31 +732,19 @@ msgstr "確認"
 msgid "The address \"%s\" has been confirmed for your account."
 msgstr ""
 
-#: actions/conversation.php:99
-#, fuzzy
-msgid "Conversation"
-msgstr "地點"
-
 #: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
 #: lib/profileaction.php:229 lib/searchgroupnav.php:82
-#, fuzzy
 msgid "Notices"
-msgstr "新訊息"
+msgstr "無此通知"
 
 #: actions/deleteapplication.php:63
 msgid "You must be logged in to delete an application."
-msgstr ""
-
-#: actions/deleteapplication.php:71
-#, fuzzy
-msgid "Application not found."
-msgstr "確認碼遺失"
+msgstr "無法取消信箱確認"
 
 #: actions/deleteapplication.php:78 actions/editapplication.php:77
 #: actions/showapplication.php:94
-#, fuzzy
 msgid "You are not the owner of this application."
-msgstr "無法連結到伺服器:%s"
+msgstr "無法取消信箱確認"
 
 #: actions/deleteapplication.php:102 actions/editapplication.php:127
 #: actions/newapplication.php:110 actions/showapplication.php:118
@@ -1017,7 +754,7 @@ msgstr ""
 
 #: actions/deleteapplication.php:123 actions/deleteapplication.php:147
 msgid "Delete application"
-msgstr ""
+msgstr "無法取消信箱確認"
 
 #: actions/deleteapplication.php:149
 msgid ""
@@ -1029,28 +766,11 @@ msgstr ""
 #. TRANS: Submit button title for 'No' when deleting an application.
 #: actions/deleteapplication.php:158
 msgid "Do not delete this application"
-msgstr ""
+msgstr "無法取消信箱確認"
 
 #. TRANS: Submit button title for 'Yes' when deleting an application.
 #: actions/deleteapplication.php:164
 msgid "Delete this application"
-msgstr ""
-
-#. TRANS: Client error message thrown when trying to access the admin panel while not logged in.
-#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
-#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
-#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
-#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
-#: actions/tagother.php:33 actions/unsubscribe.php:52
-#: lib/adminpanelaction.php:73 lib/profileformaction.php:64
-#: lib/settingsaction.php:72
-#, fuzzy
-msgid "Not logged in."
-msgstr "已登入"
-
-#: actions/deletenotice.php:71
-#, fuzzy
-msgid "Can't delete this notice."
 msgstr "無法取消信箱確認"
 
 #: actions/deletenotice.php:103
@@ -1059,38 +779,14 @@ msgid ""
 "be undone."
 msgstr ""
 
-#: actions/deletenotice.php:109 actions/deletenotice.php:141
-#, fuzzy
-msgid "Delete notice"
-msgstr "新訊息"
-
 #: actions/deletenotice.php:144
 msgid "Are you sure you want to delete this notice?"
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when deleting a notice.
-#: actions/deletenotice.php:151
-msgid "Do not delete this notice"
-msgstr ""
-
-#. TRANS: Submit button title for 'Yes' when deleting a notice.
-#: actions/deletenotice.php:158 lib/noticelist.php:657
-msgid "Delete this notice"
-msgstr ""
-
-#: actions/deleteuser.php:67
-#, fuzzy
-msgid "You cannot delete users."
-msgstr "無法更新使用者"
-
 #: actions/deleteuser.php:74
 msgid "You can only delete local users."
 msgstr ""
 
-#: actions/deleteuser.php:110 actions/deleteuser.php:133
-msgid "Delete user"
-msgstr ""
-
 #: actions/deleteuser.php:136
 msgid ""
 "Are you sure you want to delete this user? This will clear all data about "
@@ -1100,7 +796,7 @@ msgstr ""
 #. TRANS: Submit button title for 'Yes' when deleting a user.
 #: actions/deleteuser.php:163 lib/deleteuserform.php:77
 msgid "Delete this user"
-msgstr ""
+msgstr "註冊確認"
 
 #. TRANS: Message used as title for design settings for the site.
 #. TRANS: Link description in user account settings menu.
@@ -1113,28 +809,17 @@ msgstr ""
 msgid "Design settings for this StatusNet site."
 msgstr ""
 
-#: actions/designadminpanel.php:318
-#, fuzzy
-msgid "Invalid logo URL."
-msgstr "尺寸錯誤"
-
 #: actions/designadminpanel.php:322
 #, php-format
 msgid "Theme not available: %s."
 msgstr ""
 
 #: actions/designadminpanel.php:426
-#, fuzzy
 msgid "Change logo"
 msgstr "更改"
 
 #: actions/designadminpanel.php:431
 msgid "Site logo"
-msgstr ""
-
-#: actions/designadminpanel.php:443
-#, fuzzy
-msgid "Change theme"
 msgstr "更改"
 
 #: actions/designadminpanel.php:460
@@ -1188,14 +873,8 @@ msgid "Tile background image"
 msgstr ""
 
 #: actions/designadminpanel.php:564 lib/designsettings.php:170
-#, fuzzy
 msgid "Change colours"
-msgstr "更改密碼"
-
-#: actions/designadminpanel.php:587 lib/designsettings.php:191
-#, fuzzy
-msgid "Content"
-msgstr "連結"
+msgstr "更改"
 
 #: actions/designadminpanel.php:600 lib/designsettings.php:204
 msgid "Sidebar"
@@ -1205,11 +884,6 @@ msgstr ""
 msgid "Text"
 msgstr ""
 
-#: actions/designadminpanel.php:626 lib/designsettings.php:230
-#, fuzzy
-msgid "Links"
-msgstr "登入"
-
 #: actions/designadminpanel.php:651
 msgid "Advanced"
 msgstr ""
@@ -1241,10 +915,6 @@ msgstr ""
 msgid "Save"
 msgstr ""
 
-#: actions/designadminpanel.php:686 lib/designsettings.php:257
-msgid "Save design"
-msgstr ""
-
 #: actions/disfavor.php:81
 msgid "This notice is not a favorite!"
 msgstr ""
@@ -1254,23 +924,14 @@ msgid "Add to favorites"
 msgstr ""
 
 #: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
 msgid "No such document \"%s\""
 msgstr "無此通知"
 
-#: actions/editapplication.php:54
-msgid "Edit Application"
-msgstr ""
-
-#: actions/editapplication.php:66
-msgid "You must be logged in to edit an application."
-msgstr ""
-
 #: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
 #: actions/showapplication.php:87
-#, fuzzy
 msgid "No such application."
-msgstr "無此通知"
+msgstr "無此使用者"
 
 #: actions/editapplication.php:161
 msgid "Use this form to edit your application."
@@ -1280,16 +941,6 @@ msgstr ""
 msgid "Name is required."
 msgstr ""
 
-#: actions/editapplication.php:180 actions/newapplication.php:165
-#, fuzzy
-msgid "Name is too long (max 255 chars)."
-msgstr "全名過長(最多255字元)"
-
-#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
-msgid "Name already in use. Try another one."
-msgstr "此暱稱已有人使用。再試試看別的吧。"
-
 #: actions/editapplication.php:186 actions/newapplication.php:168
 msgid "Description is required."
 msgstr ""
@@ -1298,20 +949,10 @@ msgstr ""
 msgid "Source URL is too long."
 msgstr ""
 
-#: actions/editapplication.php:200 actions/newapplication.php:185
-#, fuzzy
-msgid "Source URL is not valid."
-msgstr "個人首頁位址錯誤"
-
 #: actions/editapplication.php:203 actions/newapplication.php:188
 msgid "Organization is required."
 msgstr ""
 
-#: actions/editapplication.php:206 actions/newapplication.php:191
-#, fuzzy
-msgid "Organization is too long (max 255 chars)."
-msgstr "地點過長(共255個字)"
-
 #: actions/editapplication.php:209 actions/newapplication.php:194
 msgid "Organization homepage is required."
 msgstr ""
@@ -1325,19 +966,14 @@ msgid "Callback URL is not valid."
 msgstr ""
 
 #: actions/editapplication.php:258
-#, fuzzy
 msgid "Could not update application."
-msgstr "無法更新使用者"
+msgstr "無法取消信箱確認"
 
 #: actions/editgroup.php:56
 #, php-format
 msgid "Edit %s group"
 msgstr ""
 
-#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-msgid "You must be logged in to create a group."
-msgstr ""
-
 #: actions/editgroup.php:107 actions/editgroup.php:172
 #: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
 msgid "You must be an admin to edit the group."
@@ -1348,23 +984,17 @@ msgid "Use this form to edit the group."
 msgstr ""
 
 #: actions/editgroup.php:205 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
 msgid "description is too long (max %d chars)."
 msgstr "地點過長(共255個字)"
 
 #: actions/editgroup.php:228 actions/newgroup.php:168
 #, php-format
 msgid "Invalid alias: \"%s\""
-msgstr ""
-
-#: actions/editgroup.php:258
-#, fuzzy
-msgid "Could not update group."
-msgstr "無法更新使用者"
+msgstr "尺寸錯誤"
 
 #. TRANS: Server exception thrown when creating group aliases failed.
 #: actions/editgroup.php:264 classes/User_group.php:514
-#, fuzzy
 msgid "Could not create aliases."
 msgstr "無法更新使用者"
 
@@ -1374,7 +1004,6 @@ msgstr ""
 
 #. TRANS: Title for e-mail settings.
 #: actions/emailsettings.php:61
-#, fuzzy
 msgid "Email settings"
 msgstr "使用者設定發生錯誤"
 
@@ -1385,19 +1014,6 @@ msgstr "使用者設定發生錯誤"
 msgid "Manage how you get email from %%site.name%%."
 msgstr ""
 
-#. TRANS: Form legend for e-mail settings form.
-#. TRANS: Field label for e-mail address input in e-mail settings form.
-#: actions/emailsettings.php:106 actions/emailsettings.php:132
-#, fuzzy
-msgid "Email address"
-msgstr "確認信箱"
-
-#. TRANS: Form note in e-mail settings form.
-#: actions/emailsettings.php:112
-#, fuzzy
-msgid "Current confirmed email address."
-msgstr "目前已確認的Jabber/Gtalk地址"
-
 #. TRANS: Button label to remove a confirmed e-mail address.
 #. TRANS: Button label for removing a set sender e-mail address to post notices from.
 #. TRANS: Button label to remove a confirmed IM address.
@@ -1410,26 +1026,6 @@ msgctxt "BUTTON"
 msgid "Remove"
 msgstr ""
 
-#: actions/emailsettings.php:122
-#, fuzzy
-msgid ""
-"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
-"a message with further instructions."
-msgstr ""
-"等待確認此信箱。看看你的Jabber/GTalk是否有訊息指示下一步動作。(你加入%s到你的"
-"好友清單了嗎?)"
-
-#. TRANS: Button label to cancel an e-mail address confirmation procedure.
-#. TRANS: Button label to cancel an IM address confirmation procedure.
-#. TRANS: Button label to cancel a SMS address confirmation procedure.
-#. TRANS: Button label
-#: actions/emailsettings.php:127 actions/imsettings.php:131
-#: actions/smssettings.php:137 lib/applicationeditform.php:357
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Cancel"
-msgstr "取消"
-
 #. TRANS: Instructions for e-mail address input form.
 #: actions/emailsettings.php:135
 msgid "Email address, like \"UserName@example.org\""
@@ -1504,47 +1100,17 @@ msgstr ""
 msgid "I want to post notices by email."
 msgstr ""
 
-#. TRANS: Checkbox label in e-mail preferences form.
-#: actions/emailsettings.php:219
-#, fuzzy
-msgid "Publish a MicroID for my email address."
-msgstr "請輸入暱稱或電子信箱"
-
 #. TRANS: Confirmation message for successful e-mail preferences save.
 #: actions/emailsettings.php:334
 msgid "Email preferences saved."
 msgstr ""
 
-#. TRANS: Message given saving e-mail address without having provided one.
-#: actions/emailsettings.php:353
-#, fuzzy
-msgid "No email address."
-msgstr "此信箱無效"
-
-#. TRANS: Message given saving e-mail address that cannot be normalised.
-#: actions/emailsettings.php:361
-#, fuzzy
-msgid "Cannot normalize that email address"
-msgstr "此JabberID錯誤"
-
 #. TRANS: Message given saving e-mail address that not valid.
 #: actions/emailsettings.php:366 actions/register.php:208
 #: actions/siteadminpanel.php:144
 msgid "Not a valid email address."
 msgstr "此信箱無效"
 
-#. TRANS: Message given saving e-mail address that is already set.
-#: actions/emailsettings.php:370
-#, fuzzy
-msgid "That is already your email address."
-msgstr "此信箱無效"
-
-#. TRANS: Message given saving e-mail address that is already set for another user.
-#: actions/emailsettings.php:374
-#, fuzzy
-msgid "That email address already belongs to another user."
-msgstr "此Jabber ID已有人使用"
-
 #. TRANS: Server error thrown on database error adding e-mail confirmation code.
 #. TRANS: Server error thrown on database error adding IM confirmation code.
 #. TRANS: Server error thrown on database error adding SMS confirmation code.
@@ -1553,72 +1119,16 @@ msgstr "此Jabber ID已有人使用"
 msgid "Couldn't insert confirmation code."
 msgstr "無法輸入確認碼"
 
-#. TRANS: Message given saving valid e-mail address that is to be confirmed.
-#: actions/emailsettings.php:398
-#, fuzzy
-msgid ""
-"A confirmation code was sent to the email address you added. Check your "
-"inbox (and spam box!) for the code and instructions on how to use it."
-msgstr "確認信已寄到你的線上即時通信箱。%s送給你得訊息要先經過你的認可。"
-
-#. TRANS: Message given canceling e-mail address confirmation that is not pending.
-#. TRANS: Message given canceling IM address confirmation that is not pending.
-#. TRANS: Message given canceling SMS phone number confirmation that is not pending.
-#: actions/emailsettings.php:419 actions/imsettings.php:383
-#: actions/smssettings.php:408
-#, fuzzy
-msgid "No pending confirmation to cancel."
-msgstr "無確認碼"
-
-#. TRANS: Message given canceling e-mail address confirmation for the wrong e-mail address.
-#: actions/emailsettings.php:424
-#, fuzzy
-msgid "That is the wrong email address."
-msgstr "請輸入暱稱或電子信箱"
-
 #. TRANS: Message given after successfully canceling e-mail address confirmation.
 #: actions/emailsettings.php:438
-#, fuzzy
 msgid "Email confirmation cancelled."
 msgstr "無確認碼"
 
-#. TRANS: Message given trying to remove an e-mail address that is not
-#. TRANS: registered for the active user.
-#: actions/emailsettings.php:458
-#, fuzzy
-msgid "That is not your email address."
-msgstr "請輸入暱稱或電子信箱"
-
-#. TRANS: Message given after successfully removing a registered e-mail address.
-#: actions/emailsettings.php:479
-#, fuzzy
-msgid "The email address was removed."
-msgstr "此電子信箱已註冊過了"
-
-#: actions/emailsettings.php:493 actions/smssettings.php:568
-#, fuzzy
-msgid "No incoming email address."
-msgstr "此信箱無效"
-
-#. TRANS: Server error thrown on database error removing incoming e-mail address.
-#. TRANS: Server error thrown on database error adding incoming e-mail address.
-#: actions/emailsettings.php:504 actions/emailsettings.php:528
-#: actions/smssettings.php:578 actions/smssettings.php:602
-#, fuzzy
-msgid "Couldn't update user record."
-msgstr "無法更新使用者"
-
 #. TRANS: Message given after successfully removing an incoming e-mail address.
 #: actions/emailsettings.php:508 actions/smssettings.php:581
 msgid "Incoming email address removed."
 msgstr ""
 
-#. TRANS: Message given after successfully adding an incoming e-mail address.
-#: actions/emailsettings.php:532 actions/smssettings.php:605
-#, fuzzy
-msgid "New incoming email address added."
-msgstr "此信箱無效"
-
 #: actions/favor.php:79
 msgid "This notice is already a favorite!"
 msgstr ""
@@ -1627,12 +1137,6 @@ msgstr ""
 msgid "Disfavor favorite"
 msgstr ""
 
-#: actions/favorited.php:65 lib/popularnoticesection.php:91
-#: lib/publicgroupnav.php:93
-#, fuzzy
-msgid "Popular notices"
-msgstr "無此通知"
-
 #: actions/favorited.php:67
 #, php-format
 msgid "Popular notices, page %d"
@@ -1686,22 +1190,20 @@ msgid "A selection of some great users on %s"
 msgstr ""
 
 #: actions/file.php:34
-#, fuzzy
 msgid "No notice ID."
 msgstr "無此通知"
 
 #: actions/file.php:38
-#, fuzzy
 msgid "No notice."
 msgstr "無此通知"
 
 #: actions/file.php:42
 msgid "No attachments."
-msgstr ""
+msgstr "無此通知"
 
 #: actions/file.php:51
 msgid "No uploaded attachments."
-msgstr ""
+msgstr "無此通知"
 
 #: actions/finishremotesubscribe.php:69
 msgid "Not expecting this response!"
@@ -1711,11 +1213,6 @@ msgstr ""
 msgid "User being listened to does not exist."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
-#, fuzzy
-msgid "You can use the local subscription!"
-msgstr "無法新增訂閱"
-
 #: actions/finishremotesubscribe.php:99
 msgid "That user has blocked you from subscribing."
 msgstr ""
@@ -1732,68 +1229,28 @@ msgstr ""
 msgid "Remote service uses unknown version of OMB protocol."
 msgstr ""
 
-#: actions/finishremotesubscribe.php:138
-#, fuzzy
-msgid "Error updating remote profile."
-msgstr "更新遠端個人資料發生錯誤"
-
-#: actions/getfile.php:79
-#, fuzzy
-msgid "No such file."
-msgstr "無此通知"
-
 #: actions/getfile.php:83
-#, fuzzy
 msgid "Cannot read file."
 msgstr "無法儲存個人資料"
 
-#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
-msgid "Invalid role."
-msgstr "尺寸錯誤"
-
 #: actions/grantrole.php:66 actions/revokerole.php:66
 msgid "This role is reserved and cannot be set."
 msgstr ""
 
-#: actions/grantrole.php:75
-msgid "You cannot grant user roles on this site."
-msgstr ""
-
 #: actions/grantrole.php:82
 msgid "User already has this role."
 msgstr ""
 
-#: actions/groupblock.php:71 actions/groupunblock.php:71
-#: actions/makeadmin.php:71 actions/subedit.php:46
-#: lib/profileformaction.php:79
-msgid "No profile specified."
-msgstr ""
-
 #: actions/groupblock.php:76 actions/groupunblock.php:76
 #: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
 #: actions/unsubscribe.php:84 lib/profileformaction.php:86
 msgid "No profile with that ID."
 msgstr ""
 
-#: actions/groupblock.php:81 actions/groupunblock.php:81
-#: actions/makeadmin.php:81
-msgid "No group specified."
-msgstr ""
-
 #: actions/groupblock.php:91
 msgid "Only an admin can block group members."
 msgstr ""
 
-#: actions/groupblock.php:95
-msgid "User is already blocked from group."
-msgstr ""
-
-#: actions/groupblock.php:100
-#, fuzzy
-msgid "User is not a member of group."
-msgstr "無法連結到伺服器:%s"
-
 #: actions/groupblock.php:134 actions/groupmembers.php:360
 msgid "Block user from group"
 msgstr ""
@@ -1806,11 +1263,6 @@ msgid ""
 "the group in the future."
 msgstr ""
 
-#. TRANS: Submit button title for 'No' when blocking a user from a group.
-#: actions/groupblock.php:182
-msgid "Do not block this user from this group"
-msgstr ""
-
 #. TRANS: Submit button title for 'Yes' when blocking a user from a group.
 #: actions/groupblock.php:189
 msgid "Block this user from this group"
@@ -1821,13 +1273,8 @@ msgid "Database error blocking user from group."
 msgstr ""
 
 #: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
 msgid "No ID."
-msgstr "查無此Jabber ID"
-
-#: actions/groupdesignsettings.php:68
-msgid "You must be logged in to edit a group."
-msgstr ""
+msgstr "無此通知"
 
 #: actions/groupdesignsettings.php:144
 msgid "Group design"
@@ -1839,20 +1286,10 @@ msgid ""
 "palette of your choice."
 msgstr ""
 
-#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
-#: lib/designsettings.php:391 lib/designsettings.php:413
-#, fuzzy
-msgid "Couldn't update your design."
-msgstr "無法更新使用者"
-
 #: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
 msgid "Design preferences saved."
 msgstr ""
 
-#: actions/grouplogo.php:142 actions/grouplogo.php:195
-msgid "Group logo"
-msgstr ""
-
 #: actions/grouplogo.php:153
 #, php-format
 msgid ""
@@ -1863,21 +1300,6 @@ msgstr ""
 msgid "Pick a square area of the image to be the logo."
 msgstr ""
 
-#: actions/grouplogo.php:399
-#, fuzzy
-msgid "Logo updated."
-msgstr "更新個人圖像"
-
-#: actions/grouplogo.php:401
-#, fuzzy
-msgid "Failed updating logo."
-msgstr "無法上傳個人圖像"
-
-#: actions/groupmembers.php:100 lib/groupnav.php:92
-#, php-format
-msgid "%s group members"
-msgstr ""
-
 #: actions/groupmembers.php:103
 #, php-format
 msgid "%1$s group members, page %2$d"
@@ -1957,11 +1379,6 @@ msgstr ""
 msgid "Group search"
 msgstr ""
 
-#: actions/groupsearch.php:79 actions/noticesearch.php:117
-#: actions/peoplesearch.php:83
-msgid "No results."
-msgstr ""
-
 #: actions/groupsearch.php:82
 #, php-format
 msgid ""
@@ -1984,14 +1401,8 @@ msgstr ""
 msgid "User is not blocked from group."
 msgstr ""
 
-#: actions/groupunblock.php:128 actions/unblock.php:86
-#, fuzzy
-msgid "Error removing the block."
-msgstr "儲存使用者發生錯誤"
-
 #. TRANS: Title for instance messaging settings.
 #: actions/imsettings.php:60
-#, fuzzy
 msgid "IM settings"
 msgstr "使用者設定發生錯誤"
 
@@ -2014,7 +1425,7 @@ msgstr ""
 #. TRANS: Field label for IM address input in IM settings form.
 #: actions/imsettings.php:106 actions/imsettings.php:136
 msgid "IM address"
-msgstr ""
+msgstr "確認"
 
 #: actions/imsettings.php:113
 msgid "Current confirmed Jabber/GTalk address."
@@ -2060,12 +1471,6 @@ msgstr ""
 msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
 msgstr ""
 
-#. TRANS: Checkbox label in IM preferences form.
-#: actions/imsettings.php:179
-#, fuzzy
-msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr "目前已確認的Jabber/Gtalk地址"
-
 #. TRANS: Confirmation message for successful IM preferences save.
 #: actions/imsettings.php:287 actions/othersettings.php:180
 msgid "Preferences saved."
@@ -2086,12 +1491,6 @@ msgstr "此JabberID錯誤"
 msgid "Not a valid Jabber ID"
 msgstr "此JabberID無效"
 
-#. TRANS: Message given saving IM address that is already set.
-#: actions/imsettings.php:326
-#, fuzzy
-msgid "That is already your Jabber ID."
-msgstr "此JabberID無效"
-
 #. TRANS: Message given saving IM address that is already set for another user.
 #: actions/imsettings.php:330
 msgid "Jabber ID already belongs to another user."
@@ -2111,25 +1510,11 @@ msgstr "確認信已寄到你的線上即時通信箱。%s送給你得訊息要
 msgid "That is the wrong IM address."
 msgstr ""
 
-#. TRANS: Server error thrown on database error canceling IM address confirmation.
-#: actions/imsettings.php:397
-#, fuzzy
-msgid "Couldn't delete IM confirmation."
-msgstr "無法取消信箱確認"
-
 #. TRANS: Message given after successfully canceling IM address confirmation.
 #: actions/imsettings.php:402
-#, fuzzy
 msgid "IM confirmation cancelled."
 msgstr "無確認碼"
 
-#. TRANS: Message given trying to remove an IM address that is not
-#. TRANS: registered for the active user.
-#: actions/imsettings.php:424
-#, fuzzy
-msgid "That is not your Jabber ID."
-msgstr "查無此Jabber ID"
-
 #. TRANS: Message given after successfully removing a registered IM address.
 #: actions/imsettings.php:447
 msgid "The IM address was removed."
@@ -2153,16 +1538,6 @@ msgstr ""
 msgid "Invites have been disabled."
 msgstr ""
 
-#: actions/invite.php:41
-#, php-format
-msgid "You must be logged in to invite other users to use %s."
-msgstr ""
-
-#: actions/invite.php:72
-#, fuzzy, php-format
-msgid "Invalid email address: %s"
-msgstr "此信箱無效"
-
 #: actions/invite.php:110
 msgid "Invitation(s) sent"
 msgstr ""
@@ -2171,14 +1546,9 @@ msgstr ""
 msgid "Invite new users"
 msgstr ""
 
-#: actions/invite.php:128
-#, fuzzy
-msgid "You are already subscribed to these users:"
-msgstr "此帳號已註冊"
-
 #. TRANS: Whois output.
 #. TRANS: %1$s nickname of the queried user, %2$s is their profile URL.
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:414
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:430
 #, php-format
 msgid "%1$s (%2$s)"
 msgstr ""
@@ -2203,11 +1573,6 @@ msgid ""
 "Use this form to invite your friends and colleagues to use this service."
 msgstr ""
 
-#: actions/invite.php:187
-#, fuzzy
-msgid "Email addresses"
-msgstr "此電子信箱已註冊過了"
-
 #: actions/invite.php:189
 msgid "Addresses of friends to invite (one per line)"
 msgstr ""
@@ -2226,12 +1591,6 @@ msgctxt "BUTTON"
 msgid "Send"
 msgstr ""
 
-#. TRANS: Subject for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
-#: actions/invite.php:228
-#, fuzzy, php-format
-msgid "%1$s has invited you to join them on %2$s"
-msgstr "現在%1$s在%2$s成為你的粉絲囉"
-
 #. TRANS: Body text for invitation email. Note that 'them' is correct as a gender-neutral singular 3rd-person pronoun in English.
 #: actions/invite.php:231
 #, php-format
@@ -2261,41 +1620,14 @@ msgid ""
 "If not, you can ignore this message. Thanks for your patience and your "
 "time.\n"
 "\n"
-"Sincerely, %2$s\n"
-msgstr ""
-
-#: actions/joingroup.php:60
-msgid "You must be logged in to join a group."
+"Sincerely, %2$s\n"
 msgstr ""
 
-#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
-msgid "No nickname or ID."
-msgstr "無暱稱"
-
-#. TRANS: Message given having added a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/joingroup.php:141 lib/command.php:346
+#: actions/joingroup.php:141
 #, php-format
 msgid "%1$s joined group %2$s"
 msgstr ""
 
-#: actions/leavegroup.php:60
-msgid "You must be logged in to leave a group."
-msgstr ""
-
-#: actions/leavegroup.php:100 lib/command.php:373
-#, fuzzy
-msgid "You are not a member of that group."
-msgstr "無法連結到伺服器:%s"
-
-#. TRANS: Message given having removed a user from a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: actions/leavegroup.php:137 lib/command.php:392
-#, fuzzy, php-format
-msgid "%1$s left group %2$s"
-msgstr "%1$s的狀態是%2$s"
-
 #: actions/login.php:102 actions/otp.php:62 actions/register.php:144
 msgid "Already logged in."
 msgstr "已登入"
@@ -2316,11 +1648,6 @@ msgstr "登入"
 msgid "Login to site"
 msgstr ""
 
-#: actions/login.php:258 actions/register.php:485
-#, fuzzy
-msgid "Remember me"
-msgstr "何時加入會員的呢?"
-
 #: actions/login.php:259 actions/register.php:487
 msgid "Automatically login in the future; not for shared computers!"
 msgstr "未來在同一部電腦自動登入"
@@ -2336,7 +1663,6 @@ msgid ""
 msgstr "為安全起見,請先重新輸入你的使用者名稱與密碼再更改設定。"
 
 #: actions/login.php:292
-#, fuzzy
 msgid "Login with your username and password."
 msgstr "使用者名稱或密碼錯誤"
 
@@ -2360,23 +1686,10 @@ msgstr ""
 msgid "Can't get membership record for %1$s in group %2$s."
 msgstr ""
 
-#: actions/makeadmin.php:146
-#, php-format
-msgid "Can't make %1$s an admin for group %2$s."
-msgstr ""
-
 #: actions/microsummary.php:69
 msgid "No current status."
 msgstr ""
 
-#: actions/newapplication.php:52
-msgid "New Application"
-msgstr ""
-
-#: actions/newapplication.php:64
-msgid "You must be logged in to register an application."
-msgstr ""
-
 #: actions/newapplication.php:143
 msgid "Use this form to register a new application."
 msgstr ""
@@ -2386,14 +1699,9 @@ msgid "Source URL is required."
 msgstr ""
 
 #: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
 msgid "Could not create application."
 msgstr "無法取消信箱確認"
 
-#: actions/newgroup.php:53
-msgid "New group"
-msgstr ""
-
 #: actions/newgroup.php:110
 msgid "Use this form to create a new group."
 msgstr ""
@@ -2402,21 +1710,15 @@ msgstr ""
 msgid "New message"
 msgstr ""
 
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:481
-#, fuzzy
-msgid "You can't send a message to this user."
-msgstr "無法連結到伺服器:%s"
-
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:463
-#: lib/command.php:555
+#. TRANS: Command exception text shown when trying to send a direct message to another user without content.
+#. TRANS: Command exception text shown when trying to reply to a notice without providing content for the reply.
+#: actions/newmessage.php:144 actions/newnotice.php:138 lib/command.php:481
+#: lib/command.php:582
 msgid "No content!"
 msgstr "無內容"
 
-#: actions/newmessage.php:158
-msgid "No recipient specified."
-msgstr ""
-
-#: actions/newmessage.php:164 lib/command.php:484
+#. TRANS: Error text shown when trying to send a direct message to self.
+#: actions/newmessage.php:164 lib/command.php:506
 msgid ""
 "Don't send a message to yourself; just say it to yourself quietly instead."
 msgstr ""
@@ -2425,12 +1727,14 @@ msgstr ""
 msgid "Message sent"
 msgstr ""
 
-#: actions/newmessage.php:185
+#. TRANS: Message given have sent a direct message to another user.
+#. TRANS: %s is the name of the other user.
+#: actions/newmessage.php:185 lib/command.php:514
 #, php-format
 msgid "Direct message to %s sent."
 msgstr ""
 
-#: actions/newmessage.php:210 actions/newnotice.php:251 lib/channel.php:189
+#: actions/newmessage.php:210 actions/newnotice.php:261 lib/channel.php:189
 msgid "Ajax Error"
 msgstr ""
 
@@ -2438,10 +1742,6 @@ msgstr ""
 msgid "New notice"
 msgstr "新訊息"
 
-#: actions/newnotice.php:217
-msgid "Notice posted"
-msgstr ""
-
 #: actions/noticesearch.php:68
 #, php-format
 msgid ""
@@ -2495,34 +1795,17 @@ msgstr ""
 msgid "Nudge sent!"
 msgstr ""
 
-#: actions/oauthappssettings.php:59
-msgid "You must be logged in to list your applications."
-msgstr ""
-
-#: actions/oauthappssettings.php:74
-msgid "OAuth applications"
-msgstr ""
-
 #: actions/oauthappssettings.php:85
 msgid "Applications you have registered"
 msgstr ""
 
-#: actions/oauthappssettings.php:135
-#, php-format
-msgid "You have not registered any applications yet."
-msgstr ""
-
-#: actions/oauthconnectionssettings.php:72
-msgid "Connected applications"
-msgstr ""
-
 #: actions/oauthconnectionssettings.php:83
 msgid "You have allowed the following applications to access you account."
 msgstr ""
 
 #: actions/oauthconnectionssettings.php:175
 msgid "You are not a user of that application."
-msgstr ""
+msgstr "無法取消信箱確認"
 
 #: actions/oauthconnectionssettings.php:186
 #, php-format
@@ -2539,7 +1822,7 @@ msgstr ""
 
 #: actions/oembed.php:80 actions/shownotice.php:100
 msgid "Notice has no profile."
-msgstr ""
+msgstr "新的更人資料輸入錯誤"
 
 #: actions/oembed.php:87 actions/shownotice.php:175
 #, php-format
@@ -2559,8 +1842,8 @@ msgid "Only %s URLs over plain HTTP please."
 msgstr ""
 
 #. TRANS: Client error on an API request with an unsupported data format.
-#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1204
-#: lib/apiaction.php:1232 lib/apiaction.php:1355
+#: actions/oembed.php:184 actions/oembed.php:203 lib/apiaction.php:1209
+#: lib/apiaction.php:1237 lib/apiaction.php:1360
 msgid "Not a supported data format."
 msgstr ""
 
@@ -2568,12 +1851,7 @@ msgstr ""
 msgid "People Search"
 msgstr ""
 
-#: actions/opensearch.php:67
-msgid "Notice Search"
-msgstr ""
-
 #: actions/othersettings.php:60
-#, fuzzy
 msgid "Other settings"
 msgstr "使用者設定發生錯誤"
 
@@ -2593,36 +1871,10 @@ msgstr ""
 msgid "Automatic shortening service to use."
 msgstr ""
 
-#: actions/othersettings.php:122
-msgid "View profile designs"
-msgstr ""
-
 #: actions/othersettings.php:123
 msgid "Show or hide profile designs."
 msgstr ""
 
-#: actions/othersettings.php:153
-#, fuzzy
-msgid "URL shortening service is too long (max 50 chars)."
-msgstr "地點過長(共255個字)"
-
-#: actions/otp.php:69
-msgid "No user ID specified."
-msgstr ""
-
-#: actions/otp.php:83
-msgid "No login token specified."
-msgstr ""
-
-#: actions/otp.php:90
-#, fuzzy
-msgid "No login token requested."
-msgstr "無確認請求"
-
-#: actions/otp.php:95
-msgid "Invalid login token specified."
-msgstr ""
-
 #: actions/otp.php:104
 msgid "Login token expired."
 msgstr ""
@@ -2645,20 +1897,10 @@ msgstr ""
 msgid "Change password"
 msgstr "更改密碼"
 
-#: actions/passwordsettings.php:69
-#, fuzzy
-msgid "Change your password."
-msgstr "更改密碼"
-
 #: actions/passwordsettings.php:96 actions/recoverpassword.php:231
 msgid "Password change"
 msgstr ""
 
-#: actions/passwordsettings.php:104
-#, fuzzy
-msgid "Old password"
-msgstr "新密碼"
-
 #: actions/passwordsettings.php:108 actions/recoverpassword.php:235
 msgid "New password"
 msgstr "新密碼"
@@ -2680,11 +1922,6 @@ msgstr ""
 msgid "Change"
 msgstr "更改"
 
-#: actions/passwordsettings.php:154 actions/register.php:237
-#, fuzzy
-msgid "Password must be 6 or more characters."
-msgstr "6個以上字元"
-
 #: actions/passwordsettings.php:157 actions/register.php:240
 msgid "Passwords don't match."
 msgstr ""
@@ -2719,11 +1956,6 @@ msgstr ""
 msgid "Theme directory not readable: %s."
 msgstr ""
 
-#: actions/pathsadminpanel.php:163
-#, php-format
-msgid "Avatar directory not writable: %s."
-msgstr ""
-
 #: actions/pathsadminpanel.php:169
 #, php-format
 msgid "Background directory not writable: %s."
@@ -2738,14 +1970,6 @@ msgstr ""
 msgid "Invalid SSL server. The maximum length is 255 characters."
 msgstr ""
 
-#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
-msgid "Site"
-msgstr ""
-
-#: actions/pathsadminpanel.php:238
-msgid "Server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:238
 msgid "Site's server hostname."
 msgstr ""
@@ -2778,53 +2002,26 @@ msgstr ""
 msgid "Theme"
 msgstr ""
 
-#: actions/pathsadminpanel.php:264
-msgid "Theme server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:268
 msgid "Theme path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:272
-msgid "Theme directory"
-msgstr ""
-
-#: actions/pathsadminpanel.php:279
-#, fuzzy
-msgid "Avatars"
-msgstr "個人圖像"
-
 #: actions/pathsadminpanel.php:284
-#, fuzzy
 msgid "Avatar server"
 msgstr "個人圖像"
 
-#: actions/pathsadminpanel.php:288
-#, fuzzy
-msgid "Avatar path"
-msgstr "更新個人圖像"
-
 #: actions/pathsadminpanel.php:292
 msgid "Avatar directory"
-msgstr ""
+msgstr "個人圖像"
 
 #: actions/pathsadminpanel.php:301
 msgid "Backgrounds"
 msgstr ""
 
-#: actions/pathsadminpanel.php:305
-msgid "Background server"
-msgstr ""
-
 #: actions/pathsadminpanel.php:309
 msgid "Background path"
 msgstr ""
 
-#: actions/pathsadminpanel.php:313
-msgid "Background directory"
-msgstr ""
-
 #: actions/pathsadminpanel.php:320
 msgid "SSL"
 msgstr ""
@@ -2833,10 +2030,6 @@ msgstr ""
 msgid "Never"
 msgstr ""
 
-#: actions/pathsadminpanel.php:324
-msgid "Sometimes"
-msgstr ""
-
 #: actions/pathsadminpanel.php:325
 msgid "Always"
 msgstr ""
@@ -2851,7 +2044,7 @@ msgstr ""
 
 #: actions/pathsadminpanel.php:335
 msgid "SSL server"
-msgstr ""
+msgstr "個人圖像"
 
 #: actions/pathsadminpanel.php:336
 msgid "Server to direct SSL requests to"
@@ -2872,31 +2065,16 @@ msgstr ""
 msgid "People search"
 msgstr ""
 
-#: actions/peopletag.php:68
-#, fuzzy, php-format
-msgid "Not a valid people tag: %s."
-msgstr "此信箱無效"
-
 #: actions/peopletag.php:142
 #, php-format
 msgid "Users self-tagged with %1$s - page %2$d"
 msgstr ""
 
-#: actions/postnotice.php:95
-#, fuzzy
-msgid "Invalid notice content."
-msgstr "尺寸錯誤"
-
 #: actions/postnotice.php:101
 #, php-format
 msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
 msgstr ""
 
-#: actions/profilesettings.php:60
-#, fuzzy
-msgid "Profile settings"
-msgstr "使用者設定發生錯誤"
-
 #: actions/profilesettings.php:71
 msgid ""
 "You can update your personal profile info here so people know more about you."
@@ -2987,43 +2165,23 @@ msgid ""
 msgstr ""
 
 #: actions/profilesettings.php:228 actions/register.php:230
-#, fuzzy, php-format
+#, php-format
 msgid "Bio is too long (max %d chars)."
-msgstr "地點過長(共255個字)"
+msgstr "地點過長(共%d個字)"
 
 #: actions/profilesettings.php:235 actions/siteadminpanel.php:151
 msgid "Timezone not selected."
 msgstr ""
 
-#: actions/profilesettings.php:241
-#, fuzzy
-msgid "Language is too long (max 50 chars)."
-msgstr "地點過長(共255個字)"
-
 #: actions/profilesettings.php:253 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
 msgid "Invalid tag: \"%s\""
 msgstr "尺寸錯誤"
 
-#: actions/profilesettings.php:306
-#, fuzzy
-msgid "Couldn't update user for autosubscribe."
-msgstr "無法更新使用者"
-
-#: actions/profilesettings.php:363
-#, fuzzy
-msgid "Couldn't save location prefs."
-msgstr "無法儲存個人資料"
-
 #: actions/profilesettings.php:375
 msgid "Couldn't save profile."
 msgstr "無法儲存個人資料"
 
-#: actions/profilesettings.php:383
-#, fuzzy
-msgid "Couldn't save tags."
-msgstr "無法儲存個人資料"
-
 #. TRANS: Message after successful saving of administrative settings.
 #: actions/profilesettings.php:391 lib/adminpanelaction.php:141
 msgid "Settings saved."
@@ -3034,11 +2192,6 @@ msgstr ""
 msgid "Beyond the page limit (%s)."
 msgstr ""
 
-#: actions/public.php:92
-#, fuzzy
-msgid "Could not retrieve public stream."
-msgstr "無法更新使用者"
-
 #: actions/public.php:130
 #, php-format
 msgid "Public timeline, page %d"
@@ -3119,15 +2272,6 @@ msgid ""
 "one!"
 msgstr ""
 
-#: actions/publictagcloud.php:134
-msgid "Tag cloud"
-msgstr ""
-
-#: actions/recoverpassword.php:36
-#, fuzzy
-msgid "You are already logged in!"
-msgstr "已登入"
-
 #: actions/recoverpassword.php:62
 msgid "No such recovery code."
 msgstr "無此恢復碼"
@@ -3148,18 +2292,6 @@ msgstr "確認碼發生錯誤"
 msgid "This confirmation code is too old. Please start again."
 msgstr ""
 
-#: actions/recoverpassword.php:111
-#, fuzzy
-msgid "Could not update user with confirmed email address."
-msgstr "無法更新使用者"
-
-#: actions/recoverpassword.php:152
-#, fuzzy
-msgid ""
-"If you have forgotten or lost your password, you can get a new one sent to "
-"the email address you have stored in your account."
-msgstr "我們已寄出一封信到你帳號中的信箱,告訴你如何取回你的密碼。"
-
 #: actions/recoverpassword.php:158
 msgid "You have been identified. Enter a new password below. "
 msgstr ""
@@ -3168,11 +2300,6 @@ msgstr ""
 msgid "Password recovery"
 msgstr ""
 
-#: actions/recoverpassword.php:191
-#, fuzzy
-msgid "Nickname or email address"
-msgstr "請輸入暱稱或電子信箱"
-
 #: actions/recoverpassword.php:193
 msgid "Your nickname on this server, or your registered email address."
 msgstr ""
@@ -3181,16 +2308,6 @@ msgstr ""
 msgid "Recover"
 msgstr ""
 
-#: actions/recoverpassword.php:208
-#, fuzzy
-msgid "Reset password"
-msgstr "新密碼"
-
-#: actions/recoverpassword.php:209
-#, fuzzy
-msgid "Recover password"
-msgstr "新密碼"
-
 #: actions/recoverpassword.php:210 actions/recoverpassword.php:335
 msgid "Password recovery requested"
 msgstr ""
@@ -3211,11 +2328,6 @@ msgstr ""
 msgid "Enter a nickname or email address."
 msgstr "請輸入暱稱或電子信箱"
 
-#: actions/recoverpassword.php:282
-#, fuzzy
-msgid "No user with that email address or username."
-msgstr "查無此使用者所註冊的信箱"
-
 #: actions/recoverpassword.php:299
 msgid "No registered email address for that user."
 msgstr "查無此使用者所註冊的信箱"
@@ -3254,11 +2366,6 @@ msgstr "新密碼已儲存成功。你已登入。"
 msgid "Sorry, only invited people can register."
 msgstr ""
 
-#: actions/register.php:99
-#, fuzzy
-msgid "Sorry, invalid invitation code."
-msgstr "確認碼發生錯誤"
-
 #: actions/register.php:119
 msgid "Registration successful"
 msgstr ""
@@ -3289,16 +2396,6 @@ msgid ""
 "link up to friends and colleagues. "
 msgstr ""
 
-#: actions/register.php:432
-#, fuzzy
-msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
-msgstr "1-64個小寫英文字母或數字,勿加標點符號或空格"
-
-#: actions/register.php:437
-#, fuzzy
-msgid "6 or more characters. Required."
-msgstr "6個以上字元"
-
 #: actions/register.php:441
 msgid "Same as password above. Required."
 msgstr ""
@@ -3379,20 +2476,10 @@ msgid ""
 "microblogging site](%%doc.openmublog%%),  enter your profile URL below."
 msgstr ""
 
-#: actions/remotesubscribe.php:112
-#, fuzzy
-msgid "Remote subscribe"
-msgstr "此帳號已註冊"
-
 #: actions/remotesubscribe.php:124
 msgid "Subscribe to a remote user"
 msgstr ""
 
-#: actions/remotesubscribe.php:129
-#, fuzzy
-msgid "User nickname"
-msgstr "無暱稱"
-
 #: actions/remotesubscribe.php:130
 msgid "Nickname of the user you want to follow"
 msgstr "你想成為誰的粉絲呢?請輸入他/她的暱稱。"
@@ -3405,12 +2492,6 @@ msgstr ""
 msgid "URL of your profile on another compatible microblogging service"
 msgstr ""
 
-#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:406
-#, fuzzy
-msgid "Subscribe"
-msgstr "此帳號已註冊"
-
 #: actions/remotesubscribe.php:159
 msgid "Invalid profile URL (bad format)"
 msgstr "個人資料連結無效(格式錯誤)"
@@ -3433,15 +2514,11 @@ msgstr ""
 
 #: actions/repeat.php:64 actions/repeat.php:71
 msgid "No notice specified."
-msgstr ""
-
-#: actions/repeat.php:76
-msgid "You can't repeat your own notice."
-msgstr ""
+msgstr "無此通知"
 
 #: actions/repeat.php:90
 msgid "You already repeated that notice."
-msgstr ""
+msgstr "此Jabber ID已有人使用"
 
 #: actions/repeat.php:114 lib/noticelist.php:676
 msgid "Repeated"
@@ -3515,10 +2592,6 @@ msgstr ""
 msgid "StatusNet"
 msgstr ""
 
-#: actions/sandbox.php:65 actions/unsandbox.php:65
-msgid "You cannot sandbox users on this site."
-msgstr ""
-
 #: actions/sandbox.php:72
 msgid "User is already sandboxed."
 msgstr ""
@@ -3552,40 +2625,18 @@ msgstr ""
 #: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
 #: actions/useradminpanel.php:294
 msgid "Save site settings"
-msgstr ""
-
-#: actions/showapplication.php:82
-msgid "You must be logged in to view an application."
-msgstr ""
-
-#: actions/showapplication.php:157
-msgid "Application profile"
-msgstr ""
+msgstr "使用者設定發生錯誤"
 
 #. TRANS: Form input field label for application icon.
 #: actions/showapplication.php:159 lib/applicationeditform.php:182
 msgid "Icon"
 msgstr ""
 
-#. TRANS: Form input field label for application name.
-#: actions/showapplication.php:169 actions/version.php:197
-#: lib/applicationeditform.php:199
-#, fuzzy
-msgid "Name"
-msgstr "暱稱"
-
 #. TRANS: Form input field label.
 #: actions/showapplication.php:178 lib/applicationeditform.php:235
 msgid "Organization"
 msgstr ""
 
-#. TRANS: Form input field label.
-#: actions/showapplication.php:187 actions/version.php:200
-#: lib/applicationeditform.php:216 lib/groupeditform.php:172
-#, fuzzy
-msgid "Description"
-msgstr "所有訂閱"
-
 #: actions/showapplication.php:192 actions/showgroup.php:436
 #: lib/profileaction.php:187
 msgid "Statistics"
@@ -3644,9 +2695,8 @@ msgid "%1$s's favorite notices, page %2$d"
 msgstr ""
 
 #: actions/showfavorites.php:132
-#, fuzzy
 msgid "Could not retrieve favorite notices."
-msgstr "無法儲存個人資料"
+msgstr "無法更新使用者"
 
 #: actions/showfavorites.php:171
 #, php-format
@@ -3688,38 +2738,20 @@ msgstr ""
 msgid "This is a way to share what you like."
 msgstr ""
 
-#: actions/showgroup.php:82 lib/groupnav.php:86
-#, php-format
-msgid "%s group"
-msgstr ""
-
 #: actions/showgroup.php:84
 #, php-format
 msgid "%1$s group, page %2$d"
 msgstr ""
 
-#: actions/showgroup.php:227
-msgid "Group profile"
-msgstr ""
-
 #: actions/showgroup.php:272 actions/tagother.php:118
 #: actions/userauthorization.php:175 lib/userprofile.php:178
 msgid "URL"
 msgstr ""
 
-#: actions/showgroup.php:283 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:195
-msgid "Note"
-msgstr ""
-
 #: actions/showgroup.php:293 lib/groupeditform.php:184
 msgid "Aliases"
 msgstr ""
 
-#: actions/showgroup.php:302
-msgid "Group actions"
-msgstr ""
-
 #: actions/showgroup.php:338
 #, php-format
 msgid "Notice feed for %s group (RSS 1.0)"
@@ -3740,11 +2772,6 @@ msgstr ""
 msgid "FOAF for %s group"
 msgstr ""
 
-#: actions/showgroup.php:393 actions/showgroup.php:445 lib/groupnav.php:91
-#, fuzzy
-msgid "Members"
-msgstr "何時加入會員的呢?"
-
 #: actions/showgroup.php:398 lib/profileaction.php:117
 #: lib/profileaction.php:152 lib/profileaction.php:255 lib/section.php:95
 #: lib/subscriptionlist.php:127 lib/tagcloudsection.php:71
@@ -3782,11 +2809,6 @@ msgstr ""
 msgid "Admins"
 msgstr ""
 
-#: actions/showmessage.php:81
-#, fuzzy
-msgid "No such message."
-msgstr "無此使用者"
-
 #: actions/showmessage.php:98
 msgid "Only the sender and recipient may read this message."
 msgstr ""
@@ -3801,10 +2823,6 @@ msgstr ""
 msgid "Message from %1$s on %2$s"
 msgstr ""
 
-#: actions/shownotice.php:90
-msgid "Notice deleted."
-msgstr ""
-
 #: actions/showstream.php:73
 #, php-format
 msgid " tagged %s"
@@ -3880,10 +2898,6 @@ msgstr ""
 msgid "Repeat of %s"
 msgstr ""
 
-#: actions/silence.php:65 actions/unsilence.php:65
-msgid "You cannot silence users on this site."
-msgstr ""
-
 #: actions/silence.php:72
 msgid "User is already silenced."
 msgstr ""
@@ -3896,11 +2910,6 @@ msgstr ""
 msgid "Site name must have non-zero length."
 msgstr ""
 
-#: actions/siteadminpanel.php:141
-#, fuzzy
-msgid "You must have a valid contact email address."
-msgstr "此信箱無效"
-
 #: actions/siteadminpanel.php:159
 #, php-format
 msgid "Unknown language \"%s\"."
@@ -3942,16 +2951,6 @@ msgstr ""
 msgid "URL used for credits link in footer of each page"
 msgstr ""
 
-#: actions/siteadminpanel.php:239
-#, fuzzy
-msgid "Contact email address for your site"
-msgstr "查無此使用者所註冊的信箱"
-
-#: actions/siteadminpanel.php:245
-#, fuzzy
-msgid "Local"
-msgstr "地點"
-
 #: actions/siteadminpanel.php:256
 msgid "Default timezone"
 msgstr ""
@@ -3988,41 +2987,22 @@ msgstr ""
 msgid "How long users must wait (in seconds) to post the same thing again."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
-msgid "Site Notice"
-msgstr "新訊息"
-
 #: actions/sitenoticeadminpanel.php:67
 msgid "Edit site-wide message"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:103
-msgid "Unable to save site notice."
-msgstr ""
-
 #: actions/sitenoticeadminpanel.php:113
 msgid "Max length for the site-wide notice is 255 chars."
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
-msgid "Site notice text"
-msgstr "新訊息"
-
 #: actions/sitenoticeadminpanel.php:178
 msgid "Site-wide notice text (255 chars max; HTML okay)"
 msgstr ""
 
-#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
-msgid "Save site notice"
-msgstr "新訊息"
-
 #. TRANS: Title for SMS settings.
 #: actions/smssettings.php:59
 msgid "SMS settings"
-msgstr ""
+msgstr "使用者設定發生錯誤"
 
 #. TRANS: SMS settings page instructions.
 #. TRANS: %%site.name%% is the name of the site.
@@ -4039,7 +3019,7 @@ msgstr ""
 #. TRANS: Form legend for SMS settings form.
 #: actions/smssettings.php:111
 msgid "SMS address"
-msgstr ""
+msgstr "確認"
 
 #. TRANS: Form guide in SMS settings form.
 #: actions/smssettings.php:120
@@ -4051,35 +3031,16 @@ msgstr ""
 msgid "Awaiting confirmation on this phone number."
 msgstr ""
 
-#. TRANS: Field label for SMS address input in SMS settings form.
-#: actions/smssettings.php:142
-#, fuzzy
-msgid "Confirmation code"
-msgstr "無確認碼"
-
 #. TRANS: Form field instructions in SMS settings form.
 #: actions/smssettings.php:144
 msgid "Enter the code you received on your phone."
 msgstr ""
 
-#. TRANS: Button label to confirm SMS confirmation code in SMS settings.
-#: actions/smssettings.php:148
-#, fuzzy
-msgctxt "BUTTON"
-msgid "Confirm"
-msgstr "確認"
-
 #. TRANS: Field label for SMS phone number input in SMS settings form.
 #: actions/smssettings.php:153
 msgid "SMS phone number"
 msgstr ""
 
-#. TRANS: SMS phone number input field instructions in SMS settings form.
-#: actions/smssettings.php:156
-#, fuzzy
-msgid "Phone number, no punctuation or spaces, with area code"
-msgstr "1-64個小寫英文字母或數字,勿加標點符號或空格"
-
 #. TRANS: Form legend for SMS preferences form.
 #: actions/smssettings.php:195
 msgid "SMS preferences"
@@ -4097,45 +3058,13 @@ msgstr ""
 msgid "SMS preferences saved."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number without having provided one.
-#: actions/smssettings.php:338
-#, fuzzy
-msgid "No phone number."
-msgstr "無此使用者"
-
-#. TRANS: Message given saving SMS phone number without having selected a carrier.
-#: actions/smssettings.php:344
-msgid "No carrier selected."
-msgstr ""
-
 #. TRANS: Message given saving SMS phone number that is already set.
 #: actions/smssettings.php:352
 msgid "That is already your phone number."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number that is already set for another user.
-#: actions/smssettings.php:356
-#, fuzzy
-msgid "That phone number already belongs to another user."
-msgstr "此Jabber ID已有人使用"
-
-#. TRANS: Message given saving valid SMS phone number that is to be confirmed.
-#: actions/smssettings.php:384
-#, fuzzy
-msgid ""
-"A confirmation code was sent to the phone number you added. Check your phone "
-"for the code and instructions on how to use it."
-msgstr "確認信已寄到你的線上即時通信箱。%s送給你得訊息要先經過你的認可。"
-
-#. TRANS: Message given canceling SMS phone number confirmation for the wrong phone number.
-#: actions/smssettings.php:413
-#, fuzzy
-msgid "That is the wrong confirmation number."
-msgstr "無法輸入確認碼"
-
 #. TRANS: Message given after successfully canceling SMS phone number confirmation.
 #: actions/smssettings.php:427
-#, fuzzy
 msgid "SMS confirmation cancelled."
 msgstr "無確認碼"
 
@@ -4169,12 +3098,6 @@ msgid ""
 "email but isn't listed here, send email to let us know at %s."
 msgstr ""
 
-#. TRANS: Message given saving SMS phone number confirmation code without having provided one.
-#: actions/smssettings.php:548
-#, fuzzy
-msgid "No code entered"
-msgstr "無內容"
-
 #. TRANS: Menu item for site administration
 #: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
 #: lib/adminpanelaction.php:408
@@ -4182,9 +3105,8 @@ msgid "Snapshots"
 msgstr ""
 
 #: actions/snapshotadminpanel.php:65
-#, fuzzy
 msgid "Manage snapshot configuration"
-msgstr "確èª\8dä¿¡ç®±"
+msgstr "ç\84¡ç¢ºèª\8d碼"
 
 #: actions/snapshotadminpanel.php:127
 msgid "Invalid snapshot run value."
@@ -4230,18 +3152,8 @@ msgstr ""
 msgid "Snapshots will be sent to this URL"
 msgstr ""
 
-#: actions/snapshotadminpanel.php:248
-msgid "Save snapshot settings"
-msgstr ""
-
-#: actions/subedit.php:70
-#, fuzzy
-msgid "You are not subscribed to that profile."
-msgstr "此帳號已註冊"
-
 #. TRANS: Exception thrown when a subscription could not be stored on the server.
 #: actions/subedit.php:83 classes/Subscription.php:136
-#, fuzzy
 msgid "Could not save subscription."
 msgstr "無法新增訂閱"
 
@@ -4249,35 +3161,15 @@ msgstr "無法新增訂閱"
 msgid "This action only accepts POST requests."
 msgstr ""
 
-#: actions/subscribe.php:107
-#, fuzzy
-msgid "No such profile."
-msgstr "無此通知"
-
 #: actions/subscribe.php:117
 msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
 msgstr ""
 
-#: actions/subscribe.php:145
-#, fuzzy
-msgid "Subscribed"
-msgstr "此帳號已註冊"
-
-#: actions/subscribers.php:50
-#, fuzzy, php-format
-msgid "%s subscribers"
-msgstr "此帳號已註冊"
-
 #: actions/subscribers.php:52
 #, php-format
 msgid "%1$s subscribers, page %2$d"
 msgstr ""
 
-#: actions/subscribers.php:63
-#, fuzzy
-msgid "These are the people who listen to your notices."
-msgstr "現在%1$s在%2$s成為你的粉絲囉"
-
 #: actions/subscribers.php:67
 #, php-format
 msgid "These are the people who listen to %s's notices."
@@ -4301,16 +3193,6 @@ msgid ""
 "%) and be the first?"
 msgstr ""
 
-#: actions/subscriptions.php:52
-#, fuzzy, php-format
-msgid "%s subscriptions"
-msgstr "所有訂閱"
-
-#: actions/subscriptions.php:54
-#, fuzzy, php-format
-msgid "%1$s subscriptions, page %2$d"
-msgstr "所有訂閱"
-
 #: actions/subscriptions.php:65
 msgid "These are the people whose notices you listen to."
 msgstr ""
@@ -4330,16 +3212,6 @@ msgid ""
 "automatically subscribe to people you already follow there."
 msgstr ""
 
-#: actions/subscriptions.php:128 actions/subscriptions.php:132
-#, fuzzy, php-format
-msgid "%s is not listening to anyone."
-msgstr "現在%1$s在%2$s成為你的粉絲囉"
-
-#: actions/subscriptions.php:208
-#, fuzzy
-msgid "Jabber"
-msgstr "查無此Jabber ID"
-
 #: actions/subscriptions.php:222 lib/connectsettingsaction.php:115
 msgid "SMS"
 msgstr ""
@@ -4364,10 +3236,6 @@ msgstr ""
 msgid "Notice feed for tag %s (Atom)"
 msgstr ""
 
-#: actions/tagother.php:39
-msgid "No ID argument."
-msgstr ""
-
 #: actions/tagother.php:65
 #, php-format
 msgid "Tag %s"
@@ -4375,7 +3243,7 @@ msgstr ""
 
 #: actions/tagother.php:77 lib/userprofile.php:76
 msgid "User profile"
-msgstr ""
+msgstr "新的更人資料輸入錯誤"
 
 #: actions/tagother.php:81 actions/userauthorization.php:132
 #: lib/userprofile.php:103
@@ -4398,7 +3266,6 @@ msgid ""
 msgstr ""
 
 #: actions/tagother.php:200
-#, fuzzy
 msgid "Could not save tags."
 msgstr "無法儲存個人資料"
 
@@ -4407,13 +3274,12 @@ msgid "Use this form to add tags to your subscribers or subscriptions."
 msgstr ""
 
 #: actions/tagrss.php:35
-#, fuzzy
 msgid "No such tag."
-msgstr "無此通知"
+msgstr "無此使用者"
 
 #: actions/unblock.php:59
 msgid "You haven't blocked that user."
-msgstr ""
+msgstr "此Jabber ID已有人使用"
 
 #: actions/unsandbox.php:72
 msgid "User is not sandboxed."
@@ -4423,16 +3289,6 @@ msgstr ""
 msgid "User is not silenced."
 msgstr ""
 
-#: actions/unsubscribe.php:77
-#, fuzzy
-msgid "No profile ID in request."
-msgstr "無確認請求"
-
-#: actions/unsubscribe.php:98
-#, fuzzy
-msgid "Unsubscribed"
-msgstr "此帳號已註冊"
-
 #: actions/updateprofile.php:64 actions/userauthorization.php:337
 #, php-format
 msgid ""
@@ -4462,12 +3318,6 @@ msgstr ""
 msgid "Invalid default subscripton: '%1$s' is not user."
 msgstr ""
 
-#. TRANS: Link description in user account settings menu.
-#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:111
-#: lib/personalgroupnav.php:109
-msgid "Profile"
-msgstr ""
-
 #: actions/useradminpanel.php:222
 msgid "Bio Limit"
 msgstr ""
@@ -4488,11 +3338,6 @@ msgstr ""
 msgid "Welcome text for new users (Max 255 chars)."
 msgstr ""
 
-#: actions/useradminpanel.php:241
-#, fuzzy
-msgid "Default subscription"
-msgstr "所有訂閱"
-
 #: actions/useradminpanel.php:242
 msgid "Automatically subscribe new users to this user."
 msgstr ""
@@ -4528,18 +3373,11 @@ msgstr ""
 msgid "Accept"
 msgstr "接受"
 
-#: actions/userauthorization.php:218 lib/subscribeform.php:115
-#: lib/subscribeform.php:139
-#, fuzzy
-msgid "Subscribe to this user"
-msgstr "此帳號已註冊"
-
 #: actions/userauthorization.php:219
 msgid "Reject"
 msgstr ""
 
 #: actions/userauthorization.php:220
-#, fuzzy
 msgid "Reject this subscription"
 msgstr "註冊確認"
 
@@ -4628,11 +3466,6 @@ msgstr ""
 msgid "Search for more groups"
 msgstr ""
 
-#: actions/usergroups.php:159
-#, fuzzy, php-format
-msgid "%s is not a member of any group."
-msgstr "無法連結到伺服器:%s"
-
 #: actions/usergroups.php:164
 #, php-format
 msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
@@ -4735,39 +3568,27 @@ msgstr ""
 msgid "A file this large would exceed your monthly quota of %d bytes."
 msgstr ""
 
-#. TRANS: Client exception thrown if a file upload does not have a valid name.
-#: classes/File.php:248 classes/File.php:263
-#, fuzzy
-msgid "Invalid filename."
-msgstr "尺寸錯誤"
-
 #. TRANS: Exception thrown when joining a group fails.
 #: classes/Group_member.php:42
 msgid "Group join failed."
-msgstr ""
+msgstr "確認碼遺失"
 
 #. TRANS: Exception thrown when trying to leave a group the user is not a member of.
 #: classes/Group_member.php:55
-msgid "Not part of group."
-msgstr ""
-
-#. TRANS: Exception thrown when trying to leave a group fails.
-#: classes/Group_member.php:63
-msgid "Group leave failed."
-msgstr ""
+msgid "Not part of group."
+msgstr "無此使用者"
 
 #. TRANS: Server exception thrown when updating a local group fails.
 #: classes/Local_group.php:42
-#, fuzzy
 msgid "Could not update local group."
-msgstr "無法更新使用者"
+msgstr "無法儲存個人資料"
 
 #. TRANS: Exception thrown when trying creating a login token failed.
 #. TRANS: %s is the user nickname for which token creation failed.
 #: classes/Login_token.php:78
 #, php-format
 msgid "Could not create login token for %s"
-msgstr ""
+msgstr "無法更新使用者"
 
 #. TRANS: Exception thrown when database name or Data Source Name could not be found.
 #: classes/Memcached_DataObject.php:533
@@ -4781,15 +3602,8 @@ msgstr ""
 
 #. TRANS: Message given when a message could not be stored on the server.
 #: classes/Message.php:63
-#, fuzzy
 msgid "Could not insert message."
-msgstr "無法新增訂閱"
-
-#. TRANS: Message given when a message could not be updated on the server.
-#: classes/Message.php:74
-#, fuzzy
-msgid "Could not update message with new URI."
-msgstr "無法更新使用者"
+msgstr "無法儲存個人資料"
 
 #. TRANS: Server exception thrown when a user profile for a notice cannot be found.
 #. TRANS: %1$d is a profile ID (number), %2$d is a notice ID (number).
@@ -4799,61 +3613,42 @@ msgid "No such profile (%1$d) for notice (%2$d)."
 msgstr ""
 
 #. TRANS: Server exception. %s are the error details.
-#: classes/Notice.php:190
-#, fuzzy, php-format
+#: classes/Notice.php:193
+#, php-format
 msgid "Database error inserting hashtag: %s"
 msgstr "個人圖像插入錯誤"
 
-#. TRANS: Client exception thrown if a notice contains too many characters.
-#: classes/Notice.php:260
-#, fuzzy
-msgid "Problem saving notice. Too long."
-msgstr "儲存使用者發生錯誤"
-
-#. TRANS: Client exception thrown when trying to save a notice for an unknown user.
-#: classes/Notice.php:265
-#, fuzzy
-msgid "Problem saving notice. Unknown user."
-msgstr "儲存使用者發生錯誤"
-
 #. TRANS: Client exception thrown when a user tries to post too many notices in a given time frame.
-#: classes/Notice.php:271
+#: classes/Notice.php:276
 msgid ""
 "Too many notices too fast; take a breather and post again in a few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post too many duplicate notices in a given time frame.
-#: classes/Notice.php:278
+#: classes/Notice.php:283
 msgid ""
 "Too many duplicate messages too quickly; take a breather and post again in a "
 "few minutes."
 msgstr ""
 
 #. TRANS: Client exception thrown when a user tries to post while being banned.
-#: classes/Notice.php:286
+#: classes/Notice.php:291
 msgid "You are banned from posting notices on this site."
 msgstr ""
 
-#. TRANS: Server exception thrown when a notice cannot be saved.
-#. TRANS: Server exception thrown when a notice cannot be updated.
-#: classes/Notice.php:353 classes/Notice.php:380
-#, fuzzy
-msgid "Problem saving notice."
-msgstr "儲存使用者發生錯誤"
-
 #. TRANS: Server exception thrown when no array is provided to the method saveKnownGroups().
-#: classes/Notice.php:892
+#: classes/Notice.php:897
 msgid "Bad type provided to saveKnownGroups"
 msgstr ""
 
 #. TRANS: Server exception thrown when an update for a group inbox fails.
-#: classes/Notice.php:991
+#: classes/Notice.php:996
 msgid "Problem saving group inbox."
 msgstr ""
 
 #. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
 #. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: classes/Notice.php:1746
+#: classes/Notice.php:1751
 #, php-format
 msgid "RT @%1$s %2$s"
 msgstr ""
@@ -4874,52 +3669,36 @@ msgstr ""
 
 #. TRANS: Exception thrown when a right for a non-existing user profile is checked.
 #: classes/Remote_profile.php:54
-#, fuzzy
 msgid "Missing profile."
 msgstr "新的更人資料輸入錯誤"
 
 #. TRANS: Exception thrown when a tag cannot be saved.
 #: classes/Status_network.php:346
 msgid "Unable to save tag."
-msgstr ""
+msgstr "無法儲存個人資料"
 
 #. TRANS: Exception thrown when trying to subscribe while being banned from subscribing.
 #: classes/Subscription.php:75 lib/oauthstore.php:465
 msgid "You have been banned from subscribing."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to subscribe while already subscribed.
-#: classes/Subscription.php:80
-#, fuzzy
-msgid "Already subscribed!"
-msgstr "此帳號已註冊"
-
 #. TRANS: Exception thrown when trying to subscribe to a user who has blocked the subscribing user.
 #: classes/Subscription.php:85
 msgid "User has blocked you."
 msgstr ""
 
-#. TRANS: Exception thrown when trying to unsibscribe without a subscription.
-#: classes/Subscription.php:171
-#, fuzzy
-msgid "Not subscribed!"
-msgstr "此帳號已註冊"
-
 #. TRANS: Exception thrown when trying to unsubscribe a user from themselves.
 #: classes/Subscription.php:178
-#, fuzzy
 msgid "Could not delete self-subscription."
 msgstr "無法新增訂閱"
 
 #. TRANS: Exception thrown when the OMB token for a subscription could not deleted on the server.
 #: classes/Subscription.php:206
-#, fuzzy
 msgid "Could not delete subscription OMB token."
 msgstr "無法新增訂閱"
 
 #. TRANS: Exception thrown when a subscription could not be deleted on the server.
 #: classes/Subscription.php:218
-#, fuzzy
 msgid "Could not delete subscription."
 msgstr "無法新增訂閱"
 
@@ -4932,45 +3711,24 @@ msgstr ""
 
 #. TRANS: Server exception thrown when creating a group failed.
 #: classes/User_group.php:496
-#, fuzzy
 msgid "Could not create group."
 msgstr "無法更新使用者"
 
 #. TRANS: Server exception thrown when updating a group URI failed.
 #: classes/User_group.php:506
-#, fuzzy
 msgid "Could not set group URI."
 msgstr "無法儲存個人資料"
 
 #. TRANS: Server exception thrown when setting group membership failed.
 #: classes/User_group.php:529
-#, fuzzy
 msgid "Could not set group membership."
 msgstr "無法更新使用者"
 
 #. TRANS: Server exception thrown when saving local group information failed.
 #: classes/User_group.php:544
-#, fuzzy
 msgid "Could not save local group info."
 msgstr "無法儲存個人資料"
 
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:109
-msgid "Change your profile settings"
-msgstr ""
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:116
-#, fuzzy
-msgid "Upload an avatar"
-msgstr "無法上傳個人圖像"
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:123
-#, fuzzy
-msgid "Change your password"
-msgstr "更改密碼"
-
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:130
 msgid "Change email handling"
@@ -4979,34 +3737,18 @@ msgstr ""
 #. TRANS: Link title attribute in user account settings menu.
 #: lib/accountsettingsaction.php:137
 msgid "Design your profile"
-msgstr ""
-
-#. TRANS: Link title attribute in user account settings menu.
-#: lib/accountsettingsaction.php:144
-msgid "Other options"
-msgstr ""
+msgstr "新的更人資料輸入錯誤"
 
 #. TRANS: Link description in user account settings menu.
 #: lib/accountsettingsaction.php:146
 msgid "Other"
 msgstr ""
 
-#. TRANS: Page title. %1$s is the title, %2$s is the site name.
-#: lib/action.php:145
-#, fuzzy, php-format
-msgid "%1$s - %2$s"
-msgstr "%1$s的狀態是%2$s"
-
 #. TRANS: Page title for a page without a title set.
 #: lib/action.php:161
 msgid "Untitled page"
 msgstr ""
 
-#. TRANS: DT element for primary navigation menu. String is hidden in default CSS.
-#: lib/action.php:436
-msgid "Primary site navigation"
-msgstr ""
-
 #. TRANS: Tooltip for main menu option "Personal"
 #: lib/action.php:442
 msgctxt "TOOLTIP"
@@ -5040,7 +3782,7 @@ msgstr "連結"
 #: lib/action.php:458
 msgctxt "TOOLTIP"
 msgid "Change site configuration"
-msgstr ""
+msgstr "無確認碼"
 
 #. TRANS: Main menu option when logged in and site admin for access to site configuration
 #: lib/action.php:461
@@ -5071,7 +3813,7 @@ msgstr ""
 #: lib/action.php:477
 msgctxt "MENU"
 msgid "Logout"
-msgstr ""
+msgstr "登入"
 
 #. TRANS: Tooltip for main menu option "Register"
 #: lib/action.php:482
@@ -5091,25 +3833,6 @@ msgctxt "TOOLTIP"
 msgid "Login to the site"
 msgstr ""
 
-#: lib/action.php:491
-#, fuzzy
-msgctxt "MENU"
-msgid "Login"
-msgstr "登入"
-
-#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:494
-#, fuzzy
-msgctxt "TOOLTIP"
-msgid "Help me!"
-msgstr "求救"
-
-#: lib/action.php:497
-#, fuzzy
-msgctxt "MENU"
-msgid "Help"
-msgstr "求救"
-
 #. TRANS: Tooltip for main menu option "Search"
 #: lib/action.php:500
 msgctxt "TOOLTIP"
@@ -5121,29 +3844,11 @@ msgctxt "MENU"
 msgid "Search"
 msgstr ""
 
-#. TRANS: DT element for site notice. String is hidden in default CSS.
-#. TRANS: Menu item for site administration
-#: lib/action.php:525 lib/adminpanelaction.php:400
-#, fuzzy
-msgid "Site notice"
-msgstr "新訊息"
-
 #. TRANS: DT element for local views block. String is hidden in default CSS.
 #: lib/action.php:592
 msgid "Local views"
 msgstr ""
 
-#. TRANS: DT element for page notice. String is hidden in default CSS.
-#: lib/action.php:659
-#, fuzzy
-msgid "Page notice"
-msgstr "新訊息"
-
-#. TRANS: DT element for secondary navigation menu. String is hidden in default CSS.
-#: lib/action.php:762
-msgid "Secondary site navigation"
-msgstr ""
-
 #. TRANS: Secondary navigation menu option leading to help on StatusNet.
 #: lib/action.php:768
 msgid "Help"
@@ -5275,11 +3980,6 @@ msgstr ""
 msgid "Can't handle embedded Base64 content yet."
 msgstr ""
 
-#. TRANS: Client error message thrown when a user tries to change admin settings but has no access rights.
-#: lib/adminpanelaction.php:98
-msgid "You cannot make changes to this site."
-msgstr ""
-
 #. TRANS: Client error message throw when a certain panel's settings cannot be changed.
 #: lib/adminpanelaction.php:110
 msgid "Changes to that panel are not allowed."
@@ -5303,21 +4003,13 @@ msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:350
-#, fuzzy
 msgid "Basic site configuration"
-msgstr "確認信箱"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:352
-msgctxt "MENU"
-msgid "Site"
-msgstr ""
+msgstr "無確認碼"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:358
-#, fuzzy
 msgid "Design configuration"
-msgstr "確èª\8dä¿¡ç®±"
+msgstr "ç\84¡ç¢ºèª\8d碼"
 
 #. TRANS: Menu item for site administration
 #: lib/adminpanelaction.php:360
@@ -5327,7 +4019,6 @@ msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:366
-#, fuzzy
 msgid "User configuration"
 msgstr "無確認碼"
 
@@ -5338,75 +4029,40 @@ msgstr ""
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:374
-#, fuzzy
 msgid "Access configuration"
-msgstr "確èª\8dä¿¡ç®±"
+msgstr "ç\84¡ç¢ºèª\8d碼"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:382
-#, fuzzy
 msgid "Paths configuration"
-msgstr "確èª\8dä¿¡ç®±"
+msgstr "ç\84¡ç¢ºèª\8d碼"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:390
-#, fuzzy
 msgid "Sessions configuration"
-msgstr "確認信箱"
-
-#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:398
-#, fuzzy
-msgid "Edit site notice"
-msgstr "新訊息"
+msgstr "無確認碼"
 
 #. TRANS: Menu item title/tooltip
 #: lib/adminpanelaction.php:406
-#, fuzzy
 msgid "Snapshots configuration"
-msgstr "確èª\8dä¿¡ç®±"
+msgstr "ç\84¡ç¢ºèª\8d碼"
 
 #. TRANS: Client error 401.
 #: lib/apiauth.php:113
 msgid "API resource requires read-write access, but you only have read access."
 msgstr ""
 
-#. TRANS: Form legend.
-#: lib/applicationeditform.php:137
-msgid "Edit application"
-msgstr ""
-
-#. TRANS: Form guide.
-#: lib/applicationeditform.php:187
-msgid "Icon for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:209
 #, php-format
 msgid "Describe your application in %d characters"
 msgstr ""
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:213
-msgid "Describe your application"
-msgstr ""
-
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:224
-msgid "URL of the homepage of this application"
-msgstr ""
-
 #. TRANS: Form input field label.
 #: lib/applicationeditform.php:226
 msgid "Source URL"
 msgstr ""
 
-#. TRANS: Form input field instructions.
-#: lib/applicationeditform.php:233
-msgid "Organization responsible for this application"
-msgstr ""
-
 #. TRANS: Form input field instructions.
 #: lib/applicationeditform.php:242
 msgid "URL for the homepage of the organization"
@@ -5474,11 +4130,6 @@ msgctxt "BUTTON"
 msgid "Revoke"
 msgstr ""
 
-#. TRANS: DT element label in attachment list.
-#: lib/attachmentlist.php:88
-msgid "Attachments"
-msgstr ""
-
 #. TRANS: DT element label in attachment list item.
 #: lib/attachmentlist.php:265
 msgid "Author"
@@ -5493,10 +4144,6 @@ msgstr ""
 msgid "Notices where this attachment appears"
 msgstr ""
 
-#: lib/attachmenttagcloudsection.php:48
-msgid "Tags for this attachment"
-msgstr ""
-
 #: lib/authenticationplugin.php:221 lib/authenticationplugin.php:226
 msgid "Password changing failed"
 msgstr ""
@@ -5505,10 +4152,6 @@ msgstr ""
 msgid "Password changing is not allowed"
 msgstr ""
 
-#: lib/channel.php:157 lib/channel.php:177
-msgid "Command results"
-msgstr ""
-
 #: lib/channel.php:229 lib/mailhandler.php:142
 msgid "Command complete"
 msgstr ""
@@ -5517,44 +4160,39 @@ msgstr ""
 msgid "Command failed"
 msgstr ""
 
-#: lib/command.php:83 lib/command.php:105
-msgid "Notice with that id does not exist"
+#. TRANS: Command exception text shown when a notice ID is requested that does not exist.
+#: lib/command.php:84 lib/command.php:108
+msgid "Notice with that id does not exist."
 msgstr ""
 
-#: lib/command.php:99 lib/command.php:596
-msgid "User has no last notice"
+#. TRANS: Command exception text shown when a last user notice is requested and it does not exist.
+#. TRANS: Error text shown when a last user notice is requested and it does not exist.
+#: lib/command.php:101 lib/command.php:630
+msgid "User has no last notice."
 msgstr ""
 
-#. TRANS: Message given requesting a profile for a non-existing user.
-#. TRANS: %s is the nickname of the user for which the profile could not be found.
-#: lib/command.php:127
-#, php-format
-msgid "Could not find a user with nickname %s"
-msgstr "無法更新使用者"
-
-#. TRANS: Message given getting a non-existing user.
-#. TRANS: %s is the nickname of the user that could not be found.
-#: lib/command.php:147
-#, fuzzy, php-format
-msgid "Could not find a local user with nickname %s"
-msgstr "無法更新使用者"
-
-#: lib/command.php:180
+#. TRANS: Error text shown when an unimplemented command is given.
+#: lib/command.php:185
 msgid "Sorry, this command is not yet implemented."
 msgstr ""
 
-#: lib/command.php:225
+#. TRANS: Command exception text shown when a user tries to nudge themselves.
+#: lib/command.php:231
 msgid "It does not make a lot of sense to nudge yourself!"
 msgstr ""
 
 #. TRANS: Message given having nudged another user.
 #. TRANS: %s is the nickname of the user that was nudged.
-#: lib/command.php:234
+#: lib/command.php:240
 #, php-format
-msgid "Nudge sent to %s"
+msgid "Nudge sent to %s."
 msgstr ""
 
-#: lib/command.php:260
+#. TRANS: User statistics text.
+#. TRANS: %1$s is the number of other user the user is subscribed to.
+#. TRANS: %2$s is the number of users that are subscribed to the user.
+#. TRANS: %3$s is the number of notices the user has sent.
+#: lib/command.php:270
 #, php-format
 msgid ""
 "Subscriptions: %1$s\n"
@@ -5562,56 +4200,20 @@ msgid ""
 "Notices: %3$s"
 msgstr ""
 
-#: lib/command.php:302
+#. TRANS: Text shown when a notice has been marked as favourite successfully.
+#: lib/command.php:314
 msgid "Notice marked as fave."
 msgstr ""
 
-#: lib/command.php:323
-#, fuzzy
-msgid "You are already a member of that group"
-msgstr "無法連結到伺服器:%s"
-
-#. TRANS: Message given having failed to add a user to a group.
-#. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:339
-#, fuzzy, php-format
-msgid "Could not join user %1$s to group %2$s"
-msgstr "無法更新使用者"
-
-#. TRANS: Message given having failed to remove a user from a group.
+#. TRANS: Message given having added a user to a group.
 #. TRANS: %1$s is the nickname of the user, %2$s is the nickname of the group.
-#: lib/command.php:385
+#: lib/command.php:360
 #, php-format
-msgid "Could not remove user %1$s from group %2$s"
+msgid "%1$s joined group %2$s."
 msgstr ""
 
-#. TRANS: Whois output. %s is the full name of the queried user.
-#: lib/command.php:418
-#, fuzzy, php-format
-msgid "Fullname: %s"
-msgstr "全名"
-
-#. TRANS: Whois output. %s is the location of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:422 lib/mail.php:268
-#, fuzzy, php-format
-msgid "Location: %s"
-msgstr "地點"
-
-#. TRANS: Whois output. %s is the homepage of the queried user.
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/command.php:426 lib/mail.php:271
-#, fuzzy, php-format
-msgid "Homepage: %s"
-msgstr "個人首頁"
-
-#. TRANS: Whois output. %s is the bio information of the queried user.
-#: lib/command.php:430
-#, fuzzy, php-format
-msgid "About: %s"
-msgstr "關於"
-
-#: lib/command.php:457
+#. TRANS: Command exception text shown when trying to send a direct message to a remote user (a user not registered at the current server).
+#: lib/command.php:474
 #, php-format
 msgid ""
 "%s is a remote profile; you can only send direct messages to users on the "
@@ -5620,146 +4222,120 @@ msgstr ""
 
 #. TRANS: Message given if content is too long.
 #. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
-#: lib/command.php:472
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d"
-msgstr ""
-
-#. TRANS: Message given have sent a direct message to another user.
-#. TRANS: %s is the name of the other user.
-#: lib/command.php:492
+#: lib/command.php:491 lib/xmppmanager.php:403
 #, php-format
-msgid "Direct message to %s sent"
-msgstr ""
-
-#: lib/command.php:494
-#, fuzzy
-msgid "Error sending direct message."
-msgstr "使用者設定發生錯誤"
-
-#: lib/command.php:514
-msgid "Cannot repeat your own notice"
-msgstr ""
-
-#: lib/command.php:519
-msgid "Already repeated that notice"
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
 #. TRANS: Message given having repeated a notice from another user.
 #. TRANS: %s is the name of the user for which the notice was repeated.
-#: lib/command.php:529
+#: lib/command.php:554
 #, php-format
-msgid "Notice from %s repeated"
+msgid "Notice from %s repeated."
 msgstr ""
 
-#: lib/command.php:531
-#, fuzzy
-msgid "Error repeating notice."
-msgstr "儲存使用者發生錯誤"
-
-#: lib/command.php:562
+#. TRANS: Message given if content of a notice for a reply is too long.
+#. TRANS: %1$d is the maximum number of characters, %2$d is the number of submitted characters.
+#: lib/command.php:592
 #, php-format
-msgid "Notice too long - maximum is %d characters, you sent %d"
+msgid "Notice too long - maximum is %1$d characters, you sent %2$d."
 msgstr ""
 
-#: lib/command.php:571
+#. TRANS: Text shown having sent a reply to a notice successfully.
+#. TRANS: %s is the nickname of the user of the notice the reply was sent to.
+#: lib/command.php:603
 #, php-format
-msgid "Reply to %s sent"
+msgid "Reply to %s sent."
 msgstr ""
 
-#: lib/command.php:573
+#. TRANS: Error text shown when a reply to a notice fails with an unknown reason.
+#: lib/command.php:606
 msgid "Error saving notice."
 msgstr "儲存使用者發生錯誤"
 
-#: lib/command.php:620
-msgid "Specify the name of the user to subscribe to"
+#. TRANS: Error text shown when no username was provided when issuing a subscribe command.
+#: lib/command.php:655
+msgid "Specify the name of the user to subscribe to."
 msgstr ""
 
-#: lib/command.php:628
+#. TRANS: Command exception text shown when trying to subscribe to an OMB profile using the subscribe command.
+#: lib/command.php:664
 msgid "Can't subscribe to OMB profiles by command."
 msgstr ""
 
-#: lib/command.php:634
+#. TRANS: Text shown after having subscribed to another user successfully.
+#. TRANS: %s is the name of the user the subscription was requested for.
+#: lib/command.php:672
 #, php-format
-msgid "Subscribed to %s"
+msgid "Subscribed to %s."
 msgstr ""
 
-#: lib/command.php:655 lib/command.php:754
-msgid "Specify the name of the user to unsubscribe from"
+#. TRANS: Error text shown when no username was provided when issuing an unsubscribe command.
+#. TRANS: Error text shown when no username was provided when issuing the command.
+#: lib/command.php:694 lib/command.php:804
+msgid "Specify the name of the user to unsubscribe from."
 msgstr ""
 
-#: lib/command.php:664
+#. TRANS: Text shown after having unsubscribed from another user successfully.
+#. TRANS: %s is the name of the user the unsubscription was requested for.
+#: lib/command.php:705
 #, php-format
-msgid "Unsubscribed from %s"
+msgid "Unsubscribed from %s."
 msgstr ""
 
-#: lib/command.php:682 lib/command.php:705
+#. TRANS: Error text shown when issuing the command "off" with a setting which has not yet been implemented.
+#. TRANS: Error text shown when issuing the command "on" with a setting which has not yet been implemented.
+#: lib/command.php:724 lib/command.php:750
 msgid "Command not yet implemented."
 msgstr ""
 
-#: lib/command.php:685
-#, fuzzy
-msgid "Notification off."
-msgstr "無確認碼"
-
-#: lib/command.php:687
+#. TRANS: Error text shown when the command "off" fails for an unknown reason.
+#: lib/command.php:731
 msgid "Can't turn off notification."
 msgstr ""
 
-#: lib/command.php:708
-#, fuzzy
-msgid "Notification on."
-msgstr "無確認碼"
-
-#: lib/command.php:710
+#. TRANS: Error text shown when the command "on" fails for an unknown reason.
+#: lib/command.php:757
 msgid "Can't turn on notification."
 msgstr ""
 
-#: lib/command.php:723
-msgid "Login command is disabled"
+#. TRANS: Error text shown when issuing the login command while login is disabled.
+#: lib/command.php:771
+msgid "Login command is disabled."
 msgstr ""
 
-#: lib/command.php:734
+#. TRANS: Text shown after issuing the login command successfully.
+#. TRANS: %s is a logon link..
+#: lib/command.php:784
 #, php-format
-msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgid "This link is useable only once and is valid for only 2 minutes: %s."
 msgstr ""
 
-#: lib/command.php:761
-#, fuzzy, php-format
-msgid "Unsubscribed  %s"
-msgstr "此帳號已註冊"
-
-#: lib/command.php:778
-#, fuzzy
-msgid "You are not subscribed to anyone."
-msgstr "此帳號已註冊"
-
-#: lib/command.php:780
+#. TRANS: Text shown after requesting other users a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed users.
+#: lib/command.php:836
 msgid "You are subscribed to this person:"
 msgid_plural "You are subscribed to these people:"
 msgstr[0] "此帳號已註冊"
 
-#: lib/command.php:800
-#, fuzzy
-msgid "No one is subscribed to you."
-msgstr "無此訂閱"
-
-#: lib/command.php:802
+#. TRANS: Text shown after requesting other users that are subscribed to a user (followers).
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribing users.
+#: lib/command.php:863
 msgid "This person is subscribed to you:"
 msgid_plural "These people are subscribed to you:"
 msgstr[0] "無此訂閱"
 
-#: lib/command.php:822
-#, fuzzy
-msgid "You are not a member of any groups."
-msgstr "無法連結到伺服器:%s"
-
-#: lib/command.php:824
+#. TRANS: Text shown after requesting groups a user is subscribed to.
+#. TRANS: This message support plural forms. This message is followed by a
+#. TRANS: hard coded space and a comma separated list of subscribed groups.
+#: lib/command.php:890
 msgid "You are a member of this group:"
 msgid_plural "You are a member of these groups:"
 msgstr[0] "無法連結到伺服器:%s"
 
-#: lib/command.php:838
+#: lib/command.php:905
 msgid ""
 "Commands:\n"
 "on - turn on notifications\n"
@@ -5801,11 +4377,6 @@ msgid ""
 "tracking - not yet implemented.\n"
 msgstr ""
 
-#: lib/common.php:135
-#, fuzzy
-msgid "No configuration file found. "
-msgstr "無確認碼"
-
 #: lib/common.php:136
 msgid "I looked for configuration files in the following places: "
 msgstr ""
@@ -5830,23 +4401,10 @@ msgstr ""
 msgid "Updates by SMS"
 msgstr ""
 
-#: lib/connectsettingsaction.php:120
-#, fuzzy
-msgid "Connections"
-msgstr "連結"
-
-#: lib/connectsettingsaction.php:121
-msgid "Authorized connected applications"
-msgstr ""
-
 #: lib/dberroraction.php:60
 msgid "Database error"
 msgstr ""
 
-#: lib/designsettings.php:105
-msgid "Upload file"
-msgstr ""
-
 #: lib/designsettings.php:109
 msgid ""
 "You can upload your personal background image. The maximum file size is 2MB."
@@ -5860,11 +4418,6 @@ msgstr ""
 msgid "Disfavor this notice"
 msgstr ""
 
-#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
-msgid "Favor this notice"
-msgstr "無此通知"
-
 #: lib/favorform.php:140
 msgid "Favor"
 msgstr ""
@@ -5960,7 +4513,6 @@ msgid "Edit %s group properties"
 msgstr ""
 
 #: lib/groupnav.php:113
-#, fuzzy
 msgid "Logo"
 msgstr "登入"
 
@@ -6001,11 +4553,6 @@ msgstr ""
 msgid "That file is too big. The maximum file size is %s."
 msgstr ""
 
-#: lib/imagefile.php:93
-#, fuzzy
-msgid "Partial upload."
-msgstr "更新個人圖像"
-
 #: lib/imagefile.php:101 lib/mediafile.php:170
 msgid "System error uploading file."
 msgstr ""
@@ -6016,7 +4563,7 @@ msgstr ""
 
 #: lib/imagefile.php:122
 msgid "Lost our file."
-msgstr ""
+msgstr "無法儲存個人資料"
 
 #: lib/imagefile.php:163 lib/imagefile.php:224
 msgid "Unknown file type"
@@ -6040,19 +4587,13 @@ msgstr ""
 msgid "Unknown inbox source %d."
 msgstr ""
 
-#: lib/joinform.php:114
-#, fuzzy
-msgid "Join"
-msgstr "登入"
-
 #: lib/leaveform.php:114
 msgid "Leave"
 msgstr ""
 
 #: lib/logingroupnav.php:80
-#, fuzzy
 msgid "Login with a username and password"
-msgstr "使用者名稱或密碼無效"
+msgstr "使用者名稱或密碼錯誤"
 
 #: lib/logingroupnav.php:86
 msgid "Sign up for a new account"
@@ -6110,18 +4651,6 @@ msgid ""
 "Change your email address or notification options at %8$s\n"
 msgstr ""
 
-#. TRANS: Profile info line in new-subscriber notification e-mail
-#: lib/mail.php:274
-#, fuzzy, php-format
-msgid "Bio: %s"
-msgstr "自我介紹"
-
-#. TRANS: Subject of notification mail for new posting email address
-#: lib/mail.php:304
-#, fuzzy, php-format
-msgid "New email address for posting to %s"
-msgstr "查無此使用者所註冊的信箱"
-
 #. TRANS: Body of notification mail for new posting email address
 #: lib/mail.php:308
 #, php-format
@@ -6136,18 +4665,6 @@ msgid ""
 "%4$s"
 msgstr ""
 
-#. TRANS: Subject line for SMS-by-email notification messages
-#: lib/mail.php:433
-#, fuzzy, php-format
-msgid "%s status"
-msgstr "%1$s的狀態是%2$s"
-
-#. TRANS: Subject line for SMS-by-email address confirmation message
-#: lib/mail.php:460
-#, fuzzy
-msgid "SMS confirmation"
-msgstr "無確認碼"
-
 #. TRANS: Main body heading for SMS-by-email address confirmation message
 #: lib/mail.php:463
 #, php-format
@@ -6287,16 +4804,6 @@ msgstr ""
 msgid "from"
 msgstr ""
 
-#: lib/mailhandler.php:37
-#, fuzzy
-msgid "Could not parse message."
-msgstr "無法更新使用者"
-
-#: lib/mailhandler.php:42
-#, fuzzy
-msgid "Not a registered user."
-msgstr "此恢復碼錯誤"
-
 #: lib/mailhandler.php:46
 msgid "Sorry, that is not your incoming email address."
 msgstr ""
@@ -6328,10 +4835,6 @@ msgstr ""
 msgid "The uploaded file was only partially uploaded."
 msgstr ""
 
-#: lib/mediafile.php:159
-msgid "Missing a temporary folder."
-msgstr ""
-
 #: lib/mediafile.php:162
 msgid "Failed to write file to disk."
 msgstr ""
@@ -6348,10 +4851,6 @@ msgstr ""
 msgid "File could not be moved to destination directory."
 msgstr ""
 
-#: lib/mediafile.php:202 lib/mediafile.php:238
-msgid "Could not determine file's MIME type."
-msgstr ""
-
 #: lib/mediafile.php:318
 #, php-format
 msgid " Try using another %s format."
@@ -6370,43 +4869,29 @@ msgstr ""
 msgid "To"
 msgstr ""
 
-#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
-msgid "Available characters"
-msgstr "6個以上字元"
-
-#: lib/messageform.php:178 lib/noticeform.php:236
+#: lib/messageform.php:178 lib/noticeform.php:237
 msgctxt "Send button for sending notice"
 msgid "Send"
 msgstr ""
 
-#: lib/noticeform.php:160
-#, fuzzy
-msgid "Send a notice"
-msgstr "新訊息"
-
-#: lib/noticeform.php:173
+#: lib/noticeform.php:174
 #, php-format
 msgid "What's up, %s?"
 msgstr ""
 
-#: lib/noticeform.php:192
+#: lib/noticeform.php:193
 msgid "Attach"
 msgstr ""
 
-#: lib/noticeform.php:196
+#: lib/noticeform.php:197
 msgid "Attach a file"
 msgstr ""
 
-#: lib/noticeform.php:212
-msgid "Share my location"
-msgstr ""
-
-#: lib/noticeform.php:215
+#: lib/noticeform.php:216
 msgid "Do not share my location"
-msgstr ""
+msgstr "無法取消信箱確認"
 
-#: lib/noticeform.php:216
+#: lib/noticeform.php:217
 msgid ""
 "Sorry, retrieving your geo location is taking longer than expected, please "
 "try again later"
@@ -6441,10 +4926,9 @@ msgstr ""
 msgid "at"
 msgstr ""
 
-#: lib/noticelist.php:568
-#, fuzzy
-msgid "in context"
-msgstr "無內容"
+#: lib/noticelist.php:502
+msgid "web"
+msgstr ""
 
 #: lib/noticelist.php:603
 msgid "Repeated by"
@@ -6458,22 +4942,10 @@ msgstr ""
 msgid "Reply"
 msgstr ""
 
-#: lib/noticelist.php:675
-msgid "Notice repeated"
-msgstr ""
-
-#: lib/nudgeform.php:116
-msgid "Nudge this user"
-msgstr ""
-
 #: lib/nudgeform.php:128
 msgid "Nudge"
 msgstr ""
 
-#: lib/nudgeform.php:128
-msgid "Send a nudge to this user"
-msgstr ""
-
 #: lib/oauthstore.php:283
 msgid "Error inserting new profile"
 msgstr "新的更人資料輸入錯誤"
@@ -6490,11 +4962,6 @@ msgstr "更新遠端個人資料發生錯誤"
 msgid "Error inserting remote profile"
 msgstr "新增外部個人資料發生錯誤(Error inserting remote profile)"
 
-#: lib/oauthstore.php:345
-#, fuzzy
-msgid "Duplicate notice"
-msgstr "新訊息"
-
 #: lib/oauthstore.php:490
 msgid "Couldn't insert new subscription."
 msgstr "無法新增訂閱"
@@ -6515,18 +4982,10 @@ msgstr ""
 msgid "Inbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:126
-msgid "Your incoming messages"
-msgstr ""
-
 #: lib/personalgroupnav.php:130
 msgid "Outbox"
 msgstr ""
 
-#: lib/personalgroupnav.php:131
-msgid "Your sent messages"
-msgstr ""
-
 #: lib/personaltagcloudsection.php:56
 #, php-format
 msgid "Tags in %s's notices"
@@ -6536,25 +4995,10 @@ msgstr ""
 msgid "Unknown"
 msgstr ""
 
-#: lib/profileaction.php:109 lib/profileaction.php:205 lib/subgroupnav.php:82
-#, fuzzy
-msgid "Subscriptions"
-msgstr "所有訂閱"
-
 #: lib/profileaction.php:126
 msgid "All subscriptions"
 msgstr "所有訂閱"
 
-#: lib/profileaction.php:144 lib/profileaction.php:214 lib/subgroupnav.php:90
-#, fuzzy
-msgid "Subscribers"
-msgstr "此帳號已註冊"
-
-#: lib/profileaction.php:161
-#, fuzzy
-msgid "All subscribers"
-msgstr "所有訂閱"
-
 #: lib/profileaction.php:191
 msgid "User ID"
 msgstr ""
@@ -6580,10 +5024,6 @@ msgstr ""
 msgid "Public"
 msgstr ""
 
-#: lib/publicgroupnav.php:82
-msgid "User groups"
-msgstr ""
-
 #: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
 msgid "Recent tags"
 msgstr ""
@@ -6596,10 +5036,6 @@ msgstr ""
 msgid "Popular"
 msgstr ""
 
-#: lib/redirectingaction.php:95
-msgid "No return-to arguments."
-msgstr ""
-
 #: lib/repeatform.php:107
 msgid "Repeat this notice?"
 msgstr ""
@@ -6625,10 +5061,6 @@ msgstr ""
 msgid "Sandbox"
 msgstr ""
 
-#: lib/sandboxform.php:78
-msgid "Sandbox this user"
-msgstr ""
-
 #: lib/searchaction.php:120
 msgid "Search site"
 msgstr ""
@@ -6673,20 +5105,6 @@ msgstr ""
 msgid "Silence"
 msgstr ""
 
-#: lib/silenceform.php:78
-msgid "Silence this user"
-msgstr ""
-
-#: lib/subgroupnav.php:83
-#, fuzzy, php-format
-msgid "People %s subscribes to"
-msgstr "無此訂閱"
-
-#: lib/subgroupnav.php:91
-#, fuzzy, php-format
-msgid "People subscribed to %s"
-msgstr "此帳號已註冊"
-
 #: lib/subgroupnav.php:99
 #, php-format
 msgid "Groups %s is a member of"
@@ -6723,13 +5141,6 @@ msgstr ""
 msgid "The theme file is missing or the upload failed."
 msgstr ""
 
-#: lib/themeuploader.php:91 lib/themeuploader.php:102
-#: lib/themeuploader.php:253 lib/themeuploader.php:257
-#: lib/themeuploader.php:265 lib/themeuploader.php:272
-#, fuzzy
-msgid "Failed saving theme."
-msgstr "無法上傳個人圖像"
-
 #: lib/themeuploader.php:139
 msgid "Invalid theme: bad directory structure."
 msgstr ""
@@ -6754,11 +5165,6 @@ msgstr ""
 msgid "Theme contains file of type '.%s', which is not allowed."
 msgstr ""
 
-#: lib/themeuploader.php:234
-#, fuzzy
-msgid "Error opening theme archive."
-msgstr "更新遠端個人資料發生錯誤"
-
 #: lib/topposterssection.php:74
 msgid "Top posters"
 msgstr ""
@@ -6767,48 +5173,15 @@ msgstr ""
 msgid "Unsandbox"
 msgstr ""
 
-#: lib/unsandboxform.php:80
-msgid "Unsandbox this user"
-msgstr ""
-
 #: lib/unsilenceform.php:67
 msgid "Unsilence"
 msgstr ""
 
-#: lib/unsilenceform.php:78
-msgid "Unsilence this user"
-msgstr ""
-
-#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
-#, fuzzy
-msgid "Unsubscribe from this user"
-msgstr "此帳號已註冊"
-
-#: lib/unsubscribeform.php:137
-#, fuzzy
-msgid "Unsubscribe"
-msgstr "此帳號已註冊"
-
-#: lib/usernoprofileexception.php:58
-#, php-format
-msgid "User %s (%d) has no profile record."
-msgstr ""
-
-#: lib/userprofile.php:117
-#, fuzzy
-msgid "Edit Avatar"
-msgstr "個人圖像"
-
-#: lib/userprofile.php:234 lib/userprofile.php:248
-msgid "User actions"
-msgstr ""
-
 #: lib/userprofile.php:237
 msgid "User deletion in progress..."
 msgstr ""
 
 #: lib/userprofile.php:263
-#, fuzzy
 msgid "Edit profile settings"
 msgstr "使用者設定發生錯誤"
 
@@ -6828,10 +5201,6 @@ msgstr ""
 msgid "Moderate"
 msgstr ""
 
-#: lib/userprofile.php:364
-msgid "User role"
-msgstr ""
-
 #: lib/userprofile.php:366
 msgctxt "role"
 msgid "Administrator"
@@ -6843,70 +5212,60 @@ msgid "Moderator"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1100
+#: lib/util.php:1103
 msgid "a few seconds ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1103
+#: lib/util.php:1106
 msgid "about a minute ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1107
+#: lib/util.php:1110
 #, php-format
 msgid "about %d minutes ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1110
+#: lib/util.php:1113
 msgid "about an hour ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1114
+#: lib/util.php:1117
 #, php-format
 msgid "about %d hours ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1117
+#: lib/util.php:1120
 msgid "about a day ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1121
+#: lib/util.php:1124
 #, php-format
 msgid "about %d days ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1124
+#: lib/util.php:1127
 msgid "about a month ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1128
+#: lib/util.php:1131
 #, php-format
 msgid "about %d months ago"
 msgstr ""
 
 #. TRANS: Used in notices to indicate when the notice was made compared to now.
-#: lib/util.php:1131
+#: lib/util.php:1134
 msgid "about a year ago"
 msgstr ""
 
-#: lib/webcolor.php:82
-#, fuzzy, php-format
-msgid "%s is not a valid color!"
-msgstr "個人首頁位址錯誤"
-
 #: lib/webcolor.php:123
 #, php-format
 msgid "%s is not a valid color! Use 3 or 6 hex chars."
 msgstr ""
-
-#: lib/xmppmanager.php:403
-#, php-format
-msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
diff --git a/plugins/DisqusPlugin.php b/plugins/DisqusPlugin.php
new file mode 100644 (file)
index 0000000..dc56f32
--- /dev/null
@@ -0,0 +1,171 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to add Disqus commenting to notice pages
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Plugin
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ *
+ * This plugin adds Disqus commenting to your notices. Enabling this
+ * plugin will make each notice page display the Disqus widget, and
+ * notice lists will display the number of commments each notice has.
+ *
+ * To use this plugin, you need to first register your site with Disqus
+ * and get a Discus 'shortname' for it.
+ *
+ *    http://disqus.com
+ *
+ * To enable the plugin, put the following in you config.php:
+ *
+ * addPlugin(
+ *   'Disqus', array(
+ *       'shortname' => 'YOURSHORTNAME',
+ *      'div_style' => 'width:675px; padding-top:10px; position:relative; float:left;'
+ *   )
+ * );
+ *
+ * NOTE: the 'div_style' in an optional parameter that passes in some
+ * inline CSS when creating the Disqus widget. It's a shortcut to make
+ * the widget look OK with the default StatusNet theme. If you leave
+ * it out you'll have to edit your theme CSS files to make the widget
+ * look good.  You can also control the way the widget looks by
+ * adding style rules to your theme.
+ *
+ * See: http://help.disqus.com/entries/100878-css-customization
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Zach Copley <zach@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ *
+ * @see      Event
+ */
+
+class DisqusPlugin extends Plugin
+{
+    function onEndShowContentBlock($action)
+    {
+        if (get_class($action) == 'ShownoticeAction') {
+
+            $attrs = array();
+            $attrs['id'] = 'disqus_thread';
+
+            if ($this->div_style) {
+                $attrs['style'] = $this->div_style;
+            }
+
+            $action->element('div', $attrs, null);
+
+            $script = <<<ENDOFSCRIPT
+var disqus_identifier = %d;
+  (function() {
+   var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+   dsq.src = 'http://%s.disqus.com/embed.js';
+   (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+  })();
+ENDOFSCRIPT;
+
+            $action->inlineScript(sprintf($script, $action->notice->id, $this->shortname));
+
+            $attrs = array();
+
+            $attrs['id'] = 'disqus_thread_footer';
+
+            if ($this->div_style) {
+                $attrs['style'] = $this->div_style;
+            }
+
+            $action->elementStart('div', $attrs);
+            $action->elementStart('noscript');
+
+            $action->raw('Please enable JavaScript to view the ');
+            $noscriptUrl = 'http://disqus.com/?ref_noscript=' . $this->shortname;
+            $action->element('a', array('href' => $noscriptUrl), 'comments powered by Disqus.');
+            $action->elementEnd('noscript');
+
+            $action->elementStart('a', array('href' => 'http://disqus.com', 'class' => 'dsq-brlink'));
+            $action->raw('blog comments powered by ');
+            $action->element('span', array('class' => 'logo-disqus'), 'Disqus');
+            $action->elementEnd('a');
+            $action->elementEnd('div');
+        }
+    }
+
+    function onEndShowScripts($action)
+    {
+        // fugly
+        $script = <<<ENDOFSCRIPT
+var disqus_shortname = '%s';
+(function () {
+  var s = document.createElement('script'); s.async = true;
+  s.src = 'http://disqus.com/forums/%s/count.js';
+  (document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
+}());
+ENDOFSCRIPT;
+        $action->inlineScript(sprintf($script, $this->shortname, $this->shortname));
+
+        return true;
+    }
+
+    function onStartShowNoticeItem($noticeListItem)
+    {
+        if (empty($noticeListItem->notice->is_local)) {
+            return true;
+        }
+
+        $noticeListItem->showNotice();
+        $noticeListItem->showNoticeInfo();
+
+        $noticeUrl = $noticeListItem->notice->bestUrl();
+        $noticeUrl .= '#disqus_thread';
+
+        $noticeListItem->out->element(
+            'a', array('href' => $noticeUrl, 'class' => 'disqus_count', 'Comments')
+        );
+
+        $noticeListItem->showNoticeOptions();
+        Event::handle('EndShowNoticeItem', array($noticeListItem));
+
+        return false;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Disqus',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Zach Copley',
+                            'homepage' => 'http://status.net/wiki/Plugin:Disqus',
+                            'rawdescription' =>
+                            _m('Use <a href="http://disqus.com/">Disqus</a>'.
+                               ' to add commenting to notice pages.'));
+        return true;
+    }
+}
diff --git a/plugins/EchoPlugin.php b/plugins/EchoPlugin.php
new file mode 100644 (file)
index 0000000..7b51866
--- /dev/null
@@ -0,0 +1,116 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to add Echo/JS-Kit commenting to notice pages
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  Plugin
+ * @package   StatusNet
+ * @author    Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+/**
+ * Plugin to use Echo (formerly JS-Kit)
+ *
+ * This plugin adds an Echo commenting widget to each notice page on
+ * your site.  To get it to work, first you'll have to sign up for Echo
+ * (a for-pay service) and register your site's URL.
+ *
+ *     http://aboutecho.com/
+ *
+ * Once you've done that it's pretty straight forward to turn the
+ * plugin on; just add this to your config.php:
+ *
+ *     addPlugin(
+ *        'Echo',
+ *        array('div_style' => 'width:675px; padding-top:10px; position:relative; float:left;')
+ *     );
+ *
+ * NOTE: the 'div_style' in an optional parameter that passes in some
+ * inline CSS when creating the Echo widget. It's a shortcut to make
+ * the widget look OK with the default StatusNet theme. If you leave
+ * it out you'll have to edit your theme CSS files to make the widget
+ * look good. You can also control the way the widget looks by
+ * adding style rules to your theme.
+ *
+ * See: http://wiki.js-kit.com/Skinning-Guide#UsingCSSnbsptocustomizefontsandcolors
+ *
+ * @category Plugin
+ * @package  StatusNet
+ * @author   Zach Copley <zach@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link     http://status.net/
+ *
+ * @see      Event
+ */
+
+class EchoPlugin extends Plugin
+{
+    // NOTE: The Echo documentation says that this script will change on
+    // a per site basis, but I think that's incorrect. It always seems to
+    // be the same.
+    public $script = 'http://cdn.js-kit.com/scripts/comments.js';
+
+    function onEndShowScripts($action)
+    {
+        if (get_class($action) == 'ShownoticeAction') {
+            $action->script($this->script);
+        }
+
+        return true;
+    }
+
+    function onEndShowContentBlock($action)
+    {
+        if (get_class($action) == 'ShownoticeAction') {
+
+            $attrs = array();
+            $attrs['class'] = 'js-kit-comments';
+            $attrs['permalink'] = $action->notice->uri;
+            $attrs['uniq'] = $action->notice->id;
+
+            // NOTE: there are some other attributes that could be useful
+            // http://wiki.js-kit.com/Echo-Behavior
+
+            if (!empty($this->div_style)) {
+                $attrs['style'] = $this->div_style;
+            }
+
+            $action->element('div', $attrs, null);
+        }
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'Echo',
+                            'version' => STATUSNET_VERSION,
+                            'author' => 'Zach Copley',
+                            'homepage' => 'http://status.net/wiki/Plugin:Echo',
+                            'rawdescription' =>
+                            _m('Use <a href="http://aboutecho.com/">Echo</a>'.
+                               ' to add commenting to notice pages.'));
+        return true;
+    }
+}
diff --git a/plugins/NoticeTitle/NoticeTitlePlugin.php b/plugins/NoticeTitle/NoticeTitlePlugin.php
new file mode 100644 (file)
index 0000000..f7fb1e4
--- /dev/null
@@ -0,0 +1,282 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A plugin to add titles to notices
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  NoticeTitle
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+define('NOTICE_TITLE_PLUGIN_VERSION', '0.1');
+
+/**
+ * NoticeTitle plugin to add an optional title to notices.
+ *
+ * Stores notice titles in a secondary table, notice_title.
+ *
+ * @category  NoticeTitle
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+
+class NoticeTitlePlugin extends Plugin
+{
+    /**
+     * Database schema setup
+     *
+     * Add the notice_title helper table
+     *
+     * @see Schema
+     * @see ColumnDef
+     *
+     * @return boolean hook value; true means continue processing, false means stop.
+     */
+
+    function onCheckSchema()
+    {
+        $schema = Schema::get();
+
+        // For storing titles for notices
+
+        $schema->ensureTable('notice_title',
+                             array(new ColumnDef('notice_id',
+                                                 'integer',
+                                                 null,
+                                                 true,
+                                                 'PRI'),
+                                   new ColumnDef('title',
+                                                 'varchar',
+                                                 Notice_title::MAXCHARS,
+                                                 false)));
+
+        return true;
+    }
+
+    /**
+     * Load related modules when needed
+     *
+     * @param string $cls Name of the class to be loaded
+     *
+     * @return boolean hook value; true means continue processing, false means stop.
+     */
+
+    function onAutoload($cls)
+    {
+        $dir = dirname(__FILE__);
+
+        switch ($cls)
+        {
+        case 'Notice_title':
+            include_once $dir . '/'.$cls.'.php';
+            return false;
+        default:
+            return true;
+        }
+    }
+
+    /**
+     * Provide plugin version information.
+     *
+     * This data is used when showing the version page.
+     *
+     * @param array &$versions array of version data arrays; see EVENTS.txt
+     *
+     * @return boolean hook value
+     */
+
+    function onPluginVersion(&$versions)
+    {
+        $url = 'http://status.net/wiki/Plugin:NoticeTitle';
+
+        $versions[] = array('name' => 'NoticeTitle',
+                            'version' => NOTICE_TITLE_PLUGIN_VERSION,
+                            'author' => 'Evan Prodromou',
+                            'homepage' => $url,
+                            'rawdescription' =>
+                            _m('Adds optional titles to notices'));
+        return true;
+    }
+
+    /**
+     * Show title entry when showing notice form
+     *
+     * @param Form $form Form being shown
+     *
+     * @return boolean hook value
+     */
+
+    function onStartShowNoticeFormData($form)
+    {
+        $form->out->element('style',
+                            null,
+                            'label#notice_data-text-label { display: none }');
+        $form->out->element('input', array('type' => 'text',
+                                           'id' => 'notice_title',
+                                           'name' => 'notice_title',
+                                           'size' => 40,
+                                           'maxlength' => Notice_title::MAXCHARS));
+        return true;
+    }
+
+    /**
+     * Validate notice title before saving
+     *
+     * @param Action  $action    NewNoticeAction being executed
+     * @param integer &$authorId Author ID
+     * @param string  &$text     Text of the notice
+     * @param array   &$options  Options array
+     *
+     * @return boolean hook value
+     */
+
+    function onStartNoticeSaveWeb($action, &$authorId, &$text, &$options)
+    {
+        $title = $action->trimmed('notice_title');
+        if (!empty($title)) {
+            if (mb_strlen($title) > Notice_title::MAXCHARS) {
+                throw new Exception(sprintf(_m("Notice title too long (max %d)",
+                                               Notice_title::MAXCHARS)));
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Save notice title after notice is saved
+     *
+     * @param Action $action NewNoticeAction being executed
+     * @param Notice $notice Notice that was saved
+     *
+     * @return boolean hook value
+     */
+
+    function onEndNoticeSaveWeb($action, $notice)
+    {
+        if (!empty($notice)) {
+
+            $title = $action->trimmed('notice_title');
+
+            if (!empty($title)) {
+
+                $nt = new Notice_title();
+
+                $nt->notice_id = $notice->id;
+                $nt->title     = $title;
+
+                $nt->insert();
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Show the notice title in lists
+     *
+     * @param NoticeListItem $nli NoticeListItem being shown
+     *
+     * @return boolean hook value
+     */
+
+    function onStartShowNoticeItem($nli)
+    {
+        $title = Notice_title::fromNotice($nli->notice);
+
+        if (!empty($title)) {
+            $nli->out->element('h4', array('class' => 'notice_title'), $title);
+        }
+
+        return true;
+    }
+
+    /**
+     * Show the notice title in RSS output
+     *
+     * @param Notice $notice Notice being shown
+     * @param array  &$entry array of values used for RSS output
+     *
+     * @return boolean hook value
+     */
+
+    function onEndRssEntryArray($notice, &$entry)
+    {
+        $title = Notice_title::fromNotice($notice);
+
+        if (!empty($title)) {
+            $entry['title'] = $title;
+        }
+
+        return true;
+    }
+
+    /**
+     * Show the notice title in Atom output
+     *
+     * @param Notice      &$notice Notice being shown
+     * @param XMLStringer &$xs     output context
+     * @param string      &$output string to be output as title
+     *
+     * @return boolean hook value
+     */
+
+    function onStartActivityTitle(&$notice, &$xs, &$output)
+    {
+        $title = Notice_title::fromNotice($notice);
+
+        if (!empty($title)) {
+            $output = $title;
+        }
+
+        return true;
+    }
+
+    /**
+     * Remove title when the notice is deleted
+     *
+     * @param Notice $notice Notice being deleted
+     *
+     * @return boolean hook value
+     */
+
+    function onNoticeDeleteRelated($notice)
+    {
+        $nt = Notice_title::staticGet('notice_id', $notice->id);
+
+        if (!empty($nt)) {
+            $nt->delete();
+        }
+
+        return true;
+    }
+}
+
diff --git a/plugins/NoticeTitle/Notice_title.php b/plugins/NoticeTitle/Notice_title.php
new file mode 100644 (file)
index 0000000..b66ea99
--- /dev/null
@@ -0,0 +1,138 @@
+<?php
+/**
+ * Data class for notice titles
+ *
+ * PHP version 5
+ *
+ * @category Data
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link     http://status.net/
+ *
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET')) {
+    exit(1);
+}
+
+require_once INSTALLDIR . '/classes/Memcached_DataObject.php';
+
+/**
+ * Data class for notice titles
+ *
+ * @category Action
+ * @package  StatusNet
+ * @author   Evan Prodromou <evan@status.net>
+ * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link     http://status.net/
+ *
+ * @see      DB_DataObject
+ */
+
+class Notice_title extends Memcached_DataObject
+{
+    const MAXCHARS = 255;
+
+    public $__table = 'notice_title'; // table name
+    public $notice_id;                         // int(4)  primary_key not_null
+    public $title;                             // varchar(255)
+
+    /**
+     * Get an instance by key
+     *
+     * This is a utility method to get a single instance with a given key value.
+     *
+     * @param string $k Key to use to lookup (usually 'user_id' for this class)
+     * @param mixed  $v Value to lookup
+     *
+     * @return Notice_title object found, or null for no hits
+     *
+     */
+
+    function staticGet($k, $v=null)
+    {
+        return Memcached_DataObject::staticGet('Notice_title', $k, $v);
+    }
+
+    /**
+     * return table definition for DB_DataObject
+     *
+     * DB_DataObject needs to know something about the table to manipulate
+     * instances. This method provides all the DB_DataObject needs to know.
+     *
+     * @return array array of column definitions
+     */
+
+    function table()
+    {
+        return array('notice_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+                     'title' => DB_DATAOBJECT_STR);
+    }
+
+    /**
+     * return key definitions for DB_DataObject
+     *
+     * @return array list of key field names
+     */
+
+    function keys()
+    {
+        return array_keys($this->keyTypes());
+    }
+
+    /**
+     * return key definitions for Memcached_DataObject
+     *
+     * @return array list mapping field names to key types
+     */
+
+    function keyTypes()
+    {
+        return array('notice_id' => 'K');
+    }
+
+    /**
+     * Magic formula for non-autoincrementing integer primary keys
+     *
+     * @return array magic three-false array that stops auto-incrementing.
+     */
+
+    function sequenceKey()
+    {
+        return array(false, false, false);
+    }
+
+    /**
+     * Get a notice title based on the notice
+     *
+     * @param Notice $notice Notice to fetch a title for
+     *
+     * @return string title of the notice, or null if none
+     */
+
+    static function fromNotice($notice)
+    {
+        $nt = Notice_title::staticGet('notice_id', $notice->id);
+        if (empty($nt)) {
+            return null;
+        } else {
+            return $nt->title;
+        }
+    }
+}
index 6fef20d6f59172a085d345445ced56adce66a8ca..76ffd511b54d5baf3e67418cad9a2bbd1e4b6d04 100644 (file)
@@ -247,17 +247,6 @@ class OStatusPlugin extends Plugin
         return true;
     }
 
-    /**
-     * Check if we've got remote replies to send via Salmon.
-     *
-     * @fixme push webfinger lookup & sending to a background queue
-     * @fixme also detect short-form name for remote subscribees where not ambiguous
-     */
-
-    function onEndNoticeSave($notice)
-    {
-    }
-
     /**
      * Find any explicit remote mentions. Accepted forms:
      *   Webfinger: @user@example.com
@@ -492,7 +481,7 @@ class OStatusPlugin extends Plugin
      * Tell the FeedSub infrastructure whether we have any active OStatus
      * usage for the feed; if not it'll be able to garbage-collect the
      * feed subscription.
-     * 
+     *
      * @param FeedSub $feedsub
      * @param integer $count in/out
      * @return mixed hook return code
index a95612a7ff765222aea38954fd950baf6bad5b69..cc4307b14f119c625e56ee606d2207c5a134c925 100644 (file)
@@ -459,6 +459,7 @@ class Ostatus_profile extends Memcached_DataObject
             case ActivityObject::NOTE:
             case ActivityObject::STATUS:
             case ActivityObject::COMMENT:
+                       case null:
                 if ($activity->verb == ActivityVerb::POST) {
                     $this->processPost($activity, $source);
                 } else {
diff --git a/plugins/TinyMCE/TinyMCEPlugin.php b/plugins/TinyMCE/TinyMCEPlugin.php
new file mode 100644 (file)
index 0000000..ca16f60
--- /dev/null
@@ -0,0 +1,325 @@
+<?php
+
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * Use TinyMCE library to allow rich text editing in the browser
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category  WYSIWYG
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+if (!defined('STATUSNET')) {
+    // This check helps protect against security problems;
+    // your code file can't be executed directly from the web.
+    exit(1);
+}
+
+/**
+ * Use TinyMCE library to allow rich text editing in the browser
+ *
+ * Converts the notice form in browser to a rich-text editor.
+ *
+ * @category  WYSIWYG
+ * @package   StatusNet
+ * @author    Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link      http://status.net/
+ */
+class TinyMCEPlugin extends Plugin
+{
+
+    var $html;
+
+    function onEndShowScripts($action)
+    {
+        if (common_logged_in ()) {
+            $action->script(common_path('plugins/TinyMCE/js/jquery.tinymce.js'));
+            $action->inlineScript($this->_inlineScript());
+        }
+
+        return true;
+    }
+
+    function onEndShowStyles($action)
+    {
+        $action->style('span#notice_data-text_container, span#notice_data-text_parent { float: left }');
+        return true;
+    }
+
+    function onPluginVersion(&$versions)
+    {
+        $versions[] = array('name' => 'TinyMCE',
+            'version' => STATUSNET_VERSION,
+            'author' => 'Evan Prodromou',
+            'homepage' => 'http://status.net/wiki/Plugin:TinyMCE',
+            'rawdescription' =>
+            _m('Use TinyMCE library to allow rich text editing in the browser'));
+        return true;
+    }
+
+    /**
+     * Sanitize HTML input and strip out potentially dangerous bits.
+     *
+     * @param string $raw HTML
+     * @return string HTML
+     */
+    private function sanitizeHtml($raw)
+    {
+        require_once INSTALLDIR . '/extlib/htmLawed/htmLawed.php';
+
+        $config = array('safe' => 1,
+            'deny_attribute' => 'id,style,on*');
+
+        return htmLawed($raw, $config);
+    }
+
+    /**
+     * Strip HTML to plaintext string
+     *
+     * @param string $html HTML
+     * @return string plaintext, single line
+     */
+    private function stripHtml($html)
+    {
+        return str_replace("\n", " ", html_entity_decode(strip_tags($html), ENT_QUOTES, 'UTF-8'));
+    }
+
+    /**
+     * Hook for new-notice form processing to take our HTML goodies;
+     * won't affect API posting etc.
+     * 
+     * @param NewNoticeAction $action
+     * @param User $user
+     * @param string $content
+     * @param array $options
+     * @return boolean hook return
+     */
+    function onStartSaveNewNoticeWeb($action, $user, &$content, &$options)
+    {
+        if ($action->arg('richedit')) {
+            $html = $this->sanitizeHtml($content);
+            $options['rendered'] = $html;
+            $content = $this->stripHtml($html);
+        }
+        return true;
+    }
+
+    /**
+     * Hook for new-notice form processing to process file upload appending...
+     *
+     * @param NewNoticeAction $action
+     * @param MediaFile $media
+     * @param string $content
+     * @param array $options
+     * @return boolean hook return
+     */
+    function onStartSaveNewNoticeAppendAttachment($action, $media, &$content, &$options)
+    {
+        if ($action->arg('richedit')) {
+            // See if we've got a placeholder inline image; if so, fill it!
+            $dom = new DOMDocument();
+
+            if ($dom->loadHTML($options['rendered'])) {
+                $imgs = $dom->getElementsByTagName('img');
+                foreach ($imgs as $img) {
+                    if (preg_match('/(^| )placeholder( |$)/', $img->getAttribute('class'))) {
+                        // Create a link to the attachment page...
+                        $this->formatAttachment($img, $media);
+                    }
+                }
+                $options['rendered'] = $this->saveHtml($dom);
+            }
+
+            // The regular code will append the short URL to the plaintext content.
+            // Carry on and let it through...
+        }
+        return true;
+    }
+
+    /**
+     * Format the attachment placeholder img with the final version.
+     * 
+     * @param DOMElement $img
+     * @param MediaFile $media 
+     */
+    private function formatAttachment($img, $media)
+    {
+        $parent = $img->parentNode;
+        $dom = $img->ownerDocument;
+
+        $link = $dom->createElement('a');
+        $link->setAttribute('href', $media->fileurl);
+        $link->setAttribute('title', File::url($media->filename));
+
+        if ($this->isEmbeddable($media)) {
+            // Fix the the <img> attributes and wrap the link around it...
+            $this->insertImage($img, $media);
+            $parent->replaceChild($link, $img); //it dies in here?!
+            $link->appendChild($img);
+        } else {
+            // Not an image? Replace it with a text link.
+            $link->setAttribute('rel', 'external');
+            $link->setAttribute('class', 'attachment');
+            $link->setAttribute('id', 'attachment-' . $media->fileRecord->id);
+            $text = $dom->createTextNode($media->shortUrl());
+            $link->appendChild($text);
+            $parent->replaceChild($link, $img);
+        }
+    }
+
+    /**
+     * Is this media file a type we can display inline?
+     *
+     * @param MediaFile $media
+     * @return boolean
+     */
+    private function isEmbeddable($media)
+    {
+        $showable = array('image/png',
+                          'image/gif',
+                          'image/jpeg');
+        return in_array($media->mimetype, $showable);
+    }
+
+    /**
+     * Rewrite and resize a placeholder image element to match the uploaded
+     * file. If the holder is smaller than the file, the file is scaled to fit
+     * with correct aspect ratio (but will be loaded at full resolution).
+     *
+     * @param DOMElement $img
+     * @param MediaFile $media
+     */
+    private function insertImage($img, $media)
+    {
+        $img->setAttribute('src', $media->fileRecord->url);
+
+        $holderWidth = intval($img->getAttribute('width'));
+        $holderHeight = intval($img->getAttribute('height'));
+
+        $path = File::path($media->filename);
+        $imgInfo = getimagesize($path);
+
+        if ($imgInfo) {
+            $origWidth = $imgInfo[0];
+            $origHeight = $imgInfo[1];
+
+            list($width, $height) = $this->sizeBox(
+                    $origWidth, $origHeight,
+                    $holderWidth, $holderHeight);
+
+            $img->setAttribute('width', $width);
+            $img->setAttribute('height', $height);
+        }
+    }
+
+    /**
+     *
+     * @param int $origWidth
+     * @param int $origHeight
+     * @param int $holderWidth
+     * @param int $holderHeight
+     * @return array($width, $height)
+     */
+    private function sizeBox($origWidth, $origHeight, $holderWidth, $holderHeight)
+    {
+        $holderAspect = $holderWidth / $holderHeight;
+        $origAspect = $origWidth / $origHeight;
+        if ($origAspect >= 1.0) {
+            // wide image
+            if ($origWidth > $holderWidth) {
+                return array($holderWidth, intval($holderWidth / $origAspect));
+            } else {
+                return array($origWidth, $origHeight);
+            }
+        } else {
+            if ($origHeight > $holderHeight) {
+                return array(intval($holderWidth * $origAspect), $holderHeight);
+            } else {
+                return array($origWidth, $origHeight);
+            }
+        }
+    }
+
+    private function saveHtml($dom)
+    {
+        $html = $dom->saveHTML();
+        // hack to remove surrounding crap added to the dom
+        // all we wanted was a fragment
+        $stripped = preg_replace('/^.*<body[^>]*>(.*)<\/body.*$/is', '$1', $html);
+        return $stripped;
+    }
+
+    function _inlineScript()
+    {
+        $path = common_path('plugins/TinyMCE/js/tiny_mce.js');
+        $placeholder = common_path('plugins/TinyMCE/icons/placeholder.png');
+
+        // Note: the normal on-submit triggering to save data from
+        // the HTML editor into the textarea doesn't play well with
+        // our AJAX form submission. Manually moving it to trigger
+        // on our send button click.
+        $scr = <<<END_OF_SCRIPT
+        $().ready(function() {
+            var noticeForm = $('#form_notice');
+            $('textarea#notice_data-text').tinymce({
+                script_url : '{$path}',
+                // General options
+                theme : "advanced",
+                plugins : "paste,fullscreen,autoresize,inlinepopups,tabfocus,linkautodetect",
+                theme_advanced_buttons1 : "bold,italic,strikethrough,|,undo,redo,|,link,unlink,image,|,fullscreen",
+                theme_advanced_buttons2 : "",
+                theme_advanced_buttons3 : "",
+                add_form_submit_trigger : false,
+                theme_advanced_resizing : true,
+                tabfocus_elements: ":prev,:next",
+                setup: function(ed) {
+                    noticeForm.append('<input type="hidden" name="richedit" value="1">');
+
+                    $('#notice_action-submit').click(function() {
+                        tinymce.triggerSave();
+                    });
+
+                    var origCounter = SN.U.CharacterCount;
+                    SN.U.CharacterCount = function(form) {
+                        var text = $(ed.getDoc()).text();
+                        return text.length;
+                    };
+                    ed.onKeyUp.add(function (ed, e) {
+                        SN.U.Counter(noticeForm);
+                    });
+
+                    $('#'+SN.C.S.NoticeDataAttach).change(function() {
+                        var img = '<img src="{$placeholder}" class="placeholder" width="320" height="240">';
+                        var html = tinyMCE.activeEditor.getContent();
+                        ed.setContent(html + img);
+                    });
+                }
+            });
+        });
+END_OF_SCRIPT;
+
+        return $scr;
+    }
+
+}
diff --git a/plugins/TinyMCE/icons/placeholder.png b/plugins/TinyMCE/icons/placeholder.png
new file mode 100644 (file)
index 0000000..911f257
Binary files /dev/null and b/plugins/TinyMCE/icons/placeholder.png differ
diff --git a/plugins/TinyMCE/icons/placeholder.xcf b/plugins/TinyMCE/icons/placeholder.xcf
new file mode 100644 (file)
index 0000000..e05f8a9
Binary files /dev/null and b/plugins/TinyMCE/icons/placeholder.xcf differ
diff --git a/plugins/TinyMCE/js/jquery.tinymce.js b/plugins/TinyMCE/js/jquery.tinymce.js
new file mode 100644 (file)
index 0000000..4866c2a
--- /dev/null
@@ -0,0 +1 @@
+(function(b){var e,d,a=[],c=window;b.fn.tinymce=function(j){var p=this,g,k,h,m,i,l="",n="";if(!p.length){return p}if(!j){return tinyMCE.get(p[0].id)}function o(){var r=[],q=0;if(f){f();f=null}p.each(function(t,u){var s,w=u.id,v=j.oninit;if(!w){u.id=w=tinymce.DOM.uniqueId()}s=new tinymce.Editor(w,j);r.push(s);if(v){s.onInit.add(function(){var x,y=v;if(++q==r.length){if(tinymce.is(y,"string")){x=(y.indexOf(".")===-1)?null:tinymce.resolve(y.replace(/\.\w+$/,""));y=tinymce.resolve(y)}y.apply(x||tinymce,r)}})}});b.each(r,function(t,s){s.render()})}if(!c.tinymce&&!d&&(g=j.script_url)){d=1;h=g.substring(0,g.lastIndexOf("/"));if(/_(src|dev)\.js/g.test(g)){n="_src"}m=g.lastIndexOf("?");if(m!=-1){l=g.substring(m+1)}c.tinyMCEPreInit=c.tinyMCEPreInit||{base:h,suffix:n,query:l};if(g.indexOf("gzip")!=-1){i=j.language||"en";g=g+(/\?/.test(g)?"&":"?")+"js=true&core=true&suffix="+escape(n)+"&themes="+escape(j.theme)+"&plugins="+escape(j.plugins)+"&languages="+i;if(!c.tinyMCE_GZ){tinyMCE_GZ={start:function(){tinymce.suffix=n;function q(r){tinymce.ScriptLoader.markDone(tinyMCE.baseURI.toAbsolute(r))}q("langs/"+i+".js");q("themes/"+j.theme+"/editor_template"+n+".js");q("themes/"+j.theme+"/langs/"+i+".js");b.each(j.plugins.split(","),function(s,r){if(r){q("plugins/"+r+"/editor_plugin"+n+".js");q("plugins/"+r+"/langs/"+i+".js")}})},end:function(){}}}}b.ajax({type:"GET",url:g,dataType:"script",cache:true,success:function(){tinymce.dom.Event.domLoaded=1;d=2;if(j.script_loaded){j.script_loaded()}o();b.each(a,function(q,r){r()})}})}else{if(d===1){a.push(o)}else{o()}}return p};b.extend(b.expr[":"],{tinymce:function(g){return g.id&&!!tinyMCE.get(g.id)}});function f(){function i(l){if(l==="remove"){this.each(function(n,o){var m=h(o);if(m){m.remove()}})}this.find("span.mceEditor,div.mceEditor").each(function(n,o){var m=tinyMCE.get(o.id.replace(/_parent$/,""));if(m){m.remove()}})}function k(n){var m=this,l;if(n!==e){i.call(m);m.each(function(p,q){var o;if(o=tinyMCE.get(q.id)){o.setContent(n)}})}else{if(m.length>0){if(l=tinyMCE.get(m[0].id)){return l.getContent()}}}}function h(m){var l=null;(m)&&(m.id)&&(c.tinymce)&&(l=tinyMCE.get(m.id));return l}function g(l){return !!((l)&&(l.length)&&(c.tinymce)&&(l.is(":tinymce")))}var j={};b.each(["text","html","val"],function(n,l){var o=j[l]=b.fn[l],m=(l==="text");b.fn[l]=function(s){var p=this;if(!g(p)){return o.apply(p,arguments)}if(s!==e){k.call(p.filter(":tinymce"),s);o.apply(p.not(":tinymce"),arguments);return p}else{var r="";var q=arguments;(m?p:p.eq(0)).each(function(u,v){var t=h(v);r+=t?(m?t.getContent().replace(/<(?:"[^"]*"|'[^']*'|[^'">])*>/g,""):t.getContent()):o.apply(b(v),q)});return r}}});b.each(["append","prepend"],function(n,m){var o=j[m]=b.fn[m],l=(m==="prepend");b.fn[m]=function(q){var p=this;if(!g(p)){return o.apply(p,arguments)}if(q!==e){p.filter(":tinymce").each(function(s,t){var r=h(t);r&&r.setContent(l?q+r.getContent():r.getContent()+q)});o.apply(p.not(":tinymce"),arguments);return p}}});b.each(["remove","replaceWith","replaceAll","empty"],function(m,l){var n=j[l]=b.fn[l];b.fn[l]=function(){i.call(this,l);return n.apply(this,arguments)}});j.attr=b.fn.attr;b.fn.attr=function(n,q,o){var m=this;if((!n)||(n!=="value")||(!g(m))){return j.attr.call(m,n,q,o)}if(q!==e){k.call(m.filter(":tinymce"),q);j.attr.call(m.not(":tinymce"),n,q,o);return m}else{var p=m[0],l=h(p);return l?l.getContent():j.attr.call(b(p),n,q,o)}}}})(jQuery);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/langs/en.js b/plugins/TinyMCE/js/langs/en.js
new file mode 100644 (file)
index 0000000..ea4a1b0
--- /dev/null
@@ -0,0 +1,170 @@
+tinyMCE.addI18n({en:{\r
+common:{\r
+edit_confirm:"Do you want to use the WYSIWYG mode for this textarea?",\r
+apply:"Apply",\r
+insert:"Insert",\r
+update:"Update",\r
+cancel:"Cancel",\r
+close:"Close",\r
+browse:"Browse",\r
+class_name:"Class",\r
+not_set:"-- Not set --",\r
+clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?",\r
+clipboard_no_support:"Currently not supported by your browser, use keyboard shortcuts instead.",\r
+popup_blocked:"Sorry, but we have noticed that your popup-blocker has disabled a window that provides application functionality. You will need to disable popup blocking on this site in order to fully utilize this tool.",\r
+invalid_data:"Error: Invalid values entered, these are marked in red.",\r
+more_colors:"More colors"\r
+},\r
+contextmenu:{\r
+align:"Alignment",\r
+left:"Left",\r
+center:"Center",\r
+right:"Right",\r
+full:"Full"\r
+},\r
+insertdatetime:{\r
+date_fmt:"%Y-%m-%d",\r
+time_fmt:"%H:%M:%S",\r
+insertdate_desc:"Insert date",\r
+inserttime_desc:"Insert time",\r
+months_long:"January,February,March,April,May,June,July,August,September,October,November,December",\r
+months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",\r
+day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",\r
+day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"\r
+},\r
+print:{\r
+print_desc:"Print"\r
+},\r
+preview:{\r
+preview_desc:"Preview"\r
+},\r
+directionality:{\r
+ltr_desc:"Direction left to right",\r
+rtl_desc:"Direction right to left"\r
+},\r
+layer:{\r
+insertlayer_desc:"Insert new layer",\r
+forward_desc:"Move forward",\r
+backward_desc:"Move backward",\r
+absolute_desc:"Toggle absolute positioning",\r
+content:"New layer..."\r
+},\r
+save:{\r
+save_desc:"Save",\r
+cancel_desc:"Cancel all changes"\r
+},\r
+nonbreaking:{\r
+nonbreaking_desc:"Insert non-breaking space character"\r
+},\r
+iespell:{\r
+iespell_desc:"Run spell checking",\r
+download:"ieSpell not detected. Do you want to install it now?"\r
+},\r
+advhr:{\r
+advhr_desc:"Horizontal rule"\r
+},\r
+emotions:{\r
+emotions_desc:"Emotions"\r
+},\r
+searchreplace:{\r
+search_desc:"Find",\r
+replace_desc:"Find/Replace"\r
+},\r
+advimage:{\r
+image_desc:"Insert/edit image"\r
+},\r
+advlink:{\r
+link_desc:"Insert/edit link"\r
+},\r
+xhtmlxtras:{\r
+cite_desc:"Citation",\r
+abbr_desc:"Abbreviation",\r
+acronym_desc:"Acronym",\r
+del_desc:"Deletion",\r
+ins_desc:"Insertion",\r
+attribs_desc:"Insert/Edit Attributes"\r
+},\r
+style:{\r
+desc:"Edit CSS Style"\r
+},\r
+paste:{\r
+paste_text_desc:"Paste as Plain Text",\r
+paste_word_desc:"Paste from Word",\r
+selectall_desc:"Select All",\r
+plaintext_mode_sticky:"Paste is now in plain text mode. Click again to toggle back to regular paste mode. After you paste something you will be returned to regular paste mode.",\r
+plaintext_mode:"Paste is now in plain text mode. Click again to toggle back to regular paste mode."\r
+},\r
+paste_dlg:{\r
+text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
+text_linebreaks:"Keep linebreaks",\r
+word_title:"Use CTRL+V on your keyboard to paste the text into the window."\r
+},\r
+table:{\r
+desc:"Inserts a new table",\r
+row_before_desc:"Insert row before",\r
+row_after_desc:"Insert row after",\r
+delete_row_desc:"Delete row",\r
+col_before_desc:"Insert column before",\r
+col_after_desc:"Insert column after",\r
+delete_col_desc:"Remove column",\r
+split_cells_desc:"Split merged table cells",\r
+merge_cells_desc:"Merge table cells",\r
+row_desc:"Table row properties",\r
+cell_desc:"Table cell properties",\r
+props_desc:"Table properties",\r
+paste_row_before_desc:"Paste table row before",\r
+paste_row_after_desc:"Paste table row after",\r
+cut_row_desc:"Cut table row",\r
+copy_row_desc:"Copy table row",\r
+del:"Delete table",\r
+row:"Row",\r
+col:"Column",\r
+cell:"Cell"\r
+},\r
+autosave:{\r
+unload_msg:"The changes you made will be lost if you navigate away from this page.",\r
+restore_content:"Restore auto-saved content.",\r
+warning_message:"If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?."\r
+},\r
+fullscreen:{\r
+desc:"Toggle fullscreen mode"\r
+},\r
+media:{\r
+desc:"Insert / edit embedded media",\r
+edit:"Edit embedded media"\r
+},\r
+fullpage:{\r
+desc:"Document properties"\r
+},\r
+template:{\r
+desc:"Insert predefined template content"\r
+},\r
+visualchars:{\r
+desc:"Visual control characters on/off."\r
+},\r
+spellchecker:{\r
+desc:"Toggle spellchecker",\r
+menu:"Spellchecker settings",\r
+ignore_word:"Ignore word",\r
+ignore_words:"Ignore all",\r
+langs:"Languages",\r
+wait:"Please wait...",\r
+sug:"Suggestions",\r
+no_sug:"No suggestions",\r
+no_mpell:"No misspellings found."\r
+},\r
+pagebreak:{\r
+desc:"Insert page break."\r
+},\r
+advlist:{\r
+types:"Types",\r
+def:"Default",\r
+lower_alpha:"Lower alpha",\r
+lower_greek:"Lower greek",\r
+lower_roman:"Lower roman",\r
+upper_alpha:"Upper alpha",\r
+upper_roman:"Upper roman",\r
+circle:"Circle",\r
+disc:"Disc",\r
+square:"Square"\r
+}}});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/license.txt b/plugins/TinyMCE/js/license.txt
new file mode 100644 (file)
index 0000000..60d6d4c
--- /dev/null
@@ -0,0 +1,504 @@
+                 GNU LESSER GENERAL PUBLIC LICENSE\r
+                      Version 2.1, February 1999\r
+\r
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.\r
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
+ Everyone is permitted to copy and distribute verbatim copies\r
+ of this license document, but changing it is not allowed.\r
+\r
+[This is the first released version of the Lesser GPL.  It also counts\r
+ as the successor of the GNU Library Public License, version 2, hence\r
+ the version number 2.1.]\r
+\r
+                           Preamble\r
+\r
+  The licenses for most software are designed to take away your\r
+freedom to share and change it.  By contrast, the GNU General Public\r
+Licenses are intended to guarantee your freedom to share and change\r
+free software--to make sure the software is free for all its users.\r
+\r
+  This license, the Lesser General Public License, applies to some\r
+specially designated software packages--typically libraries--of the\r
+Free Software Foundation and other authors who decide to use it.  You\r
+can use it too, but we suggest you first think carefully about whether\r
+this license or the ordinary General Public License is the better\r
+strategy to use in any particular case, based on the explanations below.\r
+\r
+  When we speak of free software, we are referring to freedom of use,\r
+not price.  Our General Public Licenses are designed to make sure that\r
+you have the freedom to distribute copies of free software (and charge\r
+for this service if you wish); that you receive source code or can get\r
+it if you want it; that you can change the software and use pieces of\r
+it in new free programs; and that you are informed that you can do\r
+these things.\r
+\r
+  To protect your rights, we need to make restrictions that forbid\r
+distributors to deny you these rights or to ask you to surrender these\r
+rights.  These restrictions translate to certain responsibilities for\r
+you if you distribute copies of the library or if you modify it.\r
+\r
+  For example, if you distribute copies of the library, whether gratis\r
+or for a fee, you must give the recipients all the rights that we gave\r
+you.  You must make sure that they, too, receive or can get the source\r
+code.  If you link other code with the library, you must provide\r
+complete object files to the recipients, so that they can relink them\r
+with the library after making changes to the library and recompiling\r
+it.  And you must show them these terms so they know their rights.\r
+\r
+  We protect your rights with a two-step method: (1) we copyright the\r
+library, and (2) we offer you this license, which gives you legal\r
+permission to copy, distribute and/or modify the library.\r
+\r
+  To protect each distributor, we want to make it very clear that\r
+there is no warranty for the free library.  Also, if the library is\r
+modified by someone else and passed on, the recipients should know\r
+that what they have is not the original version, so that the original\r
+author's reputation will not be affected by problems that might be\r
+introduced by others.\r
+\r
+  Finally, software patents pose a constant threat to the existence of\r
+any free program.  We wish to make sure that a company cannot\r
+effectively restrict the users of a free program by obtaining a\r
+restrictive license from a patent holder.  Therefore, we insist that\r
+any patent license obtained for a version of the library must be\r
+consistent with the full freedom of use specified in this license.\r
+\r
+  Most GNU software, including some libraries, is covered by the\r
+ordinary GNU General Public License.  This license, the GNU Lesser\r
+General Public License, applies to certain designated libraries, and\r
+is quite different from the ordinary General Public License.  We use\r
+this license for certain libraries in order to permit linking those\r
+libraries into non-free programs.\r
+\r
+  When a program is linked with a library, whether statically or using\r
+a shared library, the combination of the two is legally speaking a\r
+combined work, a derivative of the original library.  The ordinary\r
+General Public License therefore permits such linking only if the\r
+entire combination fits its criteria of freedom.  The Lesser General\r
+Public License permits more lax criteria for linking other code with\r
+the library.\r
+\r
+  We call this license the "Lesser" General Public License because it\r
+does Less to protect the user's freedom than the ordinary General\r
+Public License.  It also provides other free software developers Less\r
+of an advantage over competing non-free programs.  These disadvantages\r
+are the reason we use the ordinary General Public License for many\r
+libraries.  However, the Lesser license provides advantages in certain\r
+special circumstances.\r
+\r
+  For example, on rare occasions, there may be a special need to\r
+encourage the widest possible use of a certain library, so that it becomes\r
+a de-facto standard.  To achieve this, non-free programs must be\r
+allowed to use the library.  A more frequent case is that a free\r
+library does the same job as widely used non-free libraries.  In this\r
+case, there is little to gain by limiting the free library to free\r
+software only, so we use the Lesser General Public License.\r
+\r
+  In other cases, permission to use a particular library in non-free\r
+programs enables a greater number of people to use a large body of\r
+free software.  For example, permission to use the GNU C Library in\r
+non-free programs enables many more people to use the whole GNU\r
+operating system, as well as its variant, the GNU/Linux operating\r
+system.\r
+\r
+  Although the Lesser General Public License is Less protective of the\r
+users' freedom, it does ensure that the user of a program that is\r
+linked with the Library has the freedom and the wherewithal to run\r
+that program using a modified version of the Library.\r
+\r
+  The precise terms and conditions for copying, distribution and\r
+modification follow.  Pay close attention to the difference between a\r
+"work based on the library" and a "work that uses the library".  The\r
+former contains code derived from the library, whereas the latter must\r
+be combined with the library in order to run.\r
+\r
+                 GNU LESSER GENERAL PUBLIC LICENSE\r
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\r
+\r
+  0. This License Agreement applies to any software library or other\r
+program which contains a notice placed by the copyright holder or\r
+other authorized party saying it may be distributed under the terms of\r
+this Lesser General Public License (also called "this License").\r
+Each licensee is addressed as "you".\r
+\r
+  A "library" means a collection of software functions and/or data\r
+prepared so as to be conveniently linked with application programs\r
+(which use some of those functions and data) to form executables.\r
+\r
+  The "Library", below, refers to any such software library or work\r
+which has been distributed under these terms.  A "work based on the\r
+Library" means either the Library or any derivative work under\r
+copyright law: that is to say, a work containing the Library or a\r
+portion of it, either verbatim or with modifications and/or translated\r
+straightforwardly into another language.  (Hereinafter, translation is\r
+included without limitation in the term "modification".)\r
+\r
+  "Source code" for a work means the preferred form of the work for\r
+making modifications to it.  For a library, complete source code means\r
+all the source code for all modules it contains, plus any associated\r
+interface definition files, plus the scripts used to control compilation\r
+and installation of the library.\r
+\r
+  Activities other than copying, distribution and modification are not\r
+covered by this License; they are outside its scope.  The act of\r
+running a program using the Library is not restricted, and output from\r
+such a program is covered only if its contents constitute a work based\r
+on the Library (independent of the use of the Library in a tool for\r
+writing it).  Whether that is true depends on what the Library does\r
+and what the program that uses the Library does.\r
+  \r
+  1. You may copy and distribute verbatim copies of the Library's\r
+complete source code as you receive it, in any medium, provided that\r
+you conspicuously and appropriately publish on each copy an\r
+appropriate copyright notice and disclaimer of warranty; keep intact\r
+all the notices that refer to this License and to the absence of any\r
+warranty; and distribute a copy of this License along with the\r
+Library.\r
+\r
+  You may charge a fee for the physical act of transferring a copy,\r
+and you may at your option offer warranty protection in exchange for a\r
+fee.\r
+\r
+  2. You may modify your copy or copies of the Library or any portion\r
+of it, thus forming a work based on the Library, and copy and\r
+distribute such modifications or work under the terms of Section 1\r
+above, provided that you also meet all of these conditions:\r
+\r
+    a) The modified work must itself be a software library.\r
+\r
+    b) You must cause the files modified to carry prominent notices\r
+    stating that you changed the files and the date of any change.\r
+\r
+    c) You must cause the whole of the work to be licensed at no\r
+    charge to all third parties under the terms of this License.\r
+\r
+    d) If a facility in the modified Library refers to a function or a\r
+    table of data to be supplied by an application program that uses\r
+    the facility, other than as an argument passed when the facility\r
+    is invoked, then you must make a good faith effort to ensure that,\r
+    in the event an application does not supply such function or\r
+    table, the facility still operates, and performs whatever part of\r
+    its purpose remains meaningful.\r
+\r
+    (For example, a function in a library to compute square roots has\r
+    a purpose that is entirely well-defined independent of the\r
+    application.  Therefore, Subsection 2d requires that any\r
+    application-supplied function or table used by this function must\r
+    be optional: if the application does not supply it, the square\r
+    root function must still compute square roots.)\r
+\r
+These requirements apply to the modified work as a whole.  If\r
+identifiable sections of that work are not derived from the Library,\r
+and can be reasonably considered independent and separate works in\r
+themselves, then this License, and its terms, do not apply to those\r
+sections when you distribute them as separate works.  But when you\r
+distribute the same sections as part of a whole which is a work based\r
+on the Library, the distribution of the whole must be on the terms of\r
+this License, whose permissions for other licensees extend to the\r
+entire whole, and thus to each and every part regardless of who wrote\r
+it.\r
+\r
+Thus, it is not the intent of this section to claim rights or contest\r
+your rights to work written entirely by you; rather, the intent is to\r
+exercise the right to control the distribution of derivative or\r
+collective works based on the Library.\r
+\r
+In addition, mere aggregation of another work not based on the Library\r
+with the Library (or with a work based on the Library) on a volume of\r
+a storage or distribution medium does not bring the other work under\r
+the scope of this License.\r
+\r
+  3. You may opt to apply the terms of the ordinary GNU General Public\r
+License instead of this License to a given copy of the Library.  To do\r
+this, you must alter all the notices that refer to this License, so\r
+that they refer to the ordinary GNU General Public License, version 2,\r
+instead of to this License.  (If a newer version than version 2 of the\r
+ordinary GNU General Public License has appeared, then you can specify\r
+that version instead if you wish.)  Do not make any other change in\r
+these notices.\r
+\r
+  Once this change is made in a given copy, it is irreversible for\r
+that copy, so the ordinary GNU General Public License applies to all\r
+subsequent copies and derivative works made from that copy.\r
+\r
+  This option is useful when you wish to copy part of the code of\r
+the Library into a program that is not a library.\r
+\r
+  4. You may copy and distribute the Library (or a portion or\r
+derivative of it, under Section 2) in object code or executable form\r
+under the terms of Sections 1 and 2 above provided that you accompany\r
+it with the complete corresponding machine-readable source code, which\r
+must be distributed under the terms of Sections 1 and 2 above on a\r
+medium customarily used for software interchange.\r
+\r
+  If distribution of object code is made by offering access to copy\r
+from a designated place, then offering equivalent access to copy the\r
+source code from the same place satisfies the requirement to\r
+distribute the source code, even though third parties are not\r
+compelled to copy the source along with the object code.\r
+\r
+  5. A program that contains no derivative of any portion of the\r
+Library, but is designed to work with the Library by being compiled or\r
+linked with it, is called a "work that uses the Library".  Such a\r
+work, in isolation, is not a derivative work of the Library, and\r
+therefore falls outside the scope of this License.\r
+\r
+  However, linking a "work that uses the Library" with the Library\r
+creates an executable that is a derivative of the Library (because it\r
+contains portions of the Library), rather than a "work that uses the\r
+library".  The executable is therefore covered by this License.\r
+Section 6 states terms for distribution of such executables.\r
+\r
+  When a "work that uses the Library" uses material from a header file\r
+that is part of the Library, the object code for the work may be a\r
+derivative work of the Library even though the source code is not.\r
+Whether this is true is especially significant if the work can be\r
+linked without the Library, or if the work is itself a library.  The\r
+threshold for this to be true is not precisely defined by law.\r
+\r
+  If such an object file uses only numerical parameters, data\r
+structure layouts and accessors, and small macros and small inline\r
+functions (ten lines or less in length), then the use of the object\r
+file is unrestricted, regardless of whether it is legally a derivative\r
+work.  (Executables containing this object code plus portions of the\r
+Library will still fall under Section 6.)\r
+\r
+  Otherwise, if the work is a derivative of the Library, you may\r
+distribute the object code for the work under the terms of Section 6.\r
+Any executables containing that work also fall under Section 6,\r
+whether or not they are linked directly with the Library itself.\r
+\r
+  6. As an exception to the Sections above, you may also combine or\r
+link a "work that uses the Library" with the Library to produce a\r
+work containing portions of the Library, and distribute that work\r
+under terms of your choice, provided that the terms permit\r
+modification of the work for the customer's own use and reverse\r
+engineering for debugging such modifications.\r
+\r
+  You must give prominent notice with each copy of the work that the\r
+Library is used in it and that the Library and its use are covered by\r
+this License.  You must supply a copy of this License.  If the work\r
+during execution displays copyright notices, you must include the\r
+copyright notice for the Library among them, as well as a reference\r
+directing the user to the copy of this License.  Also, you must do one\r
+of these things:\r
+\r
+    a) Accompany the work with the complete corresponding\r
+    machine-readable source code for the Library including whatever\r
+    changes were used in the work (which must be distributed under\r
+    Sections 1 and 2 above); and, if the work is an executable linked\r
+    with the Library, with the complete machine-readable "work that\r
+    uses the Library", as object code and/or source code, so that the\r
+    user can modify the Library and then relink to produce a modified\r
+    executable containing the modified Library.  (It is understood\r
+    that the user who changes the contents of definitions files in the\r
+    Library will not necessarily be able to recompile the application\r
+    to use the modified definitions.)\r
+\r
+    b) Use a suitable shared library mechanism for linking with the\r
+    Library.  A suitable mechanism is one that (1) uses at run time a\r
+    copy of the library already present on the user's computer system,\r
+    rather than copying library functions into the executable, and (2)\r
+    will operate properly with a modified version of the library, if\r
+    the user installs one, as long as the modified version is\r
+    interface-compatible with the version that the work was made with.\r
+\r
+    c) Accompany the work with a written offer, valid for at\r
+    least three years, to give the same user the materials\r
+    specified in Subsection 6a, above, for a charge no more\r
+    than the cost of performing this distribution.\r
+\r
+    d) If distribution of the work is made by offering access to copy\r
+    from a designated place, offer equivalent access to copy the above\r
+    specified materials from the same place.\r
+\r
+    e) Verify that the user has already received a copy of these\r
+    materials or that you have already sent this user a copy.\r
+\r
+  For an executable, the required form of the "work that uses the\r
+Library" must include any data and utility programs needed for\r
+reproducing the executable from it.  However, as a special exception,\r
+the materials to be distributed need not include anything that is\r
+normally distributed (in either source or binary form) with the major\r
+components (compiler, kernel, and so on) of the operating system on\r
+which the executable runs, unless that component itself accompanies\r
+the executable.\r
+\r
+  It may happen that this requirement contradicts the license\r
+restrictions of other proprietary libraries that do not normally\r
+accompany the operating system.  Such a contradiction means you cannot\r
+use both them and the Library together in an executable that you\r
+distribute.\r
+\r
+  7. You may place library facilities that are a work based on the\r
+Library side-by-side in a single library together with other library\r
+facilities not covered by this License, and distribute such a combined\r
+library, provided that the separate distribution of the work based on\r
+the Library and of the other library facilities is otherwise\r
+permitted, and provided that you do these two things:\r
+\r
+    a) Accompany the combined library with a copy of the same work\r
+    based on the Library, uncombined with any other library\r
+    facilities.  This must be distributed under the terms of the\r
+    Sections above.\r
+\r
+    b) Give prominent notice with the combined library of the fact\r
+    that part of it is a work based on the Library, and explaining\r
+    where to find the accompanying uncombined form of the same work.\r
+\r
+  8. You may not copy, modify, sublicense, link with, or distribute\r
+the Library except as expressly provided under this License.  Any\r
+attempt otherwise to copy, modify, sublicense, link with, or\r
+distribute the Library is void, and will automatically terminate your\r
+rights under this License.  However, parties who have received copies,\r
+or rights, from you under this License will not have their licenses\r
+terminated so long as such parties remain in full compliance.\r
+\r
+  9. You are not required to accept this License, since you have not\r
+signed it.  However, nothing else grants you permission to modify or\r
+distribute the Library or its derivative works.  These actions are\r
+prohibited by law if you do not accept this License.  Therefore, by\r
+modifying or distributing the Library (or any work based on the\r
+Library), you indicate your acceptance of this License to do so, and\r
+all its terms and conditions for copying, distributing or modifying\r
+the Library or works based on it.\r
+\r
+  10. Each time you redistribute the Library (or any work based on the\r
+Library), the recipient automatically receives a license from the\r
+original licensor to copy, distribute, link with or modify the Library\r
+subject to these terms and conditions.  You may not impose any further\r
+restrictions on the recipients' exercise of the rights granted herein.\r
+You are not responsible for enforcing compliance by third parties with\r
+this License.\r
+\r
+  11. If, as a consequence of a court judgment or allegation of patent\r
+infringement or for any other reason (not limited to patent issues),\r
+conditions are imposed on you (whether by court order, agreement or\r
+otherwise) that contradict the conditions of this License, they do not\r
+excuse you from the conditions of this License.  If you cannot\r
+distribute so as to satisfy simultaneously your obligations under this\r
+License and any other pertinent obligations, then as a consequence you\r
+may not distribute the Library at all.  For example, if a patent\r
+license would not permit royalty-free redistribution of the Library by\r
+all those who receive copies directly or indirectly through you, then\r
+the only way you could satisfy both it and this License would be to\r
+refrain entirely from distribution of the Library.\r
+\r
+If any portion of this section is held invalid or unenforceable under any\r
+particular circumstance, the balance of the section is intended to apply,\r
+and the section as a whole is intended to apply in other circumstances.\r
+\r
+It is not the purpose of this section to induce you to infringe any\r
+patents or other property right claims or to contest validity of any\r
+such claims; this section has the sole purpose of protecting the\r
+integrity of the free software distribution system which is\r
+implemented by public license practices.  Many people have made\r
+generous contributions to the wide range of software distributed\r
+through that system in reliance on consistent application of that\r
+system; it is up to the author/donor to decide if he or she is willing\r
+to distribute software through any other system and a licensee cannot\r
+impose that choice.\r
+\r
+This section is intended to make thoroughly clear what is believed to\r
+be a consequence of the rest of this License.\r
+\r
+  12. If the distribution and/or use of the Library is restricted in\r
+certain countries either by patents or by copyrighted interfaces, the\r
+original copyright holder who places the Library under this License may add\r
+an explicit geographical distribution limitation excluding those countries,\r
+so that distribution is permitted only in or among countries not thus\r
+excluded.  In such case, this License incorporates the limitation as if\r
+written in the body of this License.\r
+\r
+  13. The Free Software Foundation may publish revised and/or new\r
+versions of the Lesser General Public License from time to time.\r
+Such new versions will be similar in spirit to the present version,\r
+but may differ in detail to address new problems or concerns.\r
+\r
+Each version is given a distinguishing version number.  If the Library\r
+specifies a version number of this License which applies to it and\r
+"any later version", you have the option of following the terms and\r
+conditions either of that version or of any later version published by\r
+the Free Software Foundation.  If the Library does not specify a\r
+license version number, you may choose any version ever published by\r
+the Free Software Foundation.\r
+\r
+  14. If you wish to incorporate parts of the Library into other free\r
+programs whose distribution conditions are incompatible with these,\r
+write to the author to ask for permission.  For software which is\r
+copyrighted by the Free Software Foundation, write to the Free\r
+Software Foundation; we sometimes make exceptions for this.  Our\r
+decision will be guided by the two goals of preserving the free status\r
+of all derivatives of our free software and of promoting the sharing\r
+and reuse of software generally.\r
+\r
+                           NO WARRANTY\r
+\r
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO\r
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.\r
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR\r
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY\r
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE\r
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME\r
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\r
+\r
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN\r
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\r
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU\r
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR\r
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE\r
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING\r
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A\r
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF\r
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\r
+DAMAGES.\r
+\r
+                    END OF TERMS AND CONDITIONS\r
+\r
+           How to Apply These Terms to Your New Libraries\r
+\r
+  If you develop a new library, and you want it to be of the greatest\r
+possible use to the public, we recommend making it free software that\r
+everyone can redistribute and change.  You can do so by permitting\r
+redistribution under these terms (or, alternatively, under the terms of the\r
+ordinary General Public License).\r
+\r
+  To apply these terms, attach the following notices to the library.  It is\r
+safest to attach them to the start of each source file to most effectively\r
+convey the exclusion of warranty; and each file should have at least the\r
+"copyright" line and a pointer to where the full notice is found.\r
+\r
+    <one line to give the library's name and a brief idea of what it does.>\r
+    Copyright (C) <year>  <name of author>\r
+\r
+    This library is free software; you can redistribute it and/or\r
+    modify it under the terms of the GNU Lesser General Public\r
+    License as published by the Free Software Foundation; either\r
+    version 2.1 of the License, or (at your option) any later version.\r
+\r
+    This library is distributed in the hope that it will be useful,\r
+    but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+    Lesser General Public License for more details.\r
+\r
+    You should have received a copy of the GNU Lesser General Public\r
+    License along with this library; if not, write to the Free Software\r
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA\r
+\r
+Also add information on how to contact you by electronic and paper mail.\r
+\r
+You should also get your employer (if you work as a programmer) or your\r
+school, if any, to sign a "copyright disclaimer" for the library, if\r
+necessary.  Here is a sample; alter the names:\r
+\r
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the\r
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.\r
+\r
+  <signature of Ty Coon>, 1 April 1990\r
+  Ty Coon, President of Vice\r
+\r
+That's all there is to it!\r
+\r
+\r
diff --git a/plugins/TinyMCE/js/plugins/advhr/css/advhr.css b/plugins/TinyMCE/js/plugins/advhr/css/advhr.css
new file mode 100644 (file)
index 0000000..0e22834
--- /dev/null
@@ -0,0 +1,5 @@
+input.radio {border:1px none #000; background:transparent; vertical-align:middle;}\r
+.panel_wrapper div.current {height:80px;}\r
+#width {width:50px; vertical-align:middle;}\r
+#width2 {width:50px; vertical-align:middle;}\r
+#size {width:100px;}\r
diff --git a/plugins/TinyMCE/js/plugins/advhr/editor_plugin.js b/plugins/TinyMCE/js/plugins/advhr/editor_plugin.js
new file mode 100644 (file)
index 0000000..4d3b062
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.AdvancedHRPlugin",{init:function(a,b){a.addCommand("mceAdvancedHr",function(){a.windowManager.open({file:b+"/rule.htm",width:250+parseInt(a.getLang("advhr.delta_width",0)),height:160+parseInt(a.getLang("advhr.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("advhr",{title:"advhr.advhr_desc",cmd:"mceAdvancedHr"});a.onNodeChange.add(function(d,c,e){c.setActive("advhr",e.nodeName=="HR")});a.onClick.add(function(c,d){d=d.target;if(d.nodeName==="HR"){c.selection.select(d)}})},getInfo:function(){return{longname:"Advanced HR",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advhr",tinymce.plugins.AdvancedHRPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advhr/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advhr/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..0c652d3
--- /dev/null
@@ -0,0 +1,57 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.AdvancedHRPlugin', {\r
+               init : function(ed, url) {\r
+                       // Register commands\r
+                       ed.addCommand('mceAdvancedHr', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/rule.htm',\r
+                                       width : 250 + parseInt(ed.getLang('advhr.delta_width', 0)),\r
+                                       height : 160 + parseInt(ed.getLang('advhr.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('advhr', {\r
+                               title : 'advhr.advhr_desc',\r
+                               cmd : 'mceAdvancedHr'\r
+                       });\r
+\r
+                       ed.onNodeChange.add(function(ed, cm, n) {\r
+                               cm.setActive('advhr', n.nodeName == 'HR');\r
+                       });\r
+\r
+                       ed.onClick.add(function(ed, e) {\r
+                               e = e.target;\r
+\r
+                               if (e.nodeName === 'HR')\r
+                                       ed.selection.select(e);\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Advanced HR',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advhr',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('advhr', tinymce.plugins.AdvancedHRPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advhr/js/rule.js b/plugins/TinyMCE/js/plugins/advhr/js/rule.js
new file mode 100644 (file)
index 0000000..b6cbd66
--- /dev/null
@@ -0,0 +1,43 @@
+var AdvHRDialog = {\r
+       init : function(ed) {\r
+               var dom = ed.dom, f = document.forms[0], n = ed.selection.getNode(), w;\r
+\r
+               w = dom.getAttrib(n, 'width');\r
+               f.width.value = w ? parseInt(w) : (dom.getStyle('width') || '');\r
+               f.size.value = dom.getAttrib(n, 'size') || parseInt(dom.getStyle('height')) || '';\r
+               f.noshade.checked = !!dom.getAttrib(n, 'noshade') || !!dom.getStyle('border-width');\r
+               selectByValue(f, 'width2', w.indexOf('%') != -1 ? '%' : 'px');\r
+       },\r
+\r
+       update : function() {\r
+               var ed = tinyMCEPopup.editor, h, f = document.forms[0], st = '';\r
+\r
+               h = '<hr';\r
+\r
+               if (f.size.value) {\r
+                       h += ' size="' + f.size.value + '"';\r
+                       st += ' height:' + f.size.value + 'px;';\r
+               }\r
+\r
+               if (f.width.value) {\r
+                       h += ' width="' + f.width.value + (f.width2.value == '%' ? '%' : '') + '"';\r
+                       st += ' width:' + f.width.value + (f.width2.value == '%' ? '%' : 'px') + ';';\r
+               }\r
+\r
+               if (f.noshade.checked) {\r
+                       h += ' noshade="noshade"';\r
+                       st += ' border-width: 1px; border-style: solid; border-color: #CCCCCC; color: #ffffff;';\r
+               }\r
+\r
+               if (ed.settings.inline_styles)\r
+                       h += ' style="' + tinymce.trim(st) + '"';\r
+\r
+               h += ' />';\r
+\r
+               ed.execCommand("mceInsertContent", false, h);\r
+               tinyMCEPopup.close();\r
+       }\r
+};\r
+\r
+tinyMCEPopup.requireLangPack();\r
+tinyMCEPopup.onInit.add(AdvHRDialog.init, AdvHRDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/advhr/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/advhr/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..873bfd8
--- /dev/null
@@ -0,0 +1,5 @@
+tinyMCE.addI18n('en.advhr_dlg',{\r
+width:"Width",\r
+size:"Height",\r
+noshade:"No shadow"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advhr/rule.htm b/plugins/TinyMCE/js/plugins/advhr/rule.htm
new file mode 100644 (file)
index 0000000..fc37b2a
--- /dev/null
@@ -0,0 +1,57 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advhr.advhr_desc}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/rule.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <link href="css/advhr.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body>\r
+<form onsubmit="AdvHRDialog.update();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advhr.advhr_desc}</a></span></li>\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <table border="0" cellpadding="4" cellspacing="0">\r
+                    <tr>\r
+                        <td><label for="width">{#advhr_dlg.width}</label></td>\r
+                        <td class="nowrap">\r
+                            <input id="width" name="width" type="text" value="" class="mceFocus" />\r
+                            <select name="width2" id="width2">\r
+                                <option value="">px</option>\r
+                                <option value="%">%</option>\r
+                            </select>\r
+                        </td>\r
+                    </tr>\r
+                    <tr>\r
+                        <td><label for="size">{#advhr_dlg.size}</label></td>\r
+                        <td><select id="size" name="size">\r
+                            <option value="">Normal</option>\r
+                            <option value="1">1</option>\r
+                            <option value="2">2</option>\r
+                            <option value="3">3</option>\r
+                            <option value="4">4</option>\r
+                            <option value="5">5</option>\r
+                        </select></td>\r
+                    </tr>\r
+                    <tr>\r
+                        <td><label for="noshade">{#advhr_dlg.noshade}</label></td>\r
+                        <td><input type="checkbox" name="noshade" id="noshade" class="radio" /></td>\r
+                    </tr>\r
+            </table>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/advimage/css/advimage.css b/plugins/TinyMCE/js/plugins/advimage/css/advimage.css
new file mode 100644 (file)
index 0000000..0a6251a
--- /dev/null
@@ -0,0 +1,13 @@
+#src_list, #over_list, #out_list {width:280px;}\r
+.mceActionPanel {margin-top:7px;}\r
+.alignPreview {border:1px solid #000; width:140px; height:140px; overflow:hidden; padding:5px;}\r
+.checkbox {border:0;}\r
+.panel_wrapper div.current {height:305px;}\r
+#prev {margin:0; border:1px solid #000; width:428px; height:150px; overflow:auto;}\r
+#align, #classlist {width:150px;}\r
+#width, #height {vertical-align:middle; width:50px; text-align:center;}\r
+#vspace, #hspace, #border {vertical-align:middle; width:30px; text-align:center;}\r
+#class_list {width:180px;}\r
+input {width: 280px;}\r
+#constrain, #onmousemovecheck {width:auto;}\r
+#id, #dir, #lang, #usemap, #longdesc {width:200px;}\r
diff --git a/plugins/TinyMCE/js/plugins/advimage/editor_plugin.js b/plugins/TinyMCE/js/plugins/advimage/editor_plugin.js
new file mode 100644 (file)
index 0000000..4c7a9c3
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.AdvancedImagePlugin",{init:function(a,b){a.addCommand("mceAdvImage",function(){if(a.dom.getAttrib(a.selection.getNode(),"class").indexOf("mceItem")!=-1){return}a.windowManager.open({file:b+"/image.htm",width:480+parseInt(a.getLang("advimage.delta_width",0)),height:385+parseInt(a.getLang("advimage.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("image",{title:"advimage.image_desc",cmd:"mceAdvImage"})},getInfo:function(){return{longname:"Advanced image",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advimage",tinymce.plugins.AdvancedImagePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advimage/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advimage/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..2625dd2
--- /dev/null
@@ -0,0 +1,50 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.AdvancedImagePlugin', {\r
+               init : function(ed, url) {\r
+                       // Register commands\r
+                       ed.addCommand('mceAdvImage', function() {\r
+                               // Internal image object like a flash placeholder\r
+                               if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)\r
+                                       return;\r
+\r
+                               ed.windowManager.open({\r
+                                       file : url + '/image.htm',\r
+                                       width : 480 + parseInt(ed.getLang('advimage.delta_width', 0)),\r
+                                       height : 385 + parseInt(ed.getLang('advimage.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('image', {\r
+                               title : 'advimage.image_desc',\r
+                               cmd : 'mceAdvImage'\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Advanced image',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advimage',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('advimage', tinymce.plugins.AdvancedImagePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advimage/image.htm b/plugins/TinyMCE/js/plugins/advimage/image.htm
new file mode 100644 (file)
index 0000000..79cff3f
--- /dev/null
@@ -0,0 +1,232 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advimage_dlg.dialog_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/validate.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/image.js"></script>\r
+       <link href="css/advimage.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body id="advimage" style="display: none">\r
+    <form onsubmit="ImageDialog.insert();return false;" action="#"> \r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advimage_dlg.tab_general}</a></span></li>\r
+                               <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#advimage_dlg.tab_appearance}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advimage_dlg.tab_advanced}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <fieldset>\r
+                                               <legend>{#advimage_dlg.general}</legend>\r
+\r
+                                               <table class="properties">\r
+                                                       <tr>\r
+                                                               <td class="column1"><label id="srclabel" for="src">{#advimage_dlg.src}</label></td>\r
+                                                               <td colspan="2"><table border="0" cellspacing="0" cellpadding="0">\r
+                                                                       <tr> \r
+                                                                         <td><input name="src" type="text" id="src" value="" class="mceFocus" onchange="ImageDialog.showPreviewImage(this.value);" /></td> \r
+                                                                         <td id="srcbrowsercontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                                 </table></td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><label for="src_list">{#advimage_dlg.image_list}</label></td>\r
+                                                               <td><select id="src_list" name="src_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;document.getElementById('title').value=this.options[this.selectedIndex].text;ImageDialog.showPreviewImage(this.options[this.selectedIndex].value);"><option value=""></option></select></td>\r
+                                                       </tr>\r
+                                                       <tr> \r
+                                                               <td class="column1"><label id="altlabel" for="alt">{#advimage_dlg.alt}</label></td> \r
+                                                               <td colspan="2"><input id="alt" name="alt" type="text" value="" /></td> \r
+                                                       </tr> \r
+                                                       <tr> \r
+                                                               <td class="column1"><label id="titlelabel" for="title">{#advimage_dlg.title}</label></td> \r
+                                                               <td colspan="2"><input id="title" name="title" type="text" value="" /></td> \r
+                                                       </tr>\r
+                                               </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#advimage_dlg.preview}</legend>\r
+                                       <div id="prev"></div>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="appearance_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#advimage_dlg.tab_appearance}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr> \r
+                                                       <td class="column1"><label id="alignlabel" for="align">{#advimage_dlg.align}</label></td> \r
+                                                       <td><select id="align" name="align" onchange="ImageDialog.updateStyle('align');ImageDialog.changeAppearance();"> \r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="baseline">{#advimage_dlg.align_baseline}</option>\r
+                                                                       <option value="top">{#advimage_dlg.align_top}</option>\r
+                                                                       <option value="middle">{#advimage_dlg.align_middle}</option>\r
+                                                                       <option value="bottom">{#advimage_dlg.align_bottom}</option>\r
+                                                                       <option value="text-top">{#advimage_dlg.align_texttop}</option>\r
+                                                                       <option value="text-bottom">{#advimage_dlg.align_textbottom}</option>\r
+                                                                       <option value="left">{#advimage_dlg.align_left}</option>\r
+                                                                       <option value="right">{#advimage_dlg.align_right}</option>\r
+                                                               </select> \r
+                                                       </td>\r
+                                                       <td rowspan="6" valign="top">\r
+                                                               <div class="alignPreview">\r
+                                                                       <img id="alignSampleImg" src="img/sample.gif" alt="{#advimage_dlg.example_img}" />\r
+                                                                       Lorem ipsum, Dolor sit amet, consectetuer adipiscing loreum ipsum edipiscing elit, sed diam\r
+                                                                       nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.Loreum ipsum\r
+                                                                       edipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam\r
+                                                                       erat volutpat.\r
+                                                               </div>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="widthlabel" for="width">{#advimage_dlg.dimensions}</label></td>\r
+                                                       <td class="nowrap">\r
+                                                               <input name="width" type="text" id="width" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeHeight();" /> x \r
+                                                               <input name="height" type="text" id="height" value="" size="5" maxlength="5" class="size" onchange="ImageDialog.changeWidth();" /> px\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td>&nbsp;</td>\r
+                                                       <td><table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>\r
+                                                                               <td><label id="constrainlabel" for="constrain">{#advimage_dlg.constrain_proportions}</label></td>\r
+                                                                       </tr>\r
+                                                               </table></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="vspacelabel" for="vspace">{#advimage_dlg.vspace}</label></td> \r
+                                                       <td><input name="vspace" type="text" id="vspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('vspace');ImageDialog.changeAppearance();" />\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr> \r
+                                                       <td class="column1"><label id="hspacelabel" for="hspace">{#advimage_dlg.hspace}</label></td> \r
+                                                       <td><input name="hspace" type="text" id="hspace" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('hspace');ImageDialog.changeAppearance();" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="borderlabel" for="border">{#advimage_dlg.border}</label></td> \r
+                                                       <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" class="number" onchange="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" onblur="ImageDialog.updateStyle('border');ImageDialog.changeAppearance();" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="class_list">{#class_name}</label></td>\r
+                                                       <td colspan="2"><select id="class_list" name="class_list" class="mceEditableSelect"><option value=""></option></select></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="stylelabel" for="style">{#advimage_dlg.style}</label></td> \r
+                                                       <td colspan="2"><input id="style" name="style" type="text" value="" onchange="ImageDialog.changeAppearance();" /></td> \r
+                                               </tr>\r
+\r
+                                               <!-- <tr>\r
+                                                       <td class="column1"><label id="classeslabel" for="classes">{#advimage_dlg.classes}</label></td> \r
+                                                       <td colspan="2"><input id="classes" name="classes" type="text" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td> \r
+                                               </tr> -->\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#advimage_dlg.swap_image}</legend>\r
+\r
+                                       <input type="checkbox" id="onmousemovecheck" name="onmousemovecheck" class="checkbox" onclick="ImageDialog.setSwapImage(this.checked);" />\r
+                                       <label id="onmousemovechecklabel" for="onmousemovecheck">{#advimage_dlg.alt_image}</label>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0" width="100%">\r
+                                                       <tr>\r
+                                                               <td class="column1"><label id="onmouseoversrclabel" for="onmouseoversrc">{#advimage_dlg.mouseover}</label></td> \r
+                                                               <td><table border="0" cellspacing="0" cellpadding="0"> \r
+                                                                       <tr> \r
+                                                                         <td><input id="onmouseoversrc" name="onmouseoversrc" type="text" value="" /></td> \r
+                                                                         <td id="onmouseoversrccontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                                 </table></td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><label for="over_list">{#advimage_dlg.image_list}</label></td>\r
+                                                               <td><select id="over_list" name="over_list" onchange="document.getElementById('onmouseoversrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>\r
+                                                       </tr>\r
+                                                       <tr> \r
+                                                               <td class="column1"><label id="onmouseoutsrclabel" for="onmouseoutsrc">{#advimage_dlg.mouseout}</label></td> \r
+                                                               <td class="column2"><table border="0" cellspacing="0" cellpadding="0"> \r
+                                                                       <tr> \r
+                                                                         <td><input id="onmouseoutsrc" name="onmouseoutsrc" type="text" value="" /></td> \r
+                                                                         <td id="onmouseoutsrccontainer">&nbsp;</td>\r
+                                                                       </tr> \r
+                                                                 </table></td> \r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><label for="out_list">{#advimage_dlg.image_list}</label></td>\r
+                                                               <td><select id="out_list" name="out_list" onchange="document.getElementById('onmouseoutsrc').value=this.options[this.selectedIndex].value;"><option value=""></option></select></td>\r
+                                                       </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#advimage_dlg.misc}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="idlabel" for="id">{#advimage_dlg.id}</label></td> \r
+                                                       <td><input id="id" name="id" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="dirlabel" for="dir">{#advimage_dlg.langdir}</label></td> \r
+                                                       <td>\r
+                                                               <select id="dir" name="dir" onchange="ImageDialog.changeAppearance();"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="ltr">{#advimage_dlg.ltr}</option> \r
+                                                                               <option value="rtl">{#advimage_dlg.rtl}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="langlabel" for="lang">{#advimage_dlg.langcode}</label></td> \r
+                                                       <td>\r
+                                                               <input id="lang" name="lang" type="text" value="" />\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="usemaplabel" for="usemap">{#advimage_dlg.map}</label></td> \r
+                                                       <td>\r
+                                                               <input id="usemap" name="usemap" type="text" value="" />\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="longdesclabel" for="longdesc">{#advimage_dlg.long_desc}</label></td>\r
+                                                       <td><table border="0" cellspacing="0" cellpadding="0">\r
+                                                                       <tr>\r
+                                                                         <td><input id="longdesc" name="longdesc" type="text" value="" /></td>\r
+                                                                         <td id="longdesccontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table></td> \r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+    </form>\r
+</body> \r
+</html> \r
diff --git a/plugins/TinyMCE/js/plugins/advimage/img/sample.gif b/plugins/TinyMCE/js/plugins/advimage/img/sample.gif
new file mode 100644 (file)
index 0000000..53bf689
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/advimage/img/sample.gif differ
diff --git a/plugins/TinyMCE/js/plugins/advimage/js/image.js b/plugins/TinyMCE/js/plugins/advimage/js/image.js
new file mode 100644 (file)
index 0000000..3bda86a
--- /dev/null
@@ -0,0 +1,443 @@
+var ImageDialog = {\r
+       preInit : function() {\r
+               var url;\r
+\r
+               tinyMCEPopup.requireLangPack();\r
+\r
+               if (url = tinyMCEPopup.getParam("external_image_list_url"))\r
+                       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+       },\r
+\r
+       init : function(ed) {\r
+               var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, dom = ed.dom, n = ed.selection.getNode();\r
+\r
+               tinyMCEPopup.resizeToInnerSize();\r
+               this.fillClassList('class_list');\r
+               this.fillFileList('src_list', 'tinyMCEImageList');\r
+               this.fillFileList('over_list', 'tinyMCEImageList');\r
+               this.fillFileList('out_list', 'tinyMCEImageList');\r
+               TinyMCE_EditableSelects.init();\r
+\r
+               if (n.nodeName == 'IMG') {\r
+                       nl.src.value = dom.getAttrib(n, 'src');\r
+                       nl.width.value = dom.getAttrib(n, 'width');\r
+                       nl.height.value = dom.getAttrib(n, 'height');\r
+                       nl.alt.value = dom.getAttrib(n, 'alt');\r
+                       nl.title.value = dom.getAttrib(n, 'title');\r
+                       nl.vspace.value = this.getAttrib(n, 'vspace');\r
+                       nl.hspace.value = this.getAttrib(n, 'hspace');\r
+                       nl.border.value = this.getAttrib(n, 'border');\r
+                       selectByValue(f, 'align', this.getAttrib(n, 'align'));\r
+                       selectByValue(f, 'class_list', dom.getAttrib(n, 'class'), true, true);\r
+                       nl.style.value = dom.getAttrib(n, 'style');\r
+                       nl.id.value = dom.getAttrib(n, 'id');\r
+                       nl.dir.value = dom.getAttrib(n, 'dir');\r
+                       nl.lang.value = dom.getAttrib(n, 'lang');\r
+                       nl.usemap.value = dom.getAttrib(n, 'usemap');\r
+                       nl.longdesc.value = dom.getAttrib(n, 'longdesc');\r
+                       nl.insert.value = ed.getLang('update');\r
+\r
+                       if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseover')))\r
+                               nl.onmouseoversrc.value = dom.getAttrib(n, 'onmouseover').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');\r
+\r
+                       if (/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/.test(dom.getAttrib(n, 'onmouseout')))\r
+                               nl.onmouseoutsrc.value = dom.getAttrib(n, 'onmouseout').replace(/^\s*this.src\s*=\s*\'([^\']+)\';?\s*$/, '$1');\r
+\r
+                       if (ed.settings.inline_styles) {\r
+                               // Move attribs to styles\r
+                               if (dom.getAttrib(n, 'align'))\r
+                                       this.updateStyle('align');\r
+\r
+                               if (dom.getAttrib(n, 'hspace'))\r
+                                       this.updateStyle('hspace');\r
+\r
+                               if (dom.getAttrib(n, 'border'))\r
+                                       this.updateStyle('border');\r
+\r
+                               if (dom.getAttrib(n, 'vspace'))\r
+                                       this.updateStyle('vspace');\r
+                       }\r
+               }\r
+\r
+               // Setup browse button\r
+               document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');\r
+               if (isVisible('srcbrowser'))\r
+                       document.getElementById('src').style.width = '260px';\r
+\r
+               // Setup browse button\r
+               document.getElementById('onmouseoversrccontainer').innerHTML = getBrowserHTML('overbrowser','onmouseoversrc','image','theme_advanced_image');\r
+               if (isVisible('overbrowser'))\r
+                       document.getElementById('onmouseoversrc').style.width = '260px';\r
+\r
+               // Setup browse button\r
+               document.getElementById('onmouseoutsrccontainer').innerHTML = getBrowserHTML('outbrowser','onmouseoutsrc','image','theme_advanced_image');\r
+               if (isVisible('outbrowser'))\r
+                       document.getElementById('onmouseoutsrc').style.width = '260px';\r
+\r
+               // If option enabled default contrain proportions to checked\r
+               if (ed.getParam("advimage_constrain_proportions", true))\r
+                       f.constrain.checked = true;\r
+\r
+               // Check swap image if valid data\r
+               if (nl.onmouseoversrc.value || nl.onmouseoutsrc.value)\r
+                       this.setSwapImage(true);\r
+               else\r
+                       this.setSwapImage(false);\r
+\r
+               this.changeAppearance();\r
+               this.showPreviewImage(nl.src.value, 1);\r
+       },\r
+\r
+       insert : function(file, title) {\r
+               var ed = tinyMCEPopup.editor, t = this, f = document.forms[0];\r
+\r
+               if (f.src.value === '') {\r
+                       if (ed.selection.getNode().nodeName == 'IMG') {\r
+                               ed.dom.remove(ed.selection.getNode());\r
+                               ed.execCommand('mceRepaint');\r
+                       }\r
+\r
+                       tinyMCEPopup.close();\r
+                       return;\r
+               }\r
+\r
+               if (tinyMCEPopup.getParam("accessibility_warnings", 1)) {\r
+                       if (!f.alt.value) {\r
+                               tinyMCEPopup.confirm(tinyMCEPopup.getLang('advimage_dlg.missing_alt'), function(s) {\r
+                                       if (s)\r
+                                               t.insertAndClose();\r
+                               });\r
+\r
+                               return;\r
+                       }\r
+               }\r
+\r
+               t.insertAndClose();\r
+       },\r
+\r
+       insertAndClose : function() {\r
+               var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;\r
+\r
+               tinyMCEPopup.restoreSelection();\r
+\r
+               // Fixes crash in Safari\r
+               if (tinymce.isWebKit)\r
+                       ed.getWin().focus();\r
+\r
+               if (!ed.settings.inline_styles) {\r
+                       args = {\r
+                               vspace : nl.vspace.value,\r
+                               hspace : nl.hspace.value,\r
+                               border : nl.border.value,\r
+                               align : getSelectValue(f, 'align')\r
+                       };\r
+               } else {\r
+                       // Remove deprecated values\r
+                       args = {\r
+                               vspace : '',\r
+                               hspace : '',\r
+                               border : '',\r
+                               align : ''\r
+                       };\r
+               }\r
+\r
+               tinymce.extend(args, {\r
+                       src : nl.src.value,\r
+                       width : nl.width.value,\r
+                       height : nl.height.value,\r
+                       alt : nl.alt.value,\r
+                       title : nl.title.value,\r
+                       'class' : getSelectValue(f, 'class_list'),\r
+                       style : nl.style.value,\r
+                       id : nl.id.value,\r
+                       dir : nl.dir.value,\r
+                       lang : nl.lang.value,\r
+                       usemap : nl.usemap.value,\r
+                       longdesc : nl.longdesc.value\r
+               });\r
+\r
+               args.onmouseover = args.onmouseout = '';\r
+\r
+               if (f.onmousemovecheck.checked) {\r
+                       if (nl.onmouseoversrc.value)\r
+                               args.onmouseover = "this.src='" + nl.onmouseoversrc.value + "';";\r
+\r
+                       if (nl.onmouseoutsrc.value)\r
+                               args.onmouseout = "this.src='" + nl.onmouseoutsrc.value + "';";\r
+               }\r
+\r
+               el = ed.selection.getNode();\r
+\r
+               if (el && el.nodeName == 'IMG') {\r
+                       ed.dom.setAttribs(el, args);\r
+               } else {\r
+                       ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});\r
+                       ed.dom.setAttribs('__mce_tmp', args);\r
+                       ed.dom.setAttrib('__mce_tmp', 'id', '');\r
+                       ed.undoManager.add();\r
+               }\r
+\r
+               tinyMCEPopup.close();\r
+       },\r
+\r
+       getAttrib : function(e, at) {\r
+               var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;\r
+\r
+               if (ed.settings.inline_styles) {\r
+                       switch (at) {\r
+                               case 'align':\r
+                                       if (v = dom.getStyle(e, 'float'))\r
+                                               return v;\r
+\r
+                                       if (v = dom.getStyle(e, 'vertical-align'))\r
+                                               return v;\r
+\r
+                                       break;\r
+\r
+                               case 'hspace':\r
+                                       v = dom.getStyle(e, 'margin-left')\r
+                                       v2 = dom.getStyle(e, 'margin-right');\r
+\r
+                                       if (v && v == v2)\r
+                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+                                       break;\r
+\r
+                               case 'vspace':\r
+                                       v = dom.getStyle(e, 'margin-top')\r
+                                       v2 = dom.getStyle(e, 'margin-bottom');\r
+                                       if (v && v == v2)\r
+                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+                                       break;\r
+\r
+                               case 'border':\r
+                                       v = 0;\r
+\r
+                                       tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {\r
+                                               sv = dom.getStyle(e, 'border-' + sv + '-width');\r
+\r
+                                               // False or not the same as prev\r
+                                               if (!sv || (sv != v && v !== 0)) {\r
+                                                       v = 0;\r
+                                                       return false;\r
+                                               }\r
+\r
+                                               if (sv)\r
+                                                       v = sv;\r
+                                       });\r
+\r
+                                       if (v)\r
+                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+                                       break;\r
+                       }\r
+               }\r
+\r
+               if (v = dom.getAttrib(e, at))\r
+                       return v;\r
+\r
+               return '';\r
+       },\r
+\r
+       setSwapImage : function(st) {\r
+               var f = document.forms[0];\r
+\r
+               f.onmousemovecheck.checked = st;\r
+               setBrowserDisabled('overbrowser', !st);\r
+               setBrowserDisabled('outbrowser', !st);\r
+\r
+               if (f.over_list)\r
+                       f.over_list.disabled = !st;\r
+\r
+               if (f.out_list)\r
+                       f.out_list.disabled = !st;\r
+\r
+               f.onmouseoversrc.disabled = !st;\r
+               f.onmouseoutsrc.disabled  = !st;\r
+       },\r
+\r
+       fillClassList : function(id) {\r
+               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+               if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {\r
+                       cl = [];\r
+\r
+                       tinymce.each(v.split(';'), function(v) {\r
+                               var p = v.split('=');\r
+\r
+                               cl.push({'title' : p[0], 'class' : p[1]});\r
+                       });\r
+               } else\r
+                       cl = tinyMCEPopup.editor.dom.getClasses();\r
+\r
+               if (cl.length > 0) {\r
+                       lst.options.length = 0;\r
+                       lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
+\r
+                       tinymce.each(cl, function(o) {\r
+                               lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);\r
+                       });\r
+               } else\r
+                       dom.remove(dom.getParent(id, 'tr'));\r
+       },\r
+\r
+       fillFileList : function(id, l) {\r
+               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+               l = window[l];\r
+               lst.options.length = 0;\r
+\r
+               if (l && l.length > 0) {\r
+                       lst.options[lst.options.length] = new Option('', '');\r
+\r
+                       tinymce.each(l, function(o) {\r
+                               lst.options[lst.options.length] = new Option(o[0], o[1]);\r
+                       });\r
+               } else\r
+                       dom.remove(dom.getParent(id, 'tr'));\r
+       },\r
+\r
+       resetImageData : function() {\r
+               var f = document.forms[0];\r
+\r
+               f.elements.width.value = f.elements.height.value = '';\r
+       },\r
+\r
+       updateImageData : function(img, st) {\r
+               var f = document.forms[0];\r
+\r
+               if (!st) {\r
+                       f.elements.width.value = img.width;\r
+                       f.elements.height.value = img.height;\r
+               }\r
+\r
+               this.preloadImg = img;\r
+       },\r
+\r
+       changeAppearance : function() {\r
+               var ed = tinyMCEPopup.editor, f = document.forms[0], img = document.getElementById('alignSampleImg');\r
+\r
+               if (img) {\r
+                       if (ed.getParam('inline_styles')) {\r
+                               ed.dom.setAttrib(img, 'style', f.style.value);\r
+                       } else {\r
+                               img.align = f.align.value;\r
+                               img.border = f.border.value;\r
+                               img.hspace = f.hspace.value;\r
+                               img.vspace = f.vspace.value;\r
+                       }\r
+               }\r
+       },\r
+\r
+       changeHeight : function() {\r
+               var f = document.forms[0], tp, t = this;\r
+\r
+               if (!f.constrain.checked || !t.preloadImg) {\r
+                       return;\r
+               }\r
+\r
+               if (f.width.value == "" || f.height.value == "")\r
+                       return;\r
+\r
+               tp = (parseInt(f.width.value) / parseInt(t.preloadImg.width)) * t.preloadImg.height;\r
+               f.height.value = tp.toFixed(0);\r
+       },\r
+\r
+       changeWidth : function() {\r
+               var f = document.forms[0], tp, t = this;\r
+\r
+               if (!f.constrain.checked || !t.preloadImg) {\r
+                       return;\r
+               }\r
+\r
+               if (f.width.value == "" || f.height.value == "")\r
+                       return;\r
+\r
+               tp = (parseInt(f.height.value) / parseInt(t.preloadImg.height)) * t.preloadImg.width;\r
+               f.width.value = tp.toFixed(0);\r
+       },\r
+\r
+       updateStyle : function(ty) {\r
+               var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : dom.get('style').value});\r
+\r
+               if (tinyMCEPopup.editor.settings.inline_styles) {\r
+                       // Handle align\r
+                       if (ty == 'align') {\r
+                               dom.setStyle(img, 'float', '');\r
+                               dom.setStyle(img, 'vertical-align', '');\r
+\r
+                               v = getSelectValue(f, 'align');\r
+                               if (v) {\r
+                                       if (v == 'left' || v == 'right')\r
+                                               dom.setStyle(img, 'float', v);\r
+                                       else\r
+                                               img.style.verticalAlign = v;\r
+                               }\r
+                       }\r
+\r
+                       // Handle border\r
+                       if (ty == 'border') {\r
+                               dom.setStyle(img, 'border', '');\r
+\r
+                               v = f.border.value;\r
+                               if (v || v == '0') {\r
+                                       if (v == '0')\r
+                                               img.style.border = '0';\r
+                                       else\r
+                                               img.style.border = v + 'px solid black';\r
+                               }\r
+                       }\r
+\r
+                       // Handle hspace\r
+                       if (ty == 'hspace') {\r
+                               dom.setStyle(img, 'marginLeft', '');\r
+                               dom.setStyle(img, 'marginRight', '');\r
+\r
+                               v = f.hspace.value;\r
+                               if (v) {\r
+                                       img.style.marginLeft = v + 'px';\r
+                                       img.style.marginRight = v + 'px';\r
+                               }\r
+                       }\r
+\r
+                       // Handle vspace\r
+                       if (ty == 'vspace') {\r
+                               dom.setStyle(img, 'marginTop', '');\r
+                               dom.setStyle(img, 'marginBottom', '');\r
+\r
+                               v = f.vspace.value;\r
+                               if (v) {\r
+                                       img.style.marginTop = v + 'px';\r
+                                       img.style.marginBottom = v + 'px';\r
+                               }\r
+                       }\r
+\r
+                       // Merge\r
+                       dom.get('style').value = dom.serializeStyle(dom.parseStyle(img.style.cssText), 'img');\r
+               }\r
+       },\r
+\r
+       changeMouseMove : function() {\r
+       },\r
+\r
+       showPreviewImage : function(u, st) {\r
+               if (!u) {\r
+                       tinyMCEPopup.dom.setHTML('prev', '');\r
+                       return;\r
+               }\r
+\r
+               if (!st && tinyMCEPopup.getParam("advimage_update_dimensions_onchange", true))\r
+                       this.resetImageData();\r
+\r
+               u = tinyMCEPopup.editor.documentBaseURI.toAbsolute(u);\r
+\r
+               if (!st)\r
+                       tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this);" onerror="ImageDialog.resetImageData();" />');\r
+               else\r
+                       tinyMCEPopup.dom.setHTML('prev', '<img id="previewImg" src="' + u + '" border="0" onload="ImageDialog.updateImageData(this, 1);" />');\r
+       }\r
+};\r
+\r
+ImageDialog.preInit();\r
+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/advimage/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/advimage/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..f493d19
--- /dev/null
@@ -0,0 +1,43 @@
+tinyMCE.addI18n('en.advimage_dlg',{\r
+tab_general:"General",\r
+tab_appearance:"Appearance",\r
+tab_advanced:"Advanced",\r
+general:"General",\r
+title:"Title",\r
+preview:"Preview",\r
+constrain_proportions:"Constrain proportions",\r
+langdir:"Language direction",\r
+langcode:"Language code",\r
+long_desc:"Long description link",\r
+style:"Style",\r
+classes:"Classes",\r
+ltr:"Left to right",\r
+rtl:"Right to left",\r
+id:"Id",\r
+map:"Image map",\r
+swap_image:"Swap image",\r
+alt_image:"Alternative image",\r
+mouseover:"for mouse over",\r
+mouseout:"for mouse out",\r
+misc:"Miscellaneous",\r
+example_img:"Appearance preview image",\r
+missing_alt:"Are you sure you want to continue without including an Image Description? Without it the image may not be accessible to some users with disabilities, or to those using a text browser, or browsing the Web with images turned off.",\r
+dialog_title:"Insert/edit image",\r
+src:"Image URL",\r
+alt:"Image description",\r
+list:"Image list",\r
+border:"Border",\r
+dimensions:"Dimensions",\r
+vspace:"Vertical space",\r
+hspace:"Horizontal space",\r
+align:"Alignment",\r
+align_baseline:"Baseline",\r
+align_top:"Top",\r
+align_middle:"Middle",\r
+align_bottom:"Bottom",\r
+align_texttop:"Text top",\r
+align_textbottom:"Text bottom",\r
+align_left:"Left",\r
+align_right:"Right",\r
+image_list:"Image list"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/css/advlink.css b/plugins/TinyMCE/js/plugins/advlink/css/advlink.css
new file mode 100644 (file)
index 0000000..1436431
--- /dev/null
@@ -0,0 +1,8 @@
+.mceLinkList, .mceAnchorList, #targetlist {width:280px;}\r
+.mceActionPanel {margin-top:7px;}\r
+.panel_wrapper div.current {height:320px;}\r
+#classlist, #title, #href {width:280px;}\r
+#popupurl, #popupname {width:200px;}\r
+#popupwidth, #popupheight, #popupleft, #popuptop {width:30px;vertical-align:middle;text-align:center;}\r
+#id, #style, #classes, #target, #dir, #hreflang, #lang, #charset, #type, #rel, #rev, #tabindex, #accesskey {width:200px;}\r
+#events_panel input {width:200px;}\r
diff --git a/plugins/TinyMCE/js/plugins/advlink/editor_plugin.js b/plugins/TinyMCE/js/plugins/advlink/editor_plugin.js
new file mode 100644 (file)
index 0000000..983fe5a
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.AdvancedLinkPlugin",{init:function(a,b){this.editor=a;a.addCommand("mceAdvLink",function(){var c=a.selection;if(c.isCollapsed()&&!a.dom.getParent(c.getNode(),"A")){return}a.windowManager.open({file:b+"/link.htm",width:480+parseInt(a.getLang("advlink.delta_width",0)),height:400+parseInt(a.getLang("advlink.delta_height",0)),inline:1},{plugin_url:b})});a.addButton("link",{title:"advlink.link_desc",cmd:"mceAdvLink"});a.addShortcut("ctrl+k","advlink.advlink_desc","mceAdvLink");a.onNodeChange.add(function(d,c,f,e){c.setDisabled("link",e&&f.nodeName!="A");c.setActive("link",f.nodeName=="A"&&!f.name)})},getInfo:function(){return{longname:"Advanced link",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlink",tinymce.plugins.AdvancedLinkPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advlink/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..14e46a7
--- /dev/null
@@ -0,0 +1,61 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.AdvancedLinkPlugin', {\r
+               init : function(ed, url) {\r
+                       this.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceAdvLink', function() {\r
+                               var se = ed.selection;\r
+\r
+                               // No selection and not in link\r
+                               if (se.isCollapsed() && !ed.dom.getParent(se.getNode(), 'A'))\r
+                                       return;\r
+\r
+                               ed.windowManager.open({\r
+                                       file : url + '/link.htm',\r
+                                       width : 480 + parseInt(ed.getLang('advlink.delta_width', 0)),\r
+                                       height : 400 + parseInt(ed.getLang('advlink.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('link', {\r
+                               title : 'advlink.link_desc',\r
+                               cmd : 'mceAdvLink'\r
+                       });\r
+\r
+                       ed.addShortcut('ctrl+k', 'advlink.advlink_desc', 'mceAdvLink');\r
+\r
+                       ed.onNodeChange.add(function(ed, cm, n, co) {\r
+                               cm.setDisabled('link', co && n.nodeName != 'A');\r
+                               cm.setActive('link', n.nodeName == 'A' && !n.name);\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Advanced link',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlink',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('advlink', tinymce.plugins.AdvancedLinkPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/js/advlink.js b/plugins/TinyMCE/js/plugins/advlink/js/advlink.js
new file mode 100644 (file)
index 0000000..b78e82f
--- /dev/null
@@ -0,0 +1,528 @@
+/* Functions for the advlink plugin popup */\r
+\r
+tinyMCEPopup.requireLangPack();\r
+\r
+var templates = {\r
+       "window.open" : "window.open('${url}','${target}','${options}')"\r
+};\r
+\r
+function preinit() {\r
+       var url;\r
+\r
+       if (url = tinyMCEPopup.getParam("external_link_list_url"))\r
+               document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+}\r
+\r
+function changeClass() {\r
+       var f = document.forms[0];\r
+\r
+       f.classes.value = getSelectValue(f, 'classlist');\r
+}\r
+\r
+function init() {\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       var formObj = document.forms[0];\r
+       var inst = tinyMCEPopup.editor;\r
+       var elm = inst.selection.getNode();\r
+       var action = "insert";\r
+       var html;\r
+\r
+       document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser','href','file','advlink');\r
+       document.getElementById('popupurlbrowsercontainer').innerHTML = getBrowserHTML('popupurlbrowser','popupurl','file','advlink');\r
+       document.getElementById('linklisthrefcontainer').innerHTML = getLinkListHTML('linklisthref','href');\r
+       document.getElementById('anchorlistcontainer').innerHTML = getAnchorListHTML('anchorlist','href');\r
+       document.getElementById('targetlistcontainer').innerHTML = getTargetListHTML('targetlist','target');\r
+\r
+       // Link list\r
+       html = getLinkListHTML('linklisthref','href');\r
+       if (html == "")\r
+               document.getElementById("linklisthrefrow").style.display = 'none';\r
+       else\r
+               document.getElementById("linklisthrefcontainer").innerHTML = html;\r
+\r
+       // Resize some elements\r
+       if (isVisible('hrefbrowser'))\r
+               document.getElementById('href').style.width = '260px';\r
+\r
+       if (isVisible('popupurlbrowser'))\r
+               document.getElementById('popupurl').style.width = '180px';\r
+\r
+       elm = inst.dom.getParent(elm, "A");\r
+       if (elm != null && elm.nodeName == "A")\r
+               action = "update";\r
+\r
+       formObj.insert.value = tinyMCEPopup.getLang(action, 'Insert', true); \r
+\r
+       setPopupControlsDisabled(true);\r
+\r
+       if (action == "update") {\r
+               var href = inst.dom.getAttrib(elm, 'href');\r
+               var onclick = inst.dom.getAttrib(elm, 'onclick');\r
+\r
+               // Setup form data\r
+               setFormValue('href', href);\r
+               setFormValue('title', inst.dom.getAttrib(elm, 'title'));\r
+               setFormValue('id', inst.dom.getAttrib(elm, 'id'));\r
+               setFormValue('style', inst.dom.getAttrib(elm, "style"));\r
+               setFormValue('rel', inst.dom.getAttrib(elm, 'rel'));\r
+               setFormValue('rev', inst.dom.getAttrib(elm, 'rev'));\r
+               setFormValue('charset', inst.dom.getAttrib(elm, 'charset'));\r
+               setFormValue('hreflang', inst.dom.getAttrib(elm, 'hreflang'));\r
+               setFormValue('dir', inst.dom.getAttrib(elm, 'dir'));\r
+               setFormValue('lang', inst.dom.getAttrib(elm, 'lang'));\r
+               setFormValue('tabindex', inst.dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));\r
+               setFormValue('accesskey', inst.dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));\r
+               setFormValue('type', inst.dom.getAttrib(elm, 'type'));\r
+               setFormValue('onfocus', inst.dom.getAttrib(elm, 'onfocus'));\r
+               setFormValue('onblur', inst.dom.getAttrib(elm, 'onblur'));\r
+               setFormValue('onclick', onclick);\r
+               setFormValue('ondblclick', inst.dom.getAttrib(elm, 'ondblclick'));\r
+               setFormValue('onmousedown', inst.dom.getAttrib(elm, 'onmousedown'));\r
+               setFormValue('onmouseup', inst.dom.getAttrib(elm, 'onmouseup'));\r
+               setFormValue('onmouseover', inst.dom.getAttrib(elm, 'onmouseover'));\r
+               setFormValue('onmousemove', inst.dom.getAttrib(elm, 'onmousemove'));\r
+               setFormValue('onmouseout', inst.dom.getAttrib(elm, 'onmouseout'));\r
+               setFormValue('onkeypress', inst.dom.getAttrib(elm, 'onkeypress'));\r
+               setFormValue('onkeydown', inst.dom.getAttrib(elm, 'onkeydown'));\r
+               setFormValue('onkeyup', inst.dom.getAttrib(elm, 'onkeyup'));\r
+               setFormValue('target', inst.dom.getAttrib(elm, 'target'));\r
+               setFormValue('classes', inst.dom.getAttrib(elm, 'class'));\r
+\r
+               // Parse onclick data\r
+               if (onclick != null && onclick.indexOf('window.open') != -1)\r
+                       parseWindowOpen(onclick);\r
+               else\r
+                       parseFunction(onclick);\r
+\r
+               // Select by the values\r
+               selectByValue(formObj, 'dir', inst.dom.getAttrib(elm, 'dir'));\r
+               selectByValue(formObj, 'rel', inst.dom.getAttrib(elm, 'rel'));\r
+               selectByValue(formObj, 'rev', inst.dom.getAttrib(elm, 'rev'));\r
+               selectByValue(formObj, 'linklisthref', href);\r
+\r
+               if (href.charAt(0) == '#')\r
+                       selectByValue(formObj, 'anchorlist', href);\r
+\r
+               addClassesToList('classlist', 'advlink_styles');\r
+\r
+               selectByValue(formObj, 'classlist', inst.dom.getAttrib(elm, 'class'), true);\r
+               selectByValue(formObj, 'targetlist', inst.dom.getAttrib(elm, 'target'), true);\r
+       } else\r
+               addClassesToList('classlist', 'advlink_styles');\r
+}\r
+\r
+function checkPrefix(n) {\r
+       if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_email')))\r
+               n.value = 'mailto:' + n.value;\r
+\r
+       if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advlink_dlg.is_external')))\r
+               n.value = 'http://' + n.value;\r
+}\r
+\r
+function setFormValue(name, value) {\r
+       document.forms[0].elements[name].value = value;\r
+}\r
+\r
+function parseWindowOpen(onclick) {\r
+       var formObj = document.forms[0];\r
+\r
+       // Preprocess center code\r
+       if (onclick.indexOf('return false;') != -1) {\r
+               formObj.popupreturn.checked = true;\r
+               onclick = onclick.replace('return false;', '');\r
+       } else\r
+               formObj.popupreturn.checked = false;\r
+\r
+       var onClickData = parseLink(onclick);\r
+\r
+       if (onClickData != null) {\r
+               formObj.ispopup.checked = true;\r
+               setPopupControlsDisabled(false);\r
+\r
+               var onClickWindowOptions = parseOptions(onClickData['options']);\r
+               var url = onClickData['url'];\r
+\r
+               formObj.popupname.value = onClickData['target'];\r
+               formObj.popupurl.value = url;\r
+               formObj.popupwidth.value = getOption(onClickWindowOptions, 'width');\r
+               formObj.popupheight.value = getOption(onClickWindowOptions, 'height');\r
+\r
+               formObj.popupleft.value = getOption(onClickWindowOptions, 'left');\r
+               formObj.popuptop.value = getOption(onClickWindowOptions, 'top');\r
+\r
+               if (formObj.popupleft.value.indexOf('screen') != -1)\r
+                       formObj.popupleft.value = "c";\r
+\r
+               if (formObj.popuptop.value.indexOf('screen') != -1)\r
+                       formObj.popuptop.value = "c";\r
+\r
+               formObj.popuplocation.checked = getOption(onClickWindowOptions, 'location') == "yes";\r
+               formObj.popupscrollbars.checked = getOption(onClickWindowOptions, 'scrollbars') == "yes";\r
+               formObj.popupmenubar.checked = getOption(onClickWindowOptions, 'menubar') == "yes";\r
+               formObj.popupresizable.checked = getOption(onClickWindowOptions, 'resizable') == "yes";\r
+               formObj.popuptoolbar.checked = getOption(onClickWindowOptions, 'toolbar') == "yes";\r
+               formObj.popupstatus.checked = getOption(onClickWindowOptions, 'status') == "yes";\r
+               formObj.popupdependent.checked = getOption(onClickWindowOptions, 'dependent') == "yes";\r
+\r
+               buildOnClick();\r
+       }\r
+}\r
+\r
+function parseFunction(onclick) {\r
+       var formObj = document.forms[0];\r
+       var onClickData = parseLink(onclick);\r
+\r
+       // TODO: Add stuff here\r
+}\r
+\r
+function getOption(opts, name) {\r
+       return typeof(opts[name]) == "undefined" ? "" : opts[name];\r
+}\r
+\r
+function setPopupControlsDisabled(state) {\r
+       var formObj = document.forms[0];\r
+\r
+       formObj.popupname.disabled = state;\r
+       formObj.popupurl.disabled = state;\r
+       formObj.popupwidth.disabled = state;\r
+       formObj.popupheight.disabled = state;\r
+       formObj.popupleft.disabled = state;\r
+       formObj.popuptop.disabled = state;\r
+       formObj.popuplocation.disabled = state;\r
+       formObj.popupscrollbars.disabled = state;\r
+       formObj.popupmenubar.disabled = state;\r
+       formObj.popupresizable.disabled = state;\r
+       formObj.popuptoolbar.disabled = state;\r
+       formObj.popupstatus.disabled = state;\r
+       formObj.popupreturn.disabled = state;\r
+       formObj.popupdependent.disabled = state;\r
+\r
+       setBrowserDisabled('popupurlbrowser', state);\r
+}\r
+\r
+function parseLink(link) {\r
+       link = link.replace(new RegExp('&#39;', 'g'), "'");\r
+\r
+       var fnName = link.replace(new RegExp("\\s*([A-Za-z0-9\.]*)\\s*\\(.*", "gi"), "$1");\r
+\r
+       // Is function name a template function\r
+       var template = templates[fnName];\r
+       if (template) {\r
+               // Build regexp\r
+               var variableNames = template.match(new RegExp("'?\\$\\{[A-Za-z0-9\.]*\\}'?", "gi"));\r
+               var regExp = "\\s*[A-Za-z0-9\.]*\\s*\\(";\r
+               var replaceStr = "";\r
+               for (var i=0; i<variableNames.length; i++) {\r
+                       // Is string value\r
+                       if (variableNames[i].indexOf("'${") != -1)\r
+                               regExp += "'(.*)'";\r
+                       else // Number value\r
+                               regExp += "([0-9]*)";\r
+\r
+                       replaceStr += "$" + (i+1);\r
+\r
+                       // Cleanup variable name\r
+                       variableNames[i] = variableNames[i].replace(new RegExp("[^A-Za-z0-9]", "gi"), "");\r
+\r
+                       if (i != variableNames.length-1) {\r
+                               regExp += "\\s*,\\s*";\r
+                               replaceStr += "<delim>";\r
+                       } else\r
+                               regExp += ".*";\r
+               }\r
+\r
+               regExp += "\\);?";\r
+\r
+               // Build variable array\r
+               var variables = [];\r
+               variables["_function"] = fnName;\r
+               var variableValues = link.replace(new RegExp(regExp, "gi"), replaceStr).split('<delim>');\r
+               for (var i=0; i<variableNames.length; i++)\r
+                       variables[variableNames[i]] = variableValues[i];\r
+\r
+               return variables;\r
+       }\r
+\r
+       return null;\r
+}\r
+\r
+function parseOptions(opts) {\r
+       if (opts == null || opts == "")\r
+               return [];\r
+\r
+       // Cleanup the options\r
+       opts = opts.toLowerCase();\r
+       opts = opts.replace(/;/g, ",");\r
+       opts = opts.replace(/[^0-9a-z=,]/g, "");\r
+\r
+       var optionChunks = opts.split(',');\r
+       var options = [];\r
+\r
+       for (var i=0; i<optionChunks.length; i++) {\r
+               var parts = optionChunks[i].split('=');\r
+\r
+               if (parts.length == 2)\r
+                       options[parts[0]] = parts[1];\r
+       }\r
+\r
+       return options;\r
+}\r
+\r
+function buildOnClick() {\r
+       var formObj = document.forms[0];\r
+\r
+       if (!formObj.ispopup.checked) {\r
+               formObj.onclick.value = "";\r
+               return;\r
+       }\r
+\r
+       var onclick = "window.open('";\r
+       var url = formObj.popupurl.value;\r
+\r
+       onclick += url + "','";\r
+       onclick += formObj.popupname.value + "','";\r
+\r
+       if (formObj.popuplocation.checked)\r
+               onclick += "location=yes,";\r
+\r
+       if (formObj.popupscrollbars.checked)\r
+               onclick += "scrollbars=yes,";\r
+\r
+       if (formObj.popupmenubar.checked)\r
+               onclick += "menubar=yes,";\r
+\r
+       if (formObj.popupresizable.checked)\r
+               onclick += "resizable=yes,";\r
+\r
+       if (formObj.popuptoolbar.checked)\r
+               onclick += "toolbar=yes,";\r
+\r
+       if (formObj.popupstatus.checked)\r
+               onclick += "status=yes,";\r
+\r
+       if (formObj.popupdependent.checked)\r
+               onclick += "dependent=yes,";\r
+\r
+       if (formObj.popupwidth.value != "")\r
+               onclick += "width=" + formObj.popupwidth.value + ",";\r
+\r
+       if (formObj.popupheight.value != "")\r
+               onclick += "height=" + formObj.popupheight.value + ",";\r
+\r
+       if (formObj.popupleft.value != "") {\r
+               if (formObj.popupleft.value != "c")\r
+                       onclick += "left=" + formObj.popupleft.value + ",";\r
+               else\r
+                       onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";\r
+       }\r
+\r
+       if (formObj.popuptop.value != "") {\r
+               if (formObj.popuptop.value != "c")\r
+                       onclick += "top=" + formObj.popuptop.value + ",";\r
+               else\r
+                       onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";\r
+       }\r
+\r
+       if (onclick.charAt(onclick.length-1) == ',')\r
+               onclick = onclick.substring(0, onclick.length-1);\r
+\r
+       onclick += "');";\r
+\r
+       if (formObj.popupreturn.checked)\r
+               onclick += "return false;";\r
+\r
+       // tinyMCE.debug(onclick);\r
+\r
+       formObj.onclick.value = onclick;\r
+\r
+       if (formObj.href.value == "")\r
+               formObj.href.value = url;\r
+}\r
+\r
+function setAttrib(elm, attrib, value) {\r
+       var formObj = document.forms[0];\r
+       var valueElm = formObj.elements[attrib.toLowerCase()];\r
+       var dom = tinyMCEPopup.editor.dom;\r
+\r
+       if (typeof(value) == "undefined" || value == null) {\r
+               value = "";\r
+\r
+               if (valueElm)\r
+                       value = valueElm.value;\r
+       }\r
+\r
+       // Clean up the style\r
+       if (attrib == 'style')\r
+               value = dom.serializeStyle(dom.parseStyle(value), 'a');\r
+\r
+       dom.setAttrib(elm, attrib, value);\r
+}\r
+\r
+function getAnchorListHTML(id, target) {\r
+       var inst = tinyMCEPopup.editor;\r
+       var nodes = inst.dom.select('a.mceItemAnchor,img.mceItemAnchor'), name, i;\r
+       var html = "";\r
+\r
+       html += '<select id="' + id + '" name="' + id + '" class="mceAnchorList" o2nfocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target + '.value=';\r
+       html += 'this.options[this.selectedIndex].value;">';\r
+       html += '<option value="">---</option>';\r
+\r
+       for (i=0; i<nodes.length; i++) {\r
+               if ((name = inst.dom.getAttrib(nodes[i], "name")) != "")\r
+                       html += '<option value="#' + name + '">' + name + '</option>';\r
+       }\r
+\r
+       html += '</select>';\r
+\r
+       return html;\r
+}\r
+\r
+function insertAction() {\r
+       var inst = tinyMCEPopup.editor;\r
+       var elm, elementArray, i;\r
+\r
+       elm = inst.selection.getNode();\r
+       checkPrefix(document.forms[0].href);\r
+\r
+       elm = inst.dom.getParent(elm, "A");\r
+\r
+       // Remove element if there is no href\r
+       if (!document.forms[0].href.value) {\r
+               tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
+               i = inst.selection.getBookmark();\r
+               inst.dom.remove(elm, 1);\r
+               inst.selection.moveToBookmark(i);\r
+               tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+               tinyMCEPopup.close();\r
+               return;\r
+       }\r
+\r
+       tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
+\r
+       // Create new anchor elements\r
+       if (elm == null) {\r
+               inst.getDoc().execCommand("unlink", false, null);\r
+               tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});\r
+\r
+               elementArray = tinymce.grep(inst.dom.select("a"), function(n) {return inst.dom.getAttrib(n, 'href') == '#mce_temp_url#';});\r
+               for (i=0; i<elementArray.length; i++)\r
+                       setAllAttribs(elm = elementArray[i]);\r
+       } else\r
+               setAllAttribs(elm);\r
+\r
+       // Don't move caret if selection was image\r
+       if (elm.childNodes.length != 1 || elm.firstChild.nodeName != 'IMG') {\r
+               inst.focus();\r
+               inst.selection.select(elm);\r
+               inst.selection.collapse(0);\r
+               tinyMCEPopup.storeSelection();\r
+       }\r
+\r
+       tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function setAllAttribs(elm) {\r
+       var formObj = document.forms[0];\r
+       var href = formObj.href.value;\r
+       var target = getSelectValue(formObj, 'targetlist');\r
+\r
+       setAttrib(elm, 'href', href);\r
+       setAttrib(elm, 'title');\r
+       setAttrib(elm, 'target', target == '_self' ? '' : target);\r
+       setAttrib(elm, 'id');\r
+       setAttrib(elm, 'style');\r
+       setAttrib(elm, 'class', getSelectValue(formObj, 'classlist'));\r
+       setAttrib(elm, 'rel');\r
+       setAttrib(elm, 'rev');\r
+       setAttrib(elm, 'charset');\r
+       setAttrib(elm, 'hreflang');\r
+       setAttrib(elm, 'dir');\r
+       setAttrib(elm, 'lang');\r
+       setAttrib(elm, 'tabindex');\r
+       setAttrib(elm, 'accesskey');\r
+       setAttrib(elm, 'type');\r
+       setAttrib(elm, 'onfocus');\r
+       setAttrib(elm, 'onblur');\r
+       setAttrib(elm, 'onclick');\r
+       setAttrib(elm, 'ondblclick');\r
+       setAttrib(elm, 'onmousedown');\r
+       setAttrib(elm, 'onmouseup');\r
+       setAttrib(elm, 'onmouseover');\r
+       setAttrib(elm, 'onmousemove');\r
+       setAttrib(elm, 'onmouseout');\r
+       setAttrib(elm, 'onkeypress');\r
+       setAttrib(elm, 'onkeydown');\r
+       setAttrib(elm, 'onkeyup');\r
+\r
+       // Refresh in old MSIE\r
+       if (tinyMCE.isMSIE5)\r
+               elm.outerHTML = elm.outerHTML;\r
+}\r
+\r
+function getSelectValue(form_obj, field_name) {\r
+       var elm = form_obj.elements[field_name];\r
+\r
+       if (!elm || elm.options == null || elm.selectedIndex == -1)\r
+               return "";\r
+\r
+       return elm.options[elm.selectedIndex].value;\r
+}\r
+\r
+function getLinkListHTML(elm_id, target_form_element, onchange_func) {\r
+       if (typeof(tinyMCELinkList) == "undefined" || tinyMCELinkList.length == 0)\r
+               return "";\r
+\r
+       var html = "";\r
+\r
+       html += '<select id="' + elm_id + '" name="' + elm_id + '"';\r
+       html += ' class="mceLinkList" onfoc2us="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';\r
+       html += 'this.options[this.selectedIndex].value;';\r
+\r
+       if (typeof(onchange_func) != "undefined")\r
+               html += onchange_func + '(\'' + target_form_element + '\',this.options[this.selectedIndex].text,this.options[this.selectedIndex].value);';\r
+\r
+       html += '"><option value="">---</option>';\r
+\r
+       for (var i=0; i<tinyMCELinkList.length; i++)\r
+               html += '<option value="' + tinyMCELinkList[i][1] + '">' + tinyMCELinkList[i][0] + '</option>';\r
+\r
+       html += '</select>';\r
+\r
+       return html;\r
+\r
+       // tinyMCE.debug('-- image list start --', html, '-- image list end --');\r
+}\r
+\r
+function getTargetListHTML(elm_id, target_form_element) {\r
+       var targets = tinyMCEPopup.getParam('theme_advanced_link_targets', '').split(';');\r
+       var html = '';\r
+\r
+       html += '<select id="' + elm_id + '" name="' + elm_id + '" onf2ocus="tinyMCE.addSelectAccessibility(event, this, window);" onchange="this.form.' + target_form_element + '.value=';\r
+       html += 'this.options[this.selectedIndex].value;">';\r
+       html += '<option value="_self">' + tinyMCEPopup.getLang('advlink_dlg.target_same') + '</option>';\r
+       html += '<option value="_blank">' + tinyMCEPopup.getLang('advlink_dlg.target_blank') + ' (_blank)</option>';\r
+       html += '<option value="_parent">' + tinyMCEPopup.getLang('advlink_dlg.target_parent') + ' (_parent)</option>';\r
+       html += '<option value="_top">' + tinyMCEPopup.getLang('advlink_dlg.target_top') + ' (_top)</option>';\r
+\r
+       for (var i=0; i<targets.length; i++) {\r
+               var key, value;\r
+\r
+               if (targets[i] == "")\r
+                       continue;\r
+\r
+               key = targets[i].split('=')[0];\r
+               value = targets[i].split('=')[1];\r
+\r
+               html += '<option value="' + key + '">' + value + ' (' + key + ')</option>';\r
+       }\r
+\r
+       html += '</select>';\r
+\r
+       return html;\r
+}\r
+\r
+// While loading\r
+preinit();\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/advlink/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/advlink/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..c71ffbd
--- /dev/null
@@ -0,0 +1,52 @@
+tinyMCE.addI18n('en.advlink_dlg',{\r
+title:"Insert/edit link",\r
+url:"Link URL",\r
+target:"Target",\r
+titlefield:"Title",\r
+is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",\r
+is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",\r
+list:"Link list",\r
+general_tab:"General",\r
+popup_tab:"Popup",\r
+events_tab:"Events",\r
+advanced_tab:"Advanced",\r
+general_props:"General properties",\r
+popup_props:"Popup properties",\r
+event_props:"Events",\r
+advanced_props:"Advanced properties",\r
+popup_opts:"Options",\r
+anchor_names:"Anchors",\r
+target_same:"Open in this window / frame",\r
+target_parent:"Open in parent window / frame",\r
+target_top:"Open in top frame (replaces all frames)",\r
+target_blank:"Open in new window",\r
+popup:"Javascript popup",\r
+popup_url:"Popup URL",\r
+popup_name:"Window name",\r
+popup_return:"Insert 'return false'",\r
+popup_scrollbars:"Show scrollbars",\r
+popup_statusbar:"Show status bar",\r
+popup_toolbar:"Show toolbars",\r
+popup_menubar:"Show menu bar",\r
+popup_location:"Show location bar",\r
+popup_resizable:"Make window resizable",\r
+popup_dependent:"Dependent (Mozilla/Firefox only)",\r
+popup_size:"Size",\r
+popup_position:"Position (X/Y)",\r
+id:"Id",\r
+style:"Style",\r
+classes:"Classes",\r
+target_name:"Target name",\r
+langdir:"Language direction",\r
+target_langcode:"Target language",\r
+langcode:"Language code",\r
+encoding:"Target character encoding",\r
+mime:"Target MIME type",\r
+rel:"Relationship page to target",\r
+rev:"Relationship target to page",\r
+tabindex:"Tabindex",\r
+accesskey:"Accesskey",\r
+ltr:"Left to right",\r
+rtl:"Right to left",\r
+link_list:"Link list"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlink/link.htm b/plugins/TinyMCE/js/plugins/advlink/link.htm
new file mode 100644 (file)
index 0000000..876669c
--- /dev/null
@@ -0,0 +1,333 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advlink_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/validate.js"></script>\r
+       <script type="text/javascript" src="js/advlink.js"></script>\r
+       <link href="css/advlink.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body id="advlink" style="display: none">\r
+    <form onsubmit="insertAction();return false;" action="#">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advlink_dlg.general_tab}</a></span></li>\r
+                               <li id="popup_tab"><span><a href="javascript:mcTabs.displayTab('popup_tab','popup_panel');" onmousedown="return false;">{#advlink_dlg.popup_tab}</a></span></li>\r
+                               <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#advlink_dlg.events_tab}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#advlink_dlg.advanced_tab}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <fieldset>\r
+                                       <legend>{#advlink_dlg.general_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                 <td class="nowrap"><label id="hreflabel" for="href">{#advlink_dlg.url}</label></td>\r
+                                                 <td><table border="0" cellspacing="0" cellpadding="0">\r
+                                                               <tr>\r
+                                                                 <td><input id="href" name="href" type="text" class="mceFocus" value="" onchange="selectByValue(this.form,'linklisthref',this.value);" /></td>\r
+                                                                 <td id="hrefbrowsercontainer">&nbsp;</td>\r
+                                                               </tr>\r
+                                                         </table></td>\r
+                                               </tr>\r
+                                               <tr id="linklisthrefrow">\r
+                                                       <td class="column1"><label for="linklisthref">{#advlink_dlg.list}</label></td>\r
+                                                       <td colspan="2" id="linklisthrefcontainer"><select id="linklisthref"><option value=""></option></select></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="anchorlist">{#advlink_dlg.anchor_names}</label></td>\r
+                                                       <td colspan="2" id="anchorlistcontainer"><select id="anchorlist"><option value=""></option></select></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><label id="targetlistlabel" for="targetlist">{#advlink_dlg.target}</label></td>\r
+                                                       <td id="targetlistcontainer"><select id="targetlist"><option value=""></option></select></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label id="titlelabel" for="title">{#advlink_dlg.titlefield}</label></td>\r
+                                                       <td><input id="title" name="title" type="text" value="" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
+                                                       <td>\r
+                                                                <select id="classlist" name="classlist" onchange="changeClass();">\r
+                                                                       <option value="" selected="selected">{#not_set}</option>\r
+                                                                </select>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="popup_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#advlink_dlg.popup_props}</legend>\r
+\r
+                                       <input type="checkbox" id="ispopup" name="ispopup" class="radio" onclick="setPopupControlsDisabled(!this.checked);buildOnClick();" />\r
+                                       <label id="ispopuplabel" for="ispopup">{#advlink_dlg.popup}</label>\r
+\r
+                                       <table border="0" cellpadding="0" cellspacing="4">\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="popupurl">{#advlink_dlg.popup_url}</label>&nbsp;</td>\r
+                                                       <td>\r
+                                                               <table border="0" cellspacing="0" cellpadding="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="text" name="popupurl" id="popupurl" value="" onchange="buildOnClick();" /></td>\r
+                                                                               <td id="popupurlbrowsercontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="popupname">{#advlink_dlg.popup_name}</label>&nbsp;</td>\r
+                                                       <td><input type="text" name="popupname" id="popupname" value="" onchange="buildOnClick();" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label>{#advlink_dlg.popup_size}</label>&nbsp;</td>\r
+                                                       <td class="nowrap">\r
+                                                               <input type="text" id="popupwidth" name="popupwidth" value="" onchange="buildOnClick();" /> x\r
+                                                               <input type="text" id="popupheight" name="popupheight" value="" onchange="buildOnClick();" /> px\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap" id="labelleft"><label>{#advlink_dlg.popup_position}</label>&nbsp;</td>\r
+                                                       <td class="nowrap">\r
+                                                               <input type="text" id="popupleft" name="popupleft" value="" onchange="buildOnClick();" /> /                                \r
+                                                               <input type="text" id="popuptop" name="popuptop" value="" onchange="buildOnClick();" /> (c /c = center)\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+\r
+                                       <fieldset>\r
+                                               <legend>{#advlink_dlg.popup_opts}</legend>\r
+\r
+                                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                                       <tr>\r
+                                                               <td><input type="checkbox" id="popuplocation" name="popuplocation" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popuplocationlabel" for="popuplocation">{#advlink_dlg.popup_location}</label></td>\r
+                                                               <td><input type="checkbox" id="popupscrollbars" name="popupscrollbars" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popupscrollbarslabel" for="popupscrollbars">{#advlink_dlg.popup_scrollbars}</label></td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><input type="checkbox" id="popupmenubar" name="popupmenubar" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popupmenubarlabel" for="popupmenubar">{#advlink_dlg.popup_menubar}</label></td>\r
+                                                               <td><input type="checkbox" id="popupresizable" name="popupresizable" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popupresizablelabel" for="popupresizable">{#advlink_dlg.popup_resizable}</label></td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><input type="checkbox" id="popuptoolbar" name="popuptoolbar" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popuptoolbarlabel" for="popuptoolbar">{#advlink_dlg.popup_toolbar}</label></td>\r
+                                                               <td><input type="checkbox" id="popupdependent" name="popupdependent" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popupdependentlabel" for="popupdependent">{#advlink_dlg.popup_dependent}</label></td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><input type="checkbox" id="popupstatus" name="popupstatus" class="checkbox" onchange="buildOnClick();" /></td>\r
+                                                               <td class="nowrap"><label id="popupstatuslabel" for="popupstatus">{#advlink_dlg.popup_statusbar}</label></td>\r
+                                                               <td><input type="checkbox" id="popupreturn" name="popupreturn" class="checkbox" onchange="buildOnClick();" checked="checked" /></td>\r
+                                                               <td class="nowrap"><label id="popupreturnlabel" for="popupreturn">{#advlink_dlg.popup_return}</label></td>\r
+                                                       </tr>\r
+                                               </table>\r
+                                       </fieldset>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                       <fieldset>\r
+                                       <legend>{#advlink_dlg.advanced_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="0" cellspacing="4">\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="idlabel" for="id">{#advlink_dlg.id}</label></td> \r
+                                                       <td><input id="id" name="id" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="stylelabel" for="style">{#advlink_dlg.style}</label></td>\r
+                                                       <td><input type="text" id="style" name="style" value="" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="classeslabel" for="classes">{#advlink_dlg.classes}</label></td>\r
+                                                       <td><input type="text" id="classes" name="classes" value="" onchange="selectByValue(this.form,'classlist',this.value,true);" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="targetlabel" for="target">{#advlink_dlg.target_name}</label></td>\r
+                                                       <td><input type="text" id="target" name="target" value="" onchange="selectByValue(this.form,'targetlist',this.value,true);" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="dirlabel" for="dir">{#advlink_dlg.langdir}</label></td> \r
+                                                       <td>\r
+                                                               <select id="dir" name="dir"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="ltr">{#advlink_dlg.ltr}</option> \r
+                                                                               <option value="rtl">{#advlink_dlg.rtl}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="hreflanglabel" for="hreflang">{#advlink_dlg.target_langcode}</label></td>\r
+                                                       <td><input type="text" id="hreflang" name="hreflang" value="" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="langlabel" for="lang">{#advlink_dlg.langcode}</label></td> \r
+                                                       <td>\r
+                                                               <input id="lang" name="lang" type="text" value="" />\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="charsetlabel" for="charset">{#advlink_dlg.encoding}</label></td>\r
+                                                       <td><input type="text" id="charset" name="charset" value="" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="typelabel" for="type">{#advlink_dlg.mime}</label></td>\r
+                                                       <td><input type="text" id="type" name="type" value="" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="rellabel" for="rel">{#advlink_dlg.rel}</label></td>\r
+                                                       <td><select id="rel" name="rel"> \r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="lightbox">Lightbox</option> \r
+                                                                       <option value="alternate">Alternate</option> \r
+                                                                       <option value="designates">Designates</option> \r
+                                                                       <option value="stylesheet">Stylesheet</option> \r
+                                                                       <option value="start">Start</option> \r
+                                                                       <option value="next">Next</option> \r
+                                                                       <option value="prev">Prev</option> \r
+                                                                       <option value="contents">Contents</option> \r
+                                                                       <option value="index">Index</option> \r
+                                                                       <option value="glossary">Glossary</option> \r
+                                                                       <option value="copyright">Copyright</option> \r
+                                                                       <option value="chapter">Chapter</option> \r
+                                                                       <option value="subsection">Subsection</option> \r
+                                                                       <option value="appendix">Appendix</option> \r
+                                                                       <option value="help">Help</option> \r
+                                                                       <option value="bookmark">Bookmark</option>\r
+                                                                       <option value="nofollow">No Follow</option>\r
+                                                                       <option value="tag">Tag</option>\r
+                                                               </select> \r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="revlabel" for="rev">{#advlink_dlg.rev}</label></td>\r
+                                                       <td><select id="rev" name="rev"> \r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="alternate">Alternate</option> \r
+                                                                       <option value="designates">Designates</option> \r
+                                                                       <option value="stylesheet">Stylesheet</option> \r
+                                                                       <option value="start">Start</option> \r
+                                                                       <option value="next">Next</option> \r
+                                                                       <option value="prev">Prev</option> \r
+                                                                       <option value="contents">Contents</option> \r
+                                                                       <option value="index">Index</option> \r
+                                                                       <option value="glossary">Glossary</option> \r
+                                                                       <option value="copyright">Copyright</option> \r
+                                                                       <option value="chapter">Chapter</option> \r
+                                                                       <option value="subsection">Subsection</option> \r
+                                                                       <option value="appendix">Appendix</option> \r
+                                                                       <option value="help">Help</option> \r
+                                                                       <option value="bookmark">Bookmark</option> \r
+                                                               </select> \r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="tabindexlabel" for="tabindex">{#advlink_dlg.tabindex}</label></td>\r
+                                                       <td><input type="text" id="tabindex" name="tabindex" value="" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="accesskeylabel" for="accesskey">{#advlink_dlg.accesskey}</label></td>\r
+                                                       <td><input type="text" id="accesskey" name="accesskey" value="" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                                       <legend>{#advlink_dlg.event_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="0" cellspacing="4">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onfocus">onfocus</label></td> \r
+                                                       <td><input id="onfocus" name="onfocus" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onblur">onblur</label></td> \r
+                                                       <td><input id="onblur" name="onblur" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onclick">onclick</label></td> \r
+                                                       <td><input id="onclick" name="onclick" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="ondblclick">ondblclick</label></td> \r
+                                                       <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onmousedown">onmousedown</label></td> \r
+                                                       <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onmouseup">onmouseup</label></td> \r
+                                                       <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onmouseover">onmouseover</label></td> \r
+                                                       <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onmousemove">onmousemove</label></td> \r
+                                                       <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onmouseout">onmouseout</label></td> \r
+                                                       <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onkeypress">onkeypress</label></td> \r
+                                                       <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onkeydown">onkeydown</label></td> \r
+                                                       <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="onkeyup">onkeyup</label></td> \r
+                                                       <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> \r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+    </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/advlist/editor_plugin.js b/plugins/TinyMCE/js/plugins/advlist/editor_plugin.js
new file mode 100644 (file)
index 0000000..02d1697
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.AdvListPlugin",{init:function(b,c){var d=this;d.editor=b;function e(g){var f=[];a(g.split(/,/),function(h){f.push({title:"advlist."+(h=="default"?"def":h.replace(/-/g,"_")),styles:{listStyleType:h=="default"?"":h}})});return f}d.numlist=b.getParam("advlist_number_styles")||e("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");d.bullist=b.getParam("advlist_bullet_styles")||e("default,circle,disc,square")},createControl:function(d,b){var f=this,e,h;if(d=="numlist"||d=="bullist"){if(f[d][0].title=="advlist.def"){h=f[d][0]}function c(i,k){var j=true;a(k.styles,function(m,l){if(f.editor.dom.getStyle(i,l)!=m){j=false;return false}});return j}function g(){var k,i=f.editor,l=i.dom,j=i.selection;k=l.getParent(j.getNode(),"ol,ul");if(!k||k.nodeName==(d=="bullist"?"OL":"UL")||c(k,h)){i.execCommand(d=="bullist"?"InsertUnorderedList":"InsertOrderedList")}if(h){k=l.getParent(j.getNode(),"ol,ul");if(k){l.setStyles(k,h.styles);k.removeAttribute("_mce_style")}}}e=b.createSplitButton(d,{title:"advanced."+d+"_desc","class":"mce_"+d,onclick:function(){g()}});e.onRenderMenu.add(function(i,j){j.onShowMenu.add(function(){var m=f.editor.dom,l=m.getParent(f.editor.selection.getNode(),"ol,ul"),k;if(l||h){k=f[d];a(j.items,function(n){var o=true;n.setSelected(0);if(l&&!n.isDisabled()){a(k,function(p){if(p.id==n.id){if(!c(l,p)){o=false;return false}}});if(o){n.setSelected(1)}}});if(!l){j.items[h.id].setSelected(1)}}});j.add({id:f.editor.dom.uniqueId(),title:"advlist.types","class":"mceMenuItemTitle"}).setDisabled(1);a(f[d],function(k){k.id=f.editor.dom.uniqueId();j.add({id:k.id,title:k.title,onclick:function(){h=k;g()}})})});return e}},getInfo:function(){return{longname:"Advanced lists",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("advlist",tinymce.plugins.AdvListPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/advlist/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/advlist/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..a61887a
--- /dev/null
@@ -0,0 +1,154 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.plugins.AdvListPlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       function buildFormats(str) {\r
+                               var formats = [];\r
+\r
+                               each(str.split(/,/), function(type) {\r
+                                       formats.push({\r
+                                               title : 'advlist.' + (type == 'default' ? 'def' : type.replace(/-/g, '_')),\r
+                                               styles : {\r
+                                                       listStyleType : type == 'default' ? '' : type\r
+                                               }\r
+                                       });\r
+                               });\r
+\r
+                               return formats;\r
+                       };\r
+\r
+                       // Setup number formats from config or default\r
+                       t.numlist = ed.getParam("advlist_number_styles") || buildFormats("default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman");\r
+                       t.bullist = ed.getParam("advlist_bullet_styles") || buildFormats("default,circle,disc,square");\r
+               },\r
+\r
+               createControl: function(name, cm) {\r
+                       var t = this, btn, format;\r
+\r
+                       if (name == 'numlist' || name == 'bullist') {\r
+                               // Default to first item if it's a default item\r
+                               if (t[name][0].title == 'advlist.def')\r
+                                       format = t[name][0];\r
+\r
+                               function hasFormat(node, format) {\r
+                                       var state = true;\r
+\r
+                                       each(format.styles, function(value, name) {\r
+                                               // Format doesn't match\r
+                                               if (t.editor.dom.getStyle(node, name) != value) {\r
+                                                       state = false;\r
+                                                       return false;\r
+                                               }\r
+                                       });\r
+\r
+                                       return state;\r
+                               };\r
+\r
+                               function applyListFormat() {\r
+                                       var list, ed = t.editor, dom = ed.dom, sel = ed.selection;\r
+\r
+                                       // Check for existing list element\r
+                                       list = dom.getParent(sel.getNode(), 'ol,ul');\r
+\r
+                                       // Switch/add list type if needed\r
+                                       if (!list || list.nodeName == (name == 'bullist' ? 'OL' : 'UL') || hasFormat(list, format))\r
+                                               ed.execCommand(name == 'bullist' ? 'InsertUnorderedList' : 'InsertOrderedList');\r
+\r
+                                       // Append styles to new list element\r
+                                       if (format) {\r
+                                               list = dom.getParent(sel.getNode(), 'ol,ul');\r
+\r
+                                               if (list) {\r
+                                                       dom.setStyles(list, format.styles);\r
+                                                       list.removeAttribute('_mce_style');\r
+                                               }\r
+                                       }\r
+                               };\r
+\r
+                               btn = cm.createSplitButton(name, {\r
+                                       title : 'advanced.' + name + '_desc',\r
+                                       'class' : 'mce_' + name,\r
+                                       onclick : function() {\r
+                                               applyListFormat();\r
+                                       }\r
+                               });\r
+\r
+                               btn.onRenderMenu.add(function(btn, menu) {\r
+                                       menu.onShowMenu.add(function() {\r
+                                               var dom = t.editor.dom, list = dom.getParent(t.editor.selection.getNode(), 'ol,ul'), fmtList;\r
+\r
+                                               if (list || format) {\r
+                                                       fmtList = t[name];\r
+\r
+                                                       // Unselect existing items\r
+                                                       each(menu.items, function(item) {\r
+                                                               var state = true;\r
+\r
+                                                               item.setSelected(0);\r
+\r
+                                                               if (list && !item.isDisabled()) {\r
+                                                                       each(fmtList, function(fmt) {\r
+                                                                               if (fmt.id == item.id) {\r
+                                                                                       if (!hasFormat(list, fmt)) {\r
+                                                                                               state = false;\r
+                                                                                               return false;\r
+                                                                                       }\r
+                                                                               }\r
+                                                                       });\r
+\r
+                                                                       if (state)\r
+                                                                               item.setSelected(1);\r
+                                                               }\r
+                                                       });\r
+\r
+                                                       // Select the current format\r
+                                                       if (!list)\r
+                                                               menu.items[format.id].setSelected(1);\r
+                                               }\r
+                                       });\r
+\r
+                                       menu.add({id : t.editor.dom.uniqueId(), title : 'advlist.types', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+\r
+                                       each(t[name], function(item) {\r
+                                               item.id = t.editor.dom.uniqueId();\r
+\r
+                                               menu.add({id : item.id, title : item.title, onclick : function() {\r
+                                                       format = item;\r
+                                                       applyListFormat();\r
+                                               }});\r
+                                       });\r
+                               });\r
+\r
+                               return btn;\r
+                       }\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Advanced lists',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/advlist',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('advlist', tinymce.plugins.AdvListPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autoresize/editor_plugin.js b/plugins/TinyMCE/js/plugins/autoresize/editor_plugin.js
new file mode 100644 (file)
index 0000000..1676b15
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.AutoResizePlugin",{init:function(a,c){var d=this;if(a.getParam("fullscreen_is_enabled")){return}function b(){var h=a.getDoc(),e=h.body,j=h.documentElement,g=tinymce.DOM,i=d.autoresize_min_height,f;f=tinymce.isIE?e.scrollHeight:j.offsetHeight;if(f>d.autoresize_min_height){i=f}g.setStyle(g.get(a.id+"_ifr"),"height",i+"px");if(d.throbbing){a.setProgressState(false);a.setProgressState(true)}}d.editor=a;d.autoresize_min_height=a.getElement().offsetHeight;a.onChange.add(b);a.onSetContent.add(b);a.onPaste.add(b);a.onKeyUp.add(b);a.onPostRender.add(b);if(a.getParam("autoresize_on_init",true)){a.onInit.add(function(f,e){f.setProgressState(true);d.throbbing=true;f.getBody().style.overflowY="hidden"});a.onLoadContent.add(function(f,e){b();setTimeout(function(){b();f.setProgressState(false);d.throbbing=false},1250)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"Auto Resize",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("autoresize",tinymce.plugins.AutoResizePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autoresize/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/autoresize/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..c260b7a
--- /dev/null
@@ -0,0 +1,119 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+       /**
+        * Auto Resize
+        * 
+        * This plugin automatically resizes the content area to fit its content height.
+        * It will retain a minimum height, which is the height of the content area when
+        * it's initialized.
+        */
+       tinymce.create('tinymce.plugins.AutoResizePlugin', {
+               /**
+                * Initializes the plugin, this will be executed after the plugin has been created.
+                * This call is done before the editor instance has finished it's initialization so use the onInit event
+                * of the editor instance to intercept that event.
+                *
+                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.
+                * @param {string} url Absolute URL to where the plugin is located.
+                */
+               init : function(ed, url) {
+                       var t = this;
+
+                       if (ed.getParam('fullscreen_is_enabled'))
+                               return;
+
+                       /**
+                        * This method gets executed each time the editor needs to resize.
+                        */
+                       function resize() {
+                               var d = ed.getDoc(), b = d.body, de = d.documentElement, DOM = tinymce.DOM, resizeHeight = t.autoresize_min_height, myHeight;
+
+                               // Get height differently depending on the browser used
+                               myHeight = tinymce.isIE ? b.scrollHeight : de.offsetHeight;
+
+                               // Don't make it smaller than the minimum height
+                               if (myHeight > t.autoresize_min_height)
+                                       resizeHeight = myHeight;
+
+                               // Resize content element
+                               DOM.setStyle(DOM.get(ed.id + '_ifr'), 'height', resizeHeight + 'px');
+
+                               // if we're throbbing, we'll re-throb to match the new size
+                               if (t.throbbing) {
+                                       ed.setProgressState(false);
+                                       ed.setProgressState(true);
+                               }
+                       };
+
+                       t.editor = ed;
+
+                       // Define minimum height
+                       t.autoresize_min_height = ed.getElement().offsetHeight;
+
+                       // Add appropriate listeners for resizing content area
+                       ed.onChange.add(resize);
+                       ed.onSetContent.add(resize);
+                       ed.onPaste.add(resize);
+                       ed.onKeyUp.add(resize);
+                       ed.onPostRender.add(resize);
+
+                       if (ed.getParam('autoresize_on_init', true)) {
+                               // Things to do when the editor is ready
+                               ed.onInit.add(function(ed, l) {
+                                       // Show throbber until content area is resized properly
+                                       ed.setProgressState(true);
+                                       t.throbbing = true;
+
+                                       // Hide scrollbars
+                                       ed.getBody().style.overflowY = "hidden";
+                               });
+
+                               ed.onLoadContent.add(function(ed, l) {
+                                       resize();
+
+                                       // Because the content area resizes when its content CSS loads,
+                                       // and we can't easily add a listener to its onload event,
+                                       // we'll just trigger a resize after a short loading period
+                                       setTimeout(function() {
+                                               resize();
+
+                                               // Disable throbber
+                                               ed.setProgressState(false);
+                                               t.throbbing = false;
+                                       }, 1250);
+                               });
+                       }
+
+                       // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');
+                       ed.addCommand('mceAutoResize', resize);
+               },
+
+               /**
+                * Returns information about the plugin as a name/value array.
+                * The current keys are longname, author, authorurl, infourl and version.
+                *
+                * @return {Object} Name/value array containing information about the plugin.
+                */
+               getInfo : function() {
+                       return {
+                               longname : 'Auto Resize',
+                               author : 'Moxiecode Systems AB',
+                               authorurl : 'http://tinymce.moxiecode.com',
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autoresize',
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion
+                       };
+               }
+       });
+
+       // Register plugin
+       tinymce.PluginManager.add('autoresize', tinymce.plugins.AutoResizePlugin);
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autosave/editor_plugin.js b/plugins/TinyMCE/js/plugins/autosave/editor_plugin.js
new file mode 100644 (file)
index 0000000..6e48540
--- /dev/null
@@ -0,0 +1 @@
+(function(e){var c="autosave",g="restoredraft",b=true,f,d,a=e.util.Dispatcher;e.create("tinymce.plugins.AutoSave",{init:function(i,j){var h=this,l=i.settings;h.editor=i;function k(n){var m={s:1000,m:60000};n=/^(\d+)([ms]?)$/.exec(""+n);return(n[2]?m[n[2]]:1)*parseInt(n)}e.each({ask_before_unload:b,interval:"30s",retention:"20m",minlength:50},function(n,m){m=c+"_"+m;if(l[m]===f){l[m]=n}});l.autosave_interval=k(l.autosave_interval);l.autosave_retention=k(l.autosave_retention);i.addButton(g,{title:c+".restore_content",onclick:function(){if(i.getContent({draft:true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi,"").length>0){i.windowManager.confirm(c+".warning_message",function(m){if(m){h.restoreDraft()}})}else{h.restoreDraft()}}});i.onNodeChange.add(function(){var m=i.controlManager;if(m.get(g)){m.setDisabled(g,!h.hasDraft())}});i.onInit.add(function(){if(i.controlManager.get(g)){h.setupStorage(i);setInterval(function(){h.storeDraft();i.nodeChanged()},l.autosave_interval)}});h.onStoreDraft=new a(h);h.onRestoreDraft=new a(h);h.onRemoveDraft=new a(h);if(!d){window.onbeforeunload=e.plugins.AutoSave._beforeUnloadHandler;d=b}},getInfo:function(){return{longname:"Auto save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave",version:e.majorVersion+"."+e.minorVersion}},getExpDate:function(){return new Date(new Date().getTime()+this.editor.settings.autosave_retention).toUTCString()},setupStorage:function(i){var h=this,k=c+"_test",j="OK";h.key=c+i.id;e.each([function(){if(localStorage){localStorage.setItem(k,j);if(localStorage.getItem(k)===j){localStorage.removeItem(k);return localStorage}}},function(){if(sessionStorage){sessionStorage.setItem(k,j);if(sessionStorage.getItem(k)===j){sessionStorage.removeItem(k);return sessionStorage}}},function(){if(e.isIE){i.getElement().style.behavior="url('#default#userData')";return{autoExpires:b,setItem:function(l,n){var m=i.getElement();m.setAttribute(l,n);m.expires=h.getExpDate();m.save("TinyMCE")},getItem:function(l){var m=i.getElement();m.load("TinyMCE");return m.getAttribute(l)},removeItem:function(l){i.getElement().removeAttribute(l)}}}},],function(l){try{h.storage=l();if(h.storage){return false}}catch(m){}})},storeDraft:function(){var i=this,l=i.storage,j=i.editor,h,k;if(l){if(!l.getItem(i.key)&&!j.isDirty()){return}k=j.getContent({draft:true});if(k.length>j.settings.autosave_minlength){h=i.getExpDate();if(!i.storage.autoExpires){i.storage.setItem(i.key+"_expires",h)}i.storage.setItem(i.key,k);i.onStoreDraft.dispatch(i,{expires:h,content:k})}}},restoreDraft:function(){var h=this,i=h.storage;if(i){content=i.getItem(h.key);if(content){h.editor.setContent(content);h.onRestoreDraft.dispatch(h,{content:content})}}},hasDraft:function(){var h=this,k=h.storage,i,j;if(k){j=!!k.getItem(h.key);if(j){if(!h.storage.autoExpires){i=new Date(k.getItem(h.key+"_expires"));if(new Date().getTime()<i.getTime()){return b}h.removeDraft()}else{return b}}}return false},removeDraft:function(){var h=this,k=h.storage,i=h.key,j;if(k){j=k.getItem(i);k.removeItem(i);k.removeItem(i+"_expires");if(j){h.onRemoveDraft.dispatch(h,{content:j})}}},"static":{_beforeUnloadHandler:function(h){var i;e.each(tinyMCE.editors,function(j){if(j.plugins.autosave){j.plugins.autosave.storeDraft()}if(j.getParam("fullscreen_is_enabled")){return}if(!i&&j.isDirty()&&j.getParam("autosave_ask_before_unload")){i=j.getLang("autosave.unload_msg")}});return i}}});e.PluginManager.add("autosave",e.plugins.AutoSave)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/autosave/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/autosave/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..581e8f6
--- /dev/null
@@ -0,0 +1,422 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ *\r
+ * Adds auto-save capability to the TinyMCE text editor to rescue content\r
+ * inadvertently lost. This plugin was originally developed by Speednet\r
+ * and that project can be found here: http://code.google.com/p/tinyautosave/\r
+ *\r
+ * TECHNOLOGY DISCUSSION:\r
+ * \r
+ * The plugin attempts to use the most advanced features available in the current browser to save\r
+ * as much content as possible.  There are a total of four different methods used to autosave the\r
+ * content.  In order of preference, they are:\r
+ * \r
+ * 1. localStorage - A new feature of HTML 5, localStorage can store megabytes of data per domain\r
+ * on the client computer. Data stored in the localStorage area has no expiration date, so we must\r
+ * manage expiring the data ourselves.  localStorage is fully supported by IE8, and it is supposed\r
+ * to be working in Firefox 3 and Safari 3.2, but in reality is is flaky in those browsers.  As\r
+ * HTML 5 gets wider support, the AutoSave plugin will use it automatically. In Windows Vista/7,\r
+ * localStorage is stored in the following folder:\r
+ * C:\Users\[username]\AppData\Local\Microsoft\Internet Explorer\DOMStore\[tempFolder]\r
+ * \r
+ * 2. sessionStorage - A new feature of HTML 5, sessionStorage works similarly to localStorage,\r
+ * except it is designed to expire after a certain amount of time.  Because the specification\r
+ * around expiration date/time is very loosely-described, it is preferrable to use locaStorage and\r
+ * manage the expiration ourselves.  sessionStorage has similar storage characteristics to\r
+ * localStorage, although it seems to have better support by Firefox 3 at the moment.  (That will\r
+ * certainly change as Firefox continues getting better at HTML 5 adoption.)\r
+ * \r
+ * 3. UserData - A very under-exploited feature of Microsoft Internet Explorer, UserData is a\r
+ * way to store up to 128K of data per "document", or up to 1MB of data per domain, on the client\r
+ * computer.  The feature is available for IE 5+, which makes it available for every version of IE\r
+ * supported by TinyMCE.  The content is persistent across browser restarts and expires on the\r
+ * date/time specified, just like a cookie.  However, the data is not cleared when the user clears\r
+ * cookies on the browser, which makes it well-suited for rescuing autosaved content.  UserData,\r
+ * like other Microsoft IE browser technologies, is implemented as a behavior attached to a\r
+ * specific DOM object, so in this case we attach the behavior to the same DOM element that the\r
+ * TinyMCE editor instance is attached to.\r
+ */\r
+\r
+(function(tinymce) {\r
+       // Setup constants to help the compressor to reduce script size\r
+       var PLUGIN_NAME = 'autosave',\r
+               RESTORE_DRAFT = 'restoredraft',\r
+               TRUE = true,\r
+               undefined,\r
+               unloadHandlerAdded,\r
+               Dispatcher = tinymce.util.Dispatcher;\r
+\r
+       /**\r
+        * This plugin adds auto-save capability to the TinyMCE text editor to rescue content\r
+        * inadvertently lost. By using localStorage.\r
+        *\r
+        * @class tinymce.plugins.AutoSave\r
+        */\r
+       tinymce.create('tinymce.plugins.AutoSave', {\r
+               /**\r
+                * Initializes the plugin, this will be executed after the plugin has been created.\r
+                * This call is done before the editor instance has finished it's initialization so use the onInit event\r
+                * of the editor instance to intercept that event.\r
+                *\r
+                * @method init\r
+                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
+                * @param {string} url Absolute URL to where the plugin is located.\r
+                */\r
+               init : function(ed, url) {\r
+                       var self = this, settings = ed.settings;\r
+\r
+                       self.editor = ed;\r
+\r
+                       // Parses the specified time string into a milisecond number 10m, 10s etc.\r
+                       function parseTime(time) {\r
+                               var multipels = {\r
+                                       s : 1000,\r
+                                       m : 60000\r
+                               };\r
+\r
+                               time = /^(\d+)([ms]?)$/.exec('' + time);\r
+\r
+                               return (time[2] ? multipels[time[2]] : 1) * parseInt(time);\r
+                       };\r
+\r
+                       // Default config\r
+                       tinymce.each({\r
+                               ask_before_unload : TRUE,\r
+                               interval : '30s',\r
+                               retention : '20m',\r
+                               minlength : 50\r
+                       }, function(value, key) {\r
+                               key = PLUGIN_NAME + '_' + key;\r
+\r
+                               if (settings[key] === undefined)\r
+                                       settings[key] = value;\r
+                       });\r
+\r
+                       // Parse times\r
+                       settings.autosave_interval = parseTime(settings.autosave_interval);\r
+                       settings.autosave_retention = parseTime(settings.autosave_retention);\r
+\r
+                       // Register restore button\r
+                       ed.addButton(RESTORE_DRAFT, {\r
+                               title : PLUGIN_NAME + ".restore_content",\r
+                               onclick : function() {\r
+                                       if (ed.getContent({draft: true}).replace(/\s|&nbsp;|<\/?p[^>]*>|<br[^>]*>/gi, "").length > 0) {\r
+                                               // Show confirm dialog if the editor isn't empty\r
+                                               ed.windowManager.confirm(\r
+                                                       PLUGIN_NAME + ".warning_message",\r
+                                                       function(ok) {\r
+                                                               if (ok)\r
+                                                                       self.restoreDraft();\r
+                                                       }\r
+                                               );\r
+                                       } else\r
+                                               self.restoreDraft();\r
+                               }\r
+                       });\r
+\r
+                       // Enable/disable restoredraft button depending on if there is a draft stored or not\r
+                       ed.onNodeChange.add(function() {\r
+                               var controlManager = ed.controlManager;\r
+\r
+                               if (controlManager.get(RESTORE_DRAFT))\r
+                                       controlManager.setDisabled(RESTORE_DRAFT, !self.hasDraft());\r
+                       });\r
+\r
+                       ed.onInit.add(function() {\r
+                               // Check if the user added the restore button, then setup auto storage logic\r
+                               if (ed.controlManager.get(RESTORE_DRAFT)) {\r
+                                       // Setup storage engine\r
+                                       self.setupStorage(ed);\r
+\r
+                                       // Auto save contents each interval time\r
+                                       setInterval(function() {\r
+                                               self.storeDraft();\r
+                                               ed.nodeChanged();\r
+                                       }, settings.autosave_interval);\r
+                               }\r
+                       });\r
+\r
+                       /**\r
+                        * This event gets fired when a draft is stored to local storage.\r
+                        *\r
+                        * @event onStoreDraft\r
+                        * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
+                        * @param {Object} draft Draft object containing the HTML contents of the editor.\r
+                        */\r
+                       self.onStoreDraft = new Dispatcher(self);\r
+\r
+                       /**\r
+                        * This event gets fired when a draft is restored from local storage.\r
+                        *\r
+                        * @event onStoreDraft\r
+                        * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
+                        * @param {Object} draft Draft object containing the HTML contents of the editor.\r
+                        */\r
+                       self.onRestoreDraft = new Dispatcher(self);\r
+\r
+                       /**\r
+                        * This event gets fired when a draft removed/expired.\r
+                        *\r
+                        * @event onRemoveDraft\r
+                        * @param {tinymce.plugins.AutoSave} sender Plugin instance sending the event.\r
+                        * @param {Object} draft Draft object containing the HTML contents of the editor.\r
+                        */\r
+                       self.onRemoveDraft = new Dispatcher(self);\r
+\r
+                       // Add ask before unload dialog only add one unload handler\r
+                       if (!unloadHandlerAdded) {\r
+                               window.onbeforeunload = tinymce.plugins.AutoSave._beforeUnloadHandler;\r
+                               unloadHandlerAdded = TRUE;\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Returns information about the plugin as a name/value array.\r
+                * The current keys are longname, author, authorurl, infourl and version.\r
+                *\r
+                * @method getInfo\r
+                * @return {Object} Name/value array containing information about the plugin.\r
+                */\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Auto save',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               /**\r
+                * Returns an expiration date UTC string.\r
+                *\r
+                * @method getExpDate\r
+                * @return {String} Expiration date UTC string.\r
+                */\r
+               getExpDate : function() {\r
+                       return new Date(\r
+                               new Date().getTime() + this.editor.settings.autosave_retention\r
+                       ).toUTCString();\r
+               },\r
+\r
+               /**\r
+                * This method will setup the storage engine. If the browser has support for it.\r
+                *\r
+                * @method setupStorage\r
+                */\r
+               setupStorage : function(ed) {\r
+                       var self = this, testKey = PLUGIN_NAME + '_test', testVal = "OK";\r
+\r
+                       self.key = PLUGIN_NAME + ed.id;\r
+\r
+                       // Loop though each storage engine type until we find one that works\r
+                       tinymce.each([\r
+                               function() {\r
+                                       // Try HTML5 Local Storage\r
+                                       if (localStorage) {\r
+                                               localStorage.setItem(testKey, testVal);\r
+\r
+                                               if (localStorage.getItem(testKey) === testVal) {\r
+                                                       localStorage.removeItem(testKey);\r
+\r
+                                                       return localStorage;\r
+                                               }\r
+                                       }\r
+                               },\r
+\r
+                               function() {\r
+                                       // Try HTML5 Session Storage\r
+                                       if (sessionStorage) {\r
+                                               sessionStorage.setItem(testKey, testVal);\r
+\r
+                                               if (sessionStorage.getItem(testKey) === testVal) {\r
+                                                       sessionStorage.removeItem(testKey);\r
+\r
+                                                       return sessionStorage;\r
+                                               }\r
+                                       }\r
+                               },\r
+\r
+                               function() {\r
+                                       // Try IE userData\r
+                                       if (tinymce.isIE) {\r
+                                               ed.getElement().style.behavior = "url('#default#userData')";\r
+\r
+                                               // Fake localStorage on old IE\r
+                                               return {\r
+                                                       autoExpires : TRUE,\r
+\r
+                                                       setItem : function(key, value) {\r
+                                                               var userDataElement = ed.getElement();\r
+\r
+                                                               userDataElement.setAttribute(key, value);\r
+                                                               userDataElement.expires = self.getExpDate();\r
+                                                               userDataElement.save("TinyMCE");\r
+                                                       },\r
+\r
+                                                       getItem : function(key) {\r
+                                                               var userDataElement = ed.getElement();\r
+\r
+                                                               userDataElement.load("TinyMCE");\r
+\r
+                                                               return userDataElement.getAttribute(key);\r
+                                                       },\r
+\r
+                                                       removeItem : function(key) {\r
+                                                               ed.getElement().removeAttribute(key);\r
+                                                       }\r
+                                               };\r
+                                       }\r
+                               },\r
+                       ], function(setup) {\r
+                               // Try executing each function to find a suitable storage engine\r
+                               try {\r
+                                       self.storage = setup();\r
+\r
+                                       if (self.storage)\r
+                                               return false;\r
+                               } catch (e) {\r
+                                       // Ignore\r
+                               }\r
+                       });\r
+               },\r
+\r
+               /**\r
+                * This method will store the current contents in the the storage engine.\r
+                *\r
+                * @method storeDraft\r
+                */\r
+               storeDraft : function() {\r
+                       var self = this, storage = self.storage, editor = self.editor, expires, content;\r
+\r
+                       // Is the contents dirty\r
+                       if (storage) {\r
+                               // If there is no existing key and the contents hasn't been changed since\r
+                               // it's original value then there is no point in saving a draft\r
+                               if (!storage.getItem(self.key) && !editor.isDirty())\r
+                                       return;\r
+\r
+                               // Store contents if the contents if longer than the minlength of characters\r
+                               content = editor.getContent({draft: true});\r
+                               if (content.length > editor.settings.autosave_minlength) {\r
+                                       expires = self.getExpDate();\r
+\r
+                                       // Store expiration date if needed IE userData has auto expire built in\r
+                                       if (!self.storage.autoExpires)\r
+                                               self.storage.setItem(self.key + "_expires", expires);\r
+\r
+                                       self.storage.setItem(self.key, content);\r
+                                       self.onStoreDraft.dispatch(self, {\r
+                                               expires : expires,\r
+                                               content : content\r
+                                       });\r
+                               }\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * This method will restore the contents from the storage engine back to the editor.\r
+                *\r
+                * @method restoreDraft\r
+                */\r
+               restoreDraft : function() {\r
+                       var self = this, storage = self.storage;\r
+\r
+                       if (storage) {\r
+                               content = storage.getItem(self.key);\r
+\r
+                               if (content) {\r
+                                       self.editor.setContent(content);\r
+                                       self.onRestoreDraft.dispatch(self, {\r
+                                               content : content\r
+                                       });\r
+                               }\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * This method will return true/false if there is a local storage draft available.\r
+                *\r
+                * @method hasDraft\r
+                * @return {boolean} true/false state if there is a local draft.\r
+                */\r
+               hasDraft : function() {\r
+                       var self = this, storage = self.storage, expDate, exists;\r
+\r
+                       if (storage) {\r
+                               // Does the item exist at all\r
+                               exists = !!storage.getItem(self.key);\r
+                               if (exists) {\r
+                                       // Storage needs autoexpire\r
+                                       if (!self.storage.autoExpires) {\r
+                                               expDate = new Date(storage.getItem(self.key + "_expires"));\r
+\r
+                                               // Contents hasn't expired\r
+                                               if (new Date().getTime() < expDate.getTime())\r
+                                                       return TRUE;\r
+\r
+                                               // Remove it if it has\r
+                                               self.removeDraft();\r
+                                       } else\r
+                                               return TRUE;\r
+                               }\r
+                       }\r
+\r
+                       return false;\r
+               },\r
+\r
+               /**\r
+                * Removes the currently stored draft.\r
+                *\r
+                * @method removeDraft\r
+                */\r
+               removeDraft : function() {\r
+                       var self = this, storage = self.storage, key = self.key, content;\r
+\r
+                       if (storage) {\r
+                               // Get current contents and remove the existing draft\r
+                               content = storage.getItem(key);\r
+                               storage.removeItem(key);\r
+                               storage.removeItem(key + "_expires");\r
+\r
+                               // Dispatch remove event if we had any contents\r
+                               if (content) {\r
+                                       self.onRemoveDraft.dispatch(self, {\r
+                                               content : content\r
+                                       });\r
+                               }\r
+                       }\r
+               },\r
+\r
+               "static" : {\r
+                       // Internal unload handler will be called before the page is unloaded\r
+                       _beforeUnloadHandler : function(e) {\r
+                               var msg;\r
+\r
+                               tinymce.each(tinyMCE.editors, function(ed) {\r
+                                       // Store a draft for each editor instance\r
+                                       if (ed.plugins.autosave)\r
+                                               ed.plugins.autosave.storeDraft();\r
+\r
+                                       // Never ask in fullscreen mode\r
+                                       if (ed.getParam("fullscreen_is_enabled"))\r
+                                               return;\r
+\r
+                                       // Setup a return message if the editor is dirty\r
+                                       if (!msg && ed.isDirty() && ed.getParam("autosave_ask_before_unload"))\r
+                                               msg = ed.getLang("autosave.unload_msg");\r
+                               });\r
+\r
+                               return msg;\r
+                       }\r
+               }\r
+       });\r
+\r
+       tinymce.PluginManager.add('autosave', tinymce.plugins.AutoSave);\r
+})(tinymce);\r
diff --git a/plugins/TinyMCE/js/plugins/autosave/langs/en.js b/plugins/TinyMCE/js/plugins/autosave/langs/en.js
new file mode 100644 (file)
index 0000000..fce6bd3
--- /dev/null
@@ -0,0 +1,4 @@
+tinyMCE.addI18n('en.autosave',{\r
+restore_content: "Restore auto-saved content",\r
+warning_message: "If you restore the saved content, you will lose all the content that is currently in the editor.\n\nAre you sure you want to restore the saved content?"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/bbcode/editor_plugin.js b/plugins/TinyMCE/js/plugins/bbcode/editor_plugin.js
new file mode 100644 (file)
index 0000000..930fdff
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.BBCodePlugin",{init:function(a,b){var d=this,c=a.getParam("bbcode_dialect","punbb").toLowerCase();a.onBeforeSetContent.add(function(e,f){f.content=d["_"+c+"_bbcode2html"](f.content)});a.onPostProcess.add(function(e,f){if(f.set){f.content=d["_"+c+"_bbcode2html"](f.content)}if(f.get){f.content=d["_"+c+"_html2bbcode"](f.content)}})},getInfo:function(){return{longname:"BBCode Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_punbb_html2bbcode:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");b(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");b(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");b(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");b(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");b(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");b(/<font>(.*?)<\/font>/gi,"$1");b(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");b(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");b(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");b(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");b(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");b(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");b(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");b(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");b(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");b(/<\/(strong|b)>/gi,"[/b]");b(/<(strong|b)>/gi,"[b]");b(/<\/(em|i)>/gi,"[/i]");b(/<(em|i)>/gi,"[i]");b(/<\/u>/gi,"[/u]");b(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");b(/<u>/gi,"[u]");b(/<blockquote[^>]*>/gi,"[quote]");b(/<\/blockquote>/gi,"[/quote]");b(/<br \/>/gi,"\n");b(/<br\/>/gi,"\n");b(/<br>/gi,"\n");b(/<p>/gi,"");b(/<\/p>/gi,"\n");b(/&nbsp;/gi," ");b(/&quot;/gi,'"');b(/&lt;/gi,"<");b(/&gt;/gi,">");b(/&amp;/gi,"&");return a},_punbb_bbcode2html:function(a){a=tinymce.trim(a);function b(c,d){a=a.replace(c,d)}b(/\n/gi,"<br />");b(/\[b\]/gi,"<strong>");b(/\[\/b\]/gi,"</strong>");b(/\[i\]/gi,"<em>");b(/\[\/i\]/gi,"</em>");b(/\[u\]/gi,"<u>");b(/\[\/u\]/gi,"</u>");b(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,'<a href="$1">$2</a>');b(/\[url\](.*?)\[\/url\]/gi,'<a href="$1">$1</a>');b(/\[img\](.*?)\[\/img\]/gi,'<img src="$1" />');b(/\[color=(.*?)\](.*?)\[\/color\]/gi,'<font color="$1">$2</font>');b(/\[code\](.*?)\[\/code\]/gi,'<span class="codeStyle">$1</span>&nbsp;');b(/\[quote.*?\](.*?)\[\/quote\]/gi,'<span class="quoteStyle">$1</span>&nbsp;');return a}});tinymce.PluginManager.add("bbcode",tinymce.plugins.BBCodePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/bbcode/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/bbcode/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..5586637
--- /dev/null
@@ -0,0 +1,120 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.BBCodePlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this, dialect = ed.getParam('bbcode_dialect', 'punbb').toLowerCase();\r
+\r
+                       ed.onBeforeSetContent.add(function(ed, o) {\r
+                               o.content = t['_' + dialect + '_bbcode2html'](o.content);\r
+                       });\r
+\r
+                       ed.onPostProcess.add(function(ed, o) {\r
+                               if (o.set)\r
+                                       o.content = t['_' + dialect + '_bbcode2html'](o.content);\r
+\r
+                               if (o.get)\r
+                                       o.content = t['_' + dialect + '_html2bbcode'](o.content);\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'BBCode Plugin',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/bbcode',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+\r
+               // HTML -> BBCode in PunBB dialect\r
+               _punbb_html2bbcode : function(s) {\r
+                       s = tinymce.trim(s);\r
+\r
+                       function rep(re, str) {\r
+                               s = s.replace(re, str);\r
+                       };\r
+\r
+                       // example: <strong> to [b]\r
+                       rep(/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/gi,"[url=$1]$2[/url]");\r
+                       rep(/<font.*?color=\"(.*?)\".*?class=\"codeStyle\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");\r
+                       rep(/<font.*?color=\"(.*?)\".*?class=\"quoteStyle\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");\r
+                       rep(/<font.*?class=\"codeStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[code][color=$1]$2[/color][/code]");\r
+                       rep(/<font.*?class=\"quoteStyle\".*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[quote][color=$1]$2[/color][/quote]");\r
+                       rep(/<span style=\"color: ?(.*?);\">(.*?)<\/span>/gi,"[color=$1]$2[/color]");\r
+                       rep(/<font.*?color=\"(.*?)\".*?>(.*?)<\/font>/gi,"[color=$1]$2[/color]");\r
+                       rep(/<span style=\"font-size:(.*?);\">(.*?)<\/span>/gi,"[size=$1]$2[/size]");\r
+                       rep(/<font>(.*?)<\/font>/gi,"$1");\r
+                       rep(/<img.*?src=\"(.*?)\".*?\/>/gi,"[img]$1[/img]");\r
+                       rep(/<span class=\"codeStyle\">(.*?)<\/span>/gi,"[code]$1[/code]");\r
+                       rep(/<span class=\"quoteStyle\">(.*?)<\/span>/gi,"[quote]$1[/quote]");\r
+                       rep(/<strong class=\"codeStyle\">(.*?)<\/strong>/gi,"[code][b]$1[/b][/code]");\r
+                       rep(/<strong class=\"quoteStyle\">(.*?)<\/strong>/gi,"[quote][b]$1[/b][/quote]");\r
+                       rep(/<em class=\"codeStyle\">(.*?)<\/em>/gi,"[code][i]$1[/i][/code]");\r
+                       rep(/<em class=\"quoteStyle\">(.*?)<\/em>/gi,"[quote][i]$1[/i][/quote]");\r
+                       rep(/<u class=\"codeStyle\">(.*?)<\/u>/gi,"[code][u]$1[/u][/code]");\r
+                       rep(/<u class=\"quoteStyle\">(.*?)<\/u>/gi,"[quote][u]$1[/u][/quote]");\r
+                       rep(/<\/(strong|b)>/gi,"[/b]");\r
+                       rep(/<(strong|b)>/gi,"[b]");\r
+                       rep(/<\/(em|i)>/gi,"[/i]");\r
+                       rep(/<(em|i)>/gi,"[i]");\r
+                       rep(/<\/u>/gi,"[/u]");\r
+                       rep(/<span style=\"text-decoration: ?underline;\">(.*?)<\/span>/gi,"[u]$1[/u]");\r
+                       rep(/<u>/gi,"[u]");\r
+                       rep(/<blockquote[^>]*>/gi,"[quote]");\r
+                       rep(/<\/blockquote>/gi,"[/quote]");\r
+                       rep(/<br \/>/gi,"\n");\r
+                       rep(/<br\/>/gi,"\n");\r
+                       rep(/<br>/gi,"\n");\r
+                       rep(/<p>/gi,"");\r
+                       rep(/<\/p>/gi,"\n");\r
+                       rep(/&nbsp;/gi," ");\r
+                       rep(/&quot;/gi,"\"");\r
+                       rep(/&lt;/gi,"<");\r
+                       rep(/&gt;/gi,">");\r
+                       rep(/&amp;/gi,"&");\r
+\r
+                       return s; \r
+               },\r
+\r
+               // BBCode -> HTML from PunBB dialect\r
+               _punbb_bbcode2html : function(s) {\r
+                       s = tinymce.trim(s);\r
+\r
+                       function rep(re, str) {\r
+                               s = s.replace(re, str);\r
+                       };\r
+\r
+                       // example: [b] to <strong>\r
+                       rep(/\n/gi,"<br />");\r
+                       rep(/\[b\]/gi,"<strong>");\r
+                       rep(/\[\/b\]/gi,"</strong>");\r
+                       rep(/\[i\]/gi,"<em>");\r
+                       rep(/\[\/i\]/gi,"</em>");\r
+                       rep(/\[u\]/gi,"<u>");\r
+                       rep(/\[\/u\]/gi,"</u>");\r
+                       rep(/\[url=([^\]]+)\](.*?)\[\/url\]/gi,"<a href=\"$1\">$2</a>");\r
+                       rep(/\[url\](.*?)\[\/url\]/gi,"<a href=\"$1\">$1</a>");\r
+                       rep(/\[img\](.*?)\[\/img\]/gi,"<img src=\"$1\" />");\r
+                       rep(/\[color=(.*?)\](.*?)\[\/color\]/gi,"<font color=\"$1\">$2</font>");\r
+                       rep(/\[code\](.*?)\[\/code\]/gi,"<span class=\"codeStyle\">$1</span>&nbsp;");\r
+                       rep(/\[quote.*?\](.*?)\[\/quote\]/gi,"<span class=\"quoteStyle\">$1</span>&nbsp;");\r
+\r
+                       return s; \r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('bbcode', tinymce.plugins.BBCodePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin.js b/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin.js
new file mode 100644 (file)
index 0000000..9749e51
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.dom.Event,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.ContextMenu",{init:function(d){var f=this,g;f.editor=d;f.onContextMenu=new tinymce.util.Dispatcher(this);d.onContextMenu.add(function(h,i){if(!i.ctrlKey){if(g){h.selection.setRng(g)}f._getMenu(h).showMenu(i.clientX,i.clientY);a.add(h.getDoc(),"click",function(j){e(h,j)});a.cancel(i)}});d.onRemove.add(function(){if(f._menu){f._menu.removeAll()}});function e(h,i){g=null;if(i&&i.button==2){g=h.selection.getRng();return}if(f._menu){f._menu.removeAll();f._menu.destroy();a.remove(h.getDoc(),"click",e)}}d.onMouseDown.add(e);d.onKeyDown.add(e)},getInfo:function(){return{longname:"Contextmenu",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getMenu:function(h){var l=this,f=l._menu,i=h.selection,e=i.isCollapsed(),d=i.getNode()||h.getBody(),g,k,j;if(f){f.removeAll();f.destroy()}k=b.getPos(h.getContentAreaContainer());j=b.getPos(h.getContainer());f=h.controlManager.createDropMenu("contextmenu",{offset_x:k.x+h.getParam("contextmenu_offset_x",0),offset_y:k.y+h.getParam("contextmenu_offset_y",0),constrain:1});l._menu=f;f.add({title:"advanced.cut_desc",icon:"cut",cmd:"Cut"}).setDisabled(e);f.add({title:"advanced.copy_desc",icon:"copy",cmd:"Copy"}).setDisabled(e);f.add({title:"advanced.paste_desc",icon:"paste",cmd:"Paste"});if((d.nodeName=="A"&&!h.dom.getAttrib(d,"name"))||!e){f.addSeparator();f.add({title:"advanced.link_desc",icon:"link",cmd:h.plugins.advlink?"mceAdvLink":"mceLink",ui:true});f.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"})}f.addSeparator();f.add({title:"advanced.image_desc",icon:"image",cmd:h.plugins.advimage?"mceAdvImage":"mceImage",ui:true});f.addSeparator();g=f.addMenu({title:"contextmenu.align"});g.add({title:"contextmenu.left",icon:"justifyleft",cmd:"JustifyLeft"});g.add({title:"contextmenu.center",icon:"justifycenter",cmd:"JustifyCenter"});g.add({title:"contextmenu.right",icon:"justifyright",cmd:"JustifyRight"});g.add({title:"contextmenu.full",icon:"justifyfull",cmd:"JustifyFull"});l.onContextMenu.dispatch(l,f,d,e);return f}});tinymce.PluginManager.add("contextmenu",tinymce.plugins.ContextMenu)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/contextmenu/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..13813a6
--- /dev/null
@@ -0,0 +1,147 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var Event = tinymce.dom.Event, each = tinymce.each, DOM = tinymce.DOM;\r
+\r
+       /**\r
+        * This plugin a context menu to TinyMCE editor instances.\r
+        *\r
+        * @class tinymce.plugins.ContextMenu\r
+        */\r
+       tinymce.create('tinymce.plugins.ContextMenu', {\r
+               /**\r
+                * Initializes the plugin, this will be executed after the plugin has been created.\r
+                * This call is done before the editor instance has finished it's initialization so use the onInit event\r
+                * of the editor instance to intercept that event.\r
+                *\r
+                * @method init\r
+                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
+                * @param {string} url Absolute URL to where the plugin is located.\r
+                */\r
+               init : function(ed) {\r
+                       var t = this, lastRng;\r
+\r
+                       t.editor = ed;\r
+\r
+                       /**\r
+                        * This event gets fired when the context menu is shown.\r
+                        *\r
+                        * @event onContextMenu\r
+                        * @param {tinymce.plugins.ContextMenu} sender Plugin instance sending the event.\r
+                        * @param {tinymce.ui.DropMenu} menu Drop down menu to fill with more items if needed.\r
+                        */\r
+                       t.onContextMenu = new tinymce.util.Dispatcher(this);\r
+\r
+                       ed.onContextMenu.add(function(ed, e) {\r
+                               if (!e.ctrlKey) {\r
+                                       // Restore the last selection since it was removed\r
+                                       if (lastRng)\r
+                                               ed.selection.setRng(lastRng);\r
+\r
+                                       t._getMenu(ed).showMenu(e.clientX, e.clientY);\r
+                                       Event.add(ed.getDoc(), 'click', function(e) {\r
+                                               hide(ed, e);\r
+                                       });\r
+                                       Event.cancel(e);\r
+                               }\r
+                       });\r
+\r
+                       ed.onRemove.add(function() {\r
+                               if (t._menu)\r
+                                       t._menu.removeAll();\r
+                       });\r
+\r
+                       function hide(ed, e) {\r
+                               lastRng = null;\r
+\r
+                               // Since the contextmenu event moves\r
+                               // the selection we need to store it away\r
+                               if (e && e.button == 2) {\r
+                                       lastRng = ed.selection.getRng();\r
+                                       return;\r
+                               }\r
+\r
+                               if (t._menu) {\r
+                                       t._menu.removeAll();\r
+                                       t._menu.destroy();\r
+                                       Event.remove(ed.getDoc(), 'click', hide);\r
+                               }\r
+                       };\r
+\r
+                       ed.onMouseDown.add(hide);\r
+                       ed.onKeyDown.add(hide);\r
+               },\r
+\r
+               /**\r
+                * Returns information about the plugin as a name/value array.\r
+                * The current keys are longname, author, authorurl, infourl and version.\r
+                *\r
+                * @method getInfo\r
+                * @return {Object} Name/value array containing information about the plugin.\r
+                */\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Contextmenu',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/contextmenu',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               _getMenu : function(ed) {\r
+                       var t = this, m = t._menu, se = ed.selection, col = se.isCollapsed(), el = se.getNode() || ed.getBody(), am, p1, p2;\r
+\r
+                       if (m) {\r
+                               m.removeAll();\r
+                               m.destroy();\r
+                       }\r
+\r
+                       p1 = DOM.getPos(ed.getContentAreaContainer());\r
+                       p2 = DOM.getPos(ed.getContainer());\r
+\r
+                       m = ed.controlManager.createDropMenu('contextmenu', {\r
+                               offset_x : p1.x + ed.getParam('contextmenu_offset_x', 0),\r
+                               offset_y : p1.y + ed.getParam('contextmenu_offset_y', 0),\r
+                               constrain : 1\r
+                       });\r
+\r
+                       t._menu = m;\r
+\r
+                       m.add({title : 'advanced.cut_desc', icon : 'cut', cmd : 'Cut'}).setDisabled(col);\r
+                       m.add({title : 'advanced.copy_desc', icon : 'copy', cmd : 'Copy'}).setDisabled(col);\r
+                       m.add({title : 'advanced.paste_desc', icon : 'paste', cmd : 'Paste'});\r
+\r
+                       if ((el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) || !col) {\r
+                               m.addSeparator();\r
+                               m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
+                               m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
+                       }\r
+\r
+                       m.addSeparator();\r
+                       m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
+\r
+                       m.addSeparator();\r
+                       am = m.addMenu({title : 'contextmenu.align'});\r
+                       am.add({title : 'contextmenu.left', icon : 'justifyleft', cmd : 'JustifyLeft'});\r
+                       am.add({title : 'contextmenu.center', icon : 'justifycenter', cmd : 'JustifyCenter'});\r
+                       am.add({title : 'contextmenu.right', icon : 'justifyright', cmd : 'JustifyRight'});\r
+                       am.add({title : 'contextmenu.full', icon : 'justifyfull', cmd : 'JustifyFull'});\r
+\r
+                       t.onContextMenu.dispatch(t, m, el, col);\r
+\r
+                       return m;\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('contextmenu', tinymce.plugins.ContextMenu);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/directionality/editor_plugin.js b/plugins/TinyMCE/js/plugins/directionality/editor_plugin.js
new file mode 100644 (file)
index 0000000..bce8e73
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.Directionality",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceDirectionLTR",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="ltr"){a.dom.setAttrib(d,"dir","ltr")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addCommand("mceDirectionRTL",function(){var d=a.dom.getParent(a.selection.getNode(),a.dom.isBlock);if(d){if(a.dom.getAttrib(d,"dir")!="rtl"){a.dom.setAttrib(d,"dir","rtl")}else{a.dom.setAttrib(d,"dir","")}}a.nodeChanged()});a.addButton("ltr",{title:"directionality.ltr_desc",cmd:"mceDirectionLTR"});a.addButton("rtl",{title:"directionality.rtl_desc",cmd:"mceDirectionRTL"});a.onNodeChange.add(c._nodeChange,c)},getInfo:function(){return{longname:"Directionality",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var d=b.dom,c;e=d.getParent(e,d.isBlock);if(!e){a.setDisabled("ltr",1);a.setDisabled("rtl",1);return}c=d.getAttrib(e,"dir");a.setActive("ltr",c=="ltr");a.setDisabled("ltr",0);a.setActive("rtl",c=="rtl");a.setDisabled("rtl",0)}});tinymce.PluginManager.add("directionality",tinymce.plugins.Directionality)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/directionality/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/directionality/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..4444959
--- /dev/null
@@ -0,0 +1,82 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.Directionality', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       ed.addCommand('mceDirectionLTR', function() {\r
+                               var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);\r
+\r
+                               if (e) {\r
+                                       if (ed.dom.getAttrib(e, "dir") != "ltr")\r
+                                               ed.dom.setAttrib(e, "dir", "ltr");\r
+                                       else\r
+                                               ed.dom.setAttrib(e, "dir", "");\r
+                               }\r
+\r
+                               ed.nodeChanged();\r
+                       });\r
+\r
+                       ed.addCommand('mceDirectionRTL', function() {\r
+                               var e = ed.dom.getParent(ed.selection.getNode(), ed.dom.isBlock);\r
+\r
+                               if (e) {\r
+                                       if (ed.dom.getAttrib(e, "dir") != "rtl")\r
+                                               ed.dom.setAttrib(e, "dir", "rtl");\r
+                                       else\r
+                                               ed.dom.setAttrib(e, "dir", "");\r
+                               }\r
+\r
+                               ed.nodeChanged();\r
+                       });\r
+\r
+                       ed.addButton('ltr', {title : 'directionality.ltr_desc', cmd : 'mceDirectionLTR'});\r
+                       ed.addButton('rtl', {title : 'directionality.rtl_desc', cmd : 'mceDirectionRTL'});\r
+\r
+                       ed.onNodeChange.add(t._nodeChange, t);\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Directionality',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _nodeChange : function(ed, cm, n) {\r
+                       var dom = ed.dom, dir;\r
+\r
+                       n = dom.getParent(n, dom.isBlock);\r
+                       if (!n) {\r
+                               cm.setDisabled('ltr', 1);\r
+                               cm.setDisabled('rtl', 1);\r
+                               return;\r
+                       }\r
+\r
+                       dir = dom.getAttrib(n, 'dir');\r
+                       cm.setActive('ltr', dir == "ltr");\r
+                       cm.setDisabled('ltr', 0);\r
+                       cm.setActive('rtl', dir == "rtl");\r
+                       cm.setDisabled('rtl', 0);\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('directionality', tinymce.plugins.Directionality);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/emotions/editor_plugin.js b/plugins/TinyMCE/js/plugins/emotions/editor_plugin.js
new file mode 100644 (file)
index 0000000..dbdd8ff
--- /dev/null
@@ -0,0 +1 @@
+(function(a){a.create("tinymce.plugins.EmotionsPlugin",{init:function(b,c){b.addCommand("mceEmotion",function(){b.windowManager.open({file:c+"/emotions.htm",width:250+parseInt(b.getLang("emotions.delta_width",0)),height:160+parseInt(b.getLang("emotions.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("emotions",{title:"emotions.emotions_desc",cmd:"mceEmotion"})},getInfo:function(){return{longname:"Emotions",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("emotions",a.plugins.EmotionsPlugin)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/emotions/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/emotions/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..71d5416
--- /dev/null
@@ -0,0 +1,43 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function(tinymce) {\r
+       tinymce.create('tinymce.plugins.EmotionsPlugin', {\r
+               init : function(ed, url) {\r
+                       // Register commands\r
+                       ed.addCommand('mceEmotion', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/emotions.htm',\r
+                                       width : 250 + parseInt(ed.getLang('emotions.delta_width', 0)),\r
+                                       height : 160 + parseInt(ed.getLang('emotions.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('emotions', {title : 'emotions.emotions_desc', cmd : 'mceEmotion'});\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Emotions',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/emotions',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('emotions', tinymce.plugins.EmotionsPlugin);\r
+})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/emotions/emotions.htm b/plugins/TinyMCE/js/plugins/emotions/emotions.htm
new file mode 100644 (file)
index 0000000..55a1d72
--- /dev/null
@@ -0,0 +1,40 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#emotions_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/emotions.js"></script>\r
+</head>\r
+<body style="display: none">\r
+       <div align="center">\r
+               <div class="title">{#emotions_dlg.title}:<br /><br /></div>\r
+\r
+               <table border="0" cellspacing="0" cellpadding="4">\r
+                 <tr>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-cool.gif','emotions_dlg.cool');"><img src="img/smiley-cool.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cool}" title="{#emotions_dlg.cool}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-cry.gif','emotions_dlg.cry');"><img src="img/smiley-cry.gif" width="18" height="18" border="0" alt="{#emotions_dlg.cry}" title="{#emotions_dlg.cry}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-embarassed.gif','emotions_dlg.embarassed');"><img src="img/smiley-embarassed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.embarassed}" title="{#emotions_dlg.embarassed}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-foot-in-mouth.gif','emotions_dlg.foot_in_mouth');"><img src="img/smiley-foot-in-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.foot_in_mouth}" title="{#emotions_dlg.foot_in_mouth}" /></a></td>\r
+                 </tr>\r
+                 <tr>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-frown.gif','emotions_dlg.frown');"><img src="img/smiley-frown.gif" width="18" height="18" border="0" alt="{#emotions_dlg.frown}" title="{#emotions_dlg.frown}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-innocent.gif','emotions_dlg.innocent');"><img src="img/smiley-innocent.gif" width="18" height="18" border="0" alt="{#emotions_dlg.innocent}" title="{#emotions_dlg.innocent}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-kiss.gif','emotions_dlg.kiss');"><img src="img/smiley-kiss.gif" width="18" height="18" border="0" alt="{#emotions_dlg.kiss}" title="{#emotions_dlg.kiss}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-laughing.gif','emotions_dlg.laughing');"><img src="img/smiley-laughing.gif" width="18" height="18" border="0" alt="{#emotions_dlg.laughing}" title="{#emotions_dlg.laughing}" /></a></td>\r
+                 </tr>\r
+                 <tr>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-money-mouth.gif','emotions_dlg.money_mouth');"><img src="img/smiley-money-mouth.gif" width="18" height="18" border="0" alt="{#emotions_dlg.money_mouth}" title="{#emotions_dlg.money_mouth}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-sealed.gif','emotions_dlg.sealed');"><img src="img/smiley-sealed.gif" width="18" height="18" border="0" alt="{#emotions_dlg.sealed}" title="{#emotions_dlg.sealed}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-smile.gif','emotions_dlg.smile');"><img src="img/smiley-smile.gif" width="18" height="18" border="0" alt="{#emotions_dlg.smile}" title="{#emotions_dlg.smile}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-surprised.gif','emotions_dlg.surprised');"><img src="img/smiley-surprised.gif" width="18" height="18" border="0" alt="{#emotions_dlg.surprised}" title="{#emotions_dlg.surprised}" /></a></td>\r
+                 </tr>\r
+                 <tr>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-tongue-out.gif','emotions_dlg.tongue_out');"><img src="img/smiley-tongue-out.gif" width="18" height="18" border="0" alt="{#emotions_dlg.tongue-out}" title="{#emotions_dlg.tongue_out}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-undecided.gif','emotions_dlg.undecided');"><img src="img/smiley-undecided.gif" width="18" height="18" border="0" alt="{#emotions_dlg.undecided}" title="{#emotions_dlg.undecided}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-wink.gif','emotions_dlg.wink');"><img src="img/smiley-wink.gif" width="18" height="18" border="0" alt="{#emotions_dlg.wink}" title="{#emotions_dlg.wink}" /></a></td>\r
+                       <td><a href="javascript:EmotionsDialog.insert('smiley-yell.gif','emotions_dlg.yell');"><img src="img/smiley-yell.gif" width="18" height="18" border="0" alt="{#emotions_dlg.yell}" title="{#emotions_dlg.yell}" /></a></td>\r
+                 </tr>\r
+               </table>\r
+       </div>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif
new file mode 100644 (file)
index 0000000..ba90cc3
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-cool.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif
new file mode 100644 (file)
index 0000000..74d897a
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-cry.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif
new file mode 100644 (file)
index 0000000..963a96b
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-embarassed.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif
new file mode 100644 (file)
index 0000000..16f68cc
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-foot-in-mouth.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif
new file mode 100644 (file)
index 0000000..716f55e
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-frown.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif
new file mode 100644 (file)
index 0000000..334d49e
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-innocent.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif
new file mode 100644 (file)
index 0000000..4efd549
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-kiss.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif
new file mode 100644 (file)
index 0000000..1606c11
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-laughing.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif
new file mode 100644 (file)
index 0000000..ca2451e
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-money-mouth.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif
new file mode 100644 (file)
index 0000000..b33d3cc
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-sealed.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif
new file mode 100644 (file)
index 0000000..e6a9e60
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-smile.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif
new file mode 100644 (file)
index 0000000..cb99cdd
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-surprised.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif
new file mode 100644 (file)
index 0000000..2075dc1
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-tongue-out.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif
new file mode 100644 (file)
index 0000000..bef7e25
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-undecided.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif
new file mode 100644 (file)
index 0000000..9faf1af
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-wink.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif b/plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif
new file mode 100644 (file)
index 0000000..648e6e8
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/emotions/img/smiley-yell.gif differ
diff --git a/plugins/TinyMCE/js/plugins/emotions/js/emotions.js b/plugins/TinyMCE/js/plugins/emotions/js/emotions.js
new file mode 100644 (file)
index 0000000..c549367
--- /dev/null
@@ -0,0 +1,22 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var EmotionsDialog = {\r
+       init : function(ed) {\r
+               tinyMCEPopup.resizeToInnerSize();\r
+       },\r
+\r
+       insert : function(file, title) {\r
+               var ed = tinyMCEPopup.editor, dom = ed.dom;\r
+\r
+               tinyMCEPopup.execCommand('mceInsertContent', false, dom.createHTML('img', {\r
+                       src : tinyMCEPopup.getWindowArg('plugin_url') + '/img/' + file,\r
+                       alt : ed.getLang(title),\r
+                       title : ed.getLang(title),\r
+                       border : 0\r
+               }));\r
+\r
+               tinyMCEPopup.close();\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(EmotionsDialog.init, EmotionsDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/emotions/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/emotions/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..3b57ad9
--- /dev/null
@@ -0,0 +1,20 @@
+tinyMCE.addI18n('en.emotions_dlg',{\r
+title:"Insert emotion",\r
+desc:"Emotions",\r
+cool:"Cool",\r
+cry:"Cry",\r
+embarassed:"Embarassed",\r
+foot_in_mouth:"Foot in mouth",\r
+frown:"Frown",\r
+innocent:"Innocent",\r
+kiss:"Kiss",\r
+laughing:"Laughing",\r
+money_mouth:"Money mouth",\r
+sealed:"Sealed",\r
+smile:"Smile",\r
+surprised:"Surprised",\r
+tongue_out:"Tongue out",\r
+undecided:"Undecided",\r
+wink:"Wink",\r
+yell:"Yell"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example/dialog.htm b/plugins/TinyMCE/js/plugins/example/dialog.htm
new file mode 100644 (file)
index 0000000..50b2b34
--- /dev/null
@@ -0,0 +1,22 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#example_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/dialog.js"></script>\r
+</head>\r
+<body>\r
+\r
+<form onsubmit="ExampleDialog.insert();return false;" action="#">\r
+       <p>Here is a example dialog.</p>\r
+       <p>Selected text: <input id="someval" name="someval" type="text" class="text" /></p>\r
+       <p>Custom arg: <input id="somearg" name="somearg" type="text" class="text" /></p>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="button" id="insert" name="insert" value="{#insert}" onclick="ExampleDialog.insert();" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/example/editor_plugin.js b/plugins/TinyMCE/js/plugins/example/editor_plugin.js
new file mode 100644 (file)
index 0000000..ec1f81e
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.PluginManager.requireLangPack("example");tinymce.create("tinymce.plugins.ExamplePlugin",{init:function(a,b){a.addCommand("mceExample",function(){a.windowManager.open({file:b+"/dialog.htm",width:320+parseInt(a.getLang("example.delta_width",0)),height:120+parseInt(a.getLang("example.delta_height",0)),inline:1},{plugin_url:b,some_custom_arg:"custom arg"})});a.addButton("example",{title:"example.desc",cmd:"mceExample",image:b+"/img/example.gif"});a.onNodeChange.add(function(d,c,e){c.setActive("example",e.nodeName=="IMG")})},createControl:function(b,a){return null},getInfo:function(){return{longname:"Example plugin",author:"Some author",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example",version:"1.0"}}});tinymce.PluginManager.add("example",tinymce.plugins.ExamplePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/example/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..9a0e7da
--- /dev/null
@@ -0,0 +1,84 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       // Load plugin specific language pack\r
+       tinymce.PluginManager.requireLangPack('example');\r
+\r
+       tinymce.create('tinymce.plugins.ExamplePlugin', {\r
+               /**\r
+                * Initializes the plugin, this will be executed after the plugin has been created.\r
+                * This call is done before the editor instance has finished it's initialization so use the onInit event\r
+                * of the editor instance to intercept that event.\r
+                *\r
+                * @param {tinymce.Editor} ed Editor instance that the plugin is initialized in.\r
+                * @param {string} url Absolute URL to where the plugin is located.\r
+                */\r
+               init : function(ed, url) {\r
+                       // Register the command so that it can be invoked by using tinyMCE.activeEditor.execCommand('mceExample');\r
+                       ed.addCommand('mceExample', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/dialog.htm',\r
+                                       width : 320 + parseInt(ed.getLang('example.delta_width', 0)),\r
+                                       height : 120 + parseInt(ed.getLang('example.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url, // Plugin absolute URL\r
+                                       some_custom_arg : 'custom arg' // Custom argument\r
+                               });\r
+                       });\r
+\r
+                       // Register example button\r
+                       ed.addButton('example', {\r
+                               title : 'example.desc',\r
+                               cmd : 'mceExample',\r
+                               image : url + '/img/example.gif'\r
+                       });\r
+\r
+                       // Add a node change handler, selects the button in the UI when a image is selected\r
+                       ed.onNodeChange.add(function(ed, cm, n) {\r
+                               cm.setActive('example', n.nodeName == 'IMG');\r
+                       });\r
+               },\r
+\r
+               /**\r
+                * Creates control instances based in the incomming name. This method is normally not\r
+                * needed since the addButton method of the tinymce.Editor class is a more easy way of adding buttons\r
+                * but you sometimes need to create more complex controls like listboxes, split buttons etc then this\r
+                * method can be used to create those.\r
+                *\r
+                * @param {String} n Name of the control to create.\r
+                * @param {tinymce.ControlManager} cm Control manager to use inorder to create new control.\r
+                * @return {tinymce.ui.Control} New control instance or null if no control was created.\r
+                */\r
+               createControl : function(n, cm) {\r
+                       return null;\r
+               },\r
+\r
+               /**\r
+                * Returns information about the plugin as a name/value array.\r
+                * The current keys are longname, author, authorurl, infourl and version.\r
+                *\r
+                * @return {Object} Name/value array containing information about the plugin.\r
+                */\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Example plugin',\r
+                               author : 'Some author',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/example',\r
+                               version : "1.0"\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('example', tinymce.plugins.ExamplePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/example/img/example.gif b/plugins/TinyMCE/js/plugins/example/img/example.gif
new file mode 100644 (file)
index 0000000..1ab5da4
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/example/img/example.gif differ
diff --git a/plugins/TinyMCE/js/plugins/example/js/dialog.js b/plugins/TinyMCE/js/plugins/example/js/dialog.js
new file mode 100644 (file)
index 0000000..fa83411
--- /dev/null
@@ -0,0 +1,19 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var ExampleDialog = {\r
+       init : function() {\r
+               var f = document.forms[0];\r
+\r
+               // Get the selected contents as text and place it in the input\r
+               f.someval.value = tinyMCEPopup.editor.selection.getContent({format : 'text'});\r
+               f.somearg.value = tinyMCEPopup.getWindowArg('some_custom_arg');\r
+       },\r
+\r
+       insert : function() {\r
+               // Insert the contents from the input into the document\r
+               tinyMCEPopup.editor.execCommand('mceInsertContent', false, document.forms[0].someval.value);\r
+               tinyMCEPopup.close();\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(ExampleDialog.init, ExampleDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/example/langs/en.js b/plugins/TinyMCE/js/plugins/example/langs/en.js
new file mode 100644 (file)
index 0000000..e0784f8
--- /dev/null
@@ -0,0 +1,3 @@
+tinyMCE.addI18n('en.example',{\r
+       desc : 'This is just a template button'\r
+});\r
diff --git a/plugins/TinyMCE/js/plugins/example/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/example/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..ebcf948
--- /dev/null
@@ -0,0 +1,3 @@
+tinyMCE.addI18n('en.example_dlg',{\r
+       title : 'This is just a example title'\r
+});\r
diff --git a/plugins/TinyMCE/js/plugins/fullpage/css/fullpage.css b/plugins/TinyMCE/js/plugins/fullpage/css/fullpage.css
new file mode 100644 (file)
index 0000000..7a3334f
--- /dev/null
@@ -0,0 +1,182 @@
+/* Hide the advanced tab */\r
+#advanced_tab {\r
+       display: none;\r
+}\r
+\r
+#metatitle, #metakeywords, #metadescription, #metaauthor, #metacopyright {\r
+       width: 280px;\r
+}\r
+\r
+#doctype, #docencoding {\r
+       width: 200px;\r
+}\r
+\r
+#langcode {\r
+       width: 30px;\r
+}\r
+\r
+#bgimage {\r
+       width: 220px;   \r
+}\r
+\r
+#fontface {\r
+       width: 240px;\r
+}\r
+\r
+#leftmargin, #rightmargin, #topmargin, #bottommargin {\r
+       width: 50px;\r
+}\r
+\r
+.panel_wrapper div.current {\r
+       height: 400px;\r
+}\r
+\r
+#stylesheet, #style {\r
+       width: 240px;\r
+}\r
+\r
+/* Head list classes */\r
+\r
+.headlistwrapper {\r
+       width: 100%;\r
+}\r
+\r
+.addbutton, .removebutton, .moveupbutton, .movedownbutton {\r
+       border-top: 1px solid;\r
+       border-left: 1px solid;\r
+       border-bottom: 1px solid;\r
+       border-right: 1px solid;\r
+       border-color: #F0F0EE;\r
+       cursor: default;\r
+       display: block;\r
+       width: 20px;\r
+       height: 20px;\r
+}\r
+\r
+#doctypes {\r
+       width: 200px;\r
+}\r
+\r
+.addbutton:hover, .removebutton:hover, .moveupbutton:hover, .movedownbutton:hover {\r
+       border: 1px solid #0A246A;\r
+       background-color: #B6BDD2;\r
+}\r
+\r
+.addbutton {\r
+       background-image: url('../images/add.gif');\r
+       float: left;\r
+       margin-right: 3px;\r
+}\r
+\r
+.removebutton {\r
+       background-image: url('../images/remove.gif');\r
+       float: left;\r
+}\r
+\r
+.moveupbutton {\r
+       background-image: url('../images/move_up.gif');\r
+       float: left;\r
+       margin-right: 3px;\r
+}\r
+\r
+.movedownbutton {\r
+       background-image: url('../images/move_down.gif');\r
+       float: left;\r
+}\r
+\r
+.selected {\r
+       border: 1px solid #0A246A;\r
+       background-color: #B6BDD2;\r
+}\r
+\r
+.toolbar {\r
+       width: 100%;\r
+}\r
+\r
+#headlist {\r
+       width: 100%;\r
+       margin-top: 3px;\r
+       font-size: 11px;\r
+}\r
+\r
+#info, #title_element, #meta_element, #script_element, #style_element, #base_element, #link_element, #comment_element, #unknown_element {\r
+       display: none;\r
+}\r
+\r
+#addmenu {\r
+       position: absolute;\r
+       border: 1px solid gray;\r
+       display: none;\r
+       z-index: 100;\r
+       background-color: white;\r
+}\r
+\r
+#addmenu a {\r
+       display: block;\r
+       width: 100%;\r
+       line-height: 20px;\r
+       text-decoration: none;\r
+       background-color: white;\r
+}\r
+\r
+#addmenu a:hover {\r
+       background-color: #B6BDD2;\r
+       color: black;\r
+}\r
+\r
+#addmenu span {\r
+       padding-left: 10px;\r
+       padding-right: 10px;\r
+}\r
+\r
+#updateElementPanel {\r
+       display: none;\r
+}\r
+\r
+#script_element .panel_wrapper div.current {\r
+       height: 108px;\r
+}\r
+\r
+#style_element .panel_wrapper div.current {\r
+       height: 108px;\r
+}\r
+\r
+#link_element  .panel_wrapper div.current {\r
+       height: 140px;\r
+}\r
+\r
+#element_script_value {\r
+       width: 100%;\r
+       height: 100px;\r
+}\r
+\r
+#element_comment_value {\r
+       width: 100%;\r
+       height: 120px;\r
+}\r
+\r
+#element_style_value {\r
+       width: 100%;\r
+       height: 100px;\r
+}\r
+\r
+#element_title, #element_script_src, #element_meta_name, #element_meta_content, #element_base_href, #element_link_href, #element_link_title {\r
+       width: 250px;\r
+}\r
+\r
+.updateElementButton {\r
+       margin-top: 3px;\r
+}\r
+\r
+/* MSIE specific styles */\r
+\r
+* html .addbutton, * html .removebutton, * html .moveupbutton, * html .movedownbutton {\r
+       width: 22px;\r
+       height: 22px;\r
+}\r
+\r
+textarea {\r
+       height: 55px;\r
+}\r
+\r
+.panel_wrapper div.current {height:420px;}
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullpage/editor_plugin.js b/plugins/TinyMCE/js/plugins/fullpage/editor_plugin.js
new file mode 100644 (file)
index 0000000..aeaa669
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.FullPagePlugin",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceFullPageProperties",function(){a.windowManager.open({file:b+"/fullpage.htm",width:430+parseInt(a.getLang("fullpage.delta_width",0)),height:495+parseInt(a.getLang("fullpage.delta_height",0)),inline:1},{plugin_url:b,head_html:c.head})});a.addButton("fullpage",{title:"fullpage.desc",cmd:"mceFullPageProperties"});a.onBeforeSetContent.add(c._setContent,c);a.onSetContent.add(c._setBodyAttribs,c);a.onGetContent.add(c._getContent,c)},getInfo:function(){return{longname:"Fullpage",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_setBodyAttribs:function(d,a){var l,c,e,g,b,h,j,f=this.head.match(/body(.*?)>/i);if(f&&f[1]){l=f[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);if(l){for(c=0,e=l.length;c<e;c++){g=l[c].split("=");b=g[0].replace(/\s/,"");h=g[1];if(h){h=h.replace(/^\s+/,"").replace(/\s+$/,"");j=h.match(/^["'](.*)["']$/);if(j){h=j[1]}}else{h=b}d.dom.setAttrib(d.getBody(),"style",h)}}}},_createSerializer:function(){return new tinymce.dom.Serializer({dom:this.editor.dom,apply_source_formatting:true})},_setContent:function(d,b){var h=this,a,j,f=b.content,g,i="";if(b.format=="raw"&&h.head){return}if(b.source_view&&d.getParam("fullpage_hide_in_source_view")){return}f=f.replace(/<(\/?)BODY/gi,"<$1body");a=f.indexOf("<body");if(a!=-1){a=f.indexOf(">",a);h.head=f.substring(0,a+1);j=f.indexOf("</body",a);if(j==-1){j=f.indexOf("</body",j)}b.content=f.substring(a+1,j);h.foot=f.substring(j);function e(c){return c.replace(/<\/?[A-Z]+/g,function(k){return k.toLowerCase()})}h.head=e(h.head);h.foot=e(h.foot)}else{h.head="";if(d.getParam("fullpage_default_xml_pi")){h.head+='<?xml version="1.0" encoding="'+d.getParam("fullpage_default_encoding","ISO-8859-1")+'" ?>\n'}h.head+=d.getParam("fullpage_default_doctype",'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');h.head+="\n<html>\n<head>\n<title>"+d.getParam("fullpage_default_title","Untitled document")+"</title>\n";if(g=d.getParam("fullpage_default_encoding")){h.head+='<meta http-equiv="Content-Type" content="'+g+'" />\n'}if(g=d.getParam("fullpage_default_font_family")){i+="font-family: "+g+";"}if(g=d.getParam("fullpage_default_font_size")){i+="font-size: "+g+";"}if(g=d.getParam("fullpage_default_text_color")){i+="color: "+g+";"}h.head+="</head>\n<body"+(i?' style="'+i+'"':"")+">\n";h.foot="\n</body>\n</html>"}},_getContent:function(a,c){var b=this;if(!c.source_view||!a.getParam("fullpage_hide_in_source_view")){c.content=tinymce.trim(b.head)+"\n"+tinymce.trim(c.content)+"\n"+tinymce.trim(b.foot)}}});tinymce.PluginManager.add("fullpage",tinymce.plugins.FullPagePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullpage/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/fullpage/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..a2c9df8
--- /dev/null
@@ -0,0 +1,153 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.FullPagePlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceFullPageProperties', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/fullpage.htm',\r
+                                       width : 430 + parseInt(ed.getLang('fullpage.delta_width', 0)),\r
+                                       height : 495 + parseInt(ed.getLang('fullpage.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url,\r
+                                       head_html : t.head\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('fullpage', {title : 'fullpage.desc', cmd : 'mceFullPageProperties'});\r
+\r
+                       ed.onBeforeSetContent.add(t._setContent, t);\r
+                       ed.onSetContent.add(t._setBodyAttribs, t);\r
+                       ed.onGetContent.add(t._getContent, t);\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Fullpage',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullpage',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private plugin internal methods\r
+\r
+               _setBodyAttribs : function(ed, o) {\r
+                       var bdattr, i, len, kv, k, v, t, attr = this.head.match(/body(.*?)>/i);\r
+\r
+                       if (attr && attr[1]) {\r
+                               bdattr = attr[1].match(/\s*(\w+\s*=\s*".*?"|\w+\s*=\s*'.*?'|\w+\s*=\s*\w+|\w+)\s*/g);\r
+\r
+                               if (bdattr) {\r
+                                       for(i = 0, len = bdattr.length; i < len; i++) {\r
+                                               kv = bdattr[i].split('=');\r
+                                               k = kv[0].replace(/\s/,'');\r
+                                               v = kv[1];\r
+\r
+                                               if (v) {\r
+                                                       v = v.replace(/^\s+/,'').replace(/\s+$/,'');\r
+                                                       t = v.match(/^["'](.*)["']$/);\r
+\r
+                                                       if (t)\r
+                                                               v = t[1];\r
+                                               } else\r
+                                                       v = k;\r
+\r
+                                               ed.dom.setAttrib(ed.getBody(), 'style', v);\r
+                                       }\r
+                               }\r
+                       }\r
+               },\r
+\r
+               _createSerializer : function() {\r
+                       return new tinymce.dom.Serializer({\r
+                               dom : this.editor.dom,\r
+                               apply_source_formatting : true\r
+                       });\r
+               },\r
+\r
+               _setContent : function(ed, o) {\r
+                       var t = this, sp, ep, c = o.content, v, st = '';\r
+\r
+                       // Ignore raw updated if we already have a head, this will fix issues with undo/redo keeping the head/foot separate\r
+                       if (o.format == 'raw' && t.head)\r
+                               return;\r
+\r
+                       if (o.source_view && ed.getParam('fullpage_hide_in_source_view'))\r
+                               return;\r
+\r
+                       // Parse out head, body and footer\r
+                       c = c.replace(/<(\/?)BODY/gi, '<$1body');\r
+                       sp = c.indexOf('<body');\r
+\r
+                       if (sp != -1) {\r
+                               sp = c.indexOf('>', sp);\r
+                               t.head = c.substring(0, sp + 1);\r
+\r
+                               ep = c.indexOf('</body', sp);\r
+                               if (ep == -1)\r
+                                       ep = c.indexOf('</body', ep);\r
+\r
+                               o.content = c.substring(sp + 1, ep);\r
+                               t.foot = c.substring(ep);\r
+\r
+                               function low(s) {\r
+                                       return s.replace(/<\/?[A-Z]+/g, function(a) {\r
+                                               return a.toLowerCase();\r
+                                       })\r
+                               };\r
+\r
+                               t.head = low(t.head);\r
+                               t.foot = low(t.foot);\r
+                       } else {\r
+                               t.head = '';\r
+                               if (ed.getParam('fullpage_default_xml_pi'))\r
+                                       t.head += '<?xml version="1.0" encoding="' + ed.getParam('fullpage_default_encoding', 'ISO-8859-1') + '" ?>\n';\r
+\r
+                               t.head += ed.getParam('fullpage_default_doctype', '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');\r
+                               t.head += '\n<html>\n<head>\n<title>' + ed.getParam('fullpage_default_title', 'Untitled document') + '</title>\n';\r
+\r
+                               if (v = ed.getParam('fullpage_default_encoding'))\r
+                                       t.head += '<meta http-equiv="Content-Type" content="' + v + '" />\n';\r
+\r
+                               if (v = ed.getParam('fullpage_default_font_family'))\r
+                                       st += 'font-family: ' + v + ';';\r
+\r
+                               if (v = ed.getParam('fullpage_default_font_size'))\r
+                                       st += 'font-size: ' + v + ';';\r
+\r
+                               if (v = ed.getParam('fullpage_default_text_color'))\r
+                                       st += 'color: ' + v + ';';\r
+\r
+                               t.head += '</head>\n<body' + (st ? ' style="' + st + '"' : '') + '>\n';\r
+                               t.foot = '\n</body>\n</html>';\r
+                       }\r
+               },\r
+\r
+               _getContent : function(ed, o) {\r
+                       var t = this;\r
+\r
+                       if (!o.source_view || !ed.getParam('fullpage_hide_in_source_view'))\r
+                               o.content = tinymce.trim(t.head) + '\n' + tinymce.trim(o.content) + '\n' + tinymce.trim(t.foot);\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('fullpage', tinymce.plugins.FullPagePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullpage/fullpage.htm b/plugins/TinyMCE/js/plugins/fullpage/fullpage.htm
new file mode 100644 (file)
index 0000000..c32afaf
--- /dev/null
@@ -0,0 +1,571 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#fullpage_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="js/fullpage.js"></script>\r
+       <link href="css/fullpage.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body id="advlink" style="display: none">\r
+    <form onsubmit="updateAction();return false;" name="fullpage" action="#">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="meta_tab" class="current"><span><a href="javascript:mcTabs.displayTab('meta_tab','meta_panel');" onmousedown="return false;">{#fullpage_dlg.meta_tab}</a></span></li>\r
+                               <li id="appearance_tab"><span><a href="javascript:mcTabs.displayTab('appearance_tab','appearance_panel');" onmousedown="return false;">{#fullpage_dlg.appearance_tab}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#fullpage_dlg.advanced_tab}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="meta_panel" class="panel current">\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.meta_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="metatitle">{#fullpage_dlg.meta_title}</label>&nbsp;</td>\r
+                                                       <td><input type="text" id="metatitle" name="metatitle" value="" class="mceFocus" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="metakeywords">{#fullpage_dlg.meta_keywords}</label>&nbsp;</td>\r
+                                                       <td><textarea id="metakeywords" name="metakeywords" rows="4"></textarea></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="metadescription">{#fullpage_dlg.meta_description}</label>&nbsp;</td>\r
+                                                       <td><textarea id="metadescription" name="metadescription" rows="4"></textarea></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="metaauthor">{#fullpage_dlg.author}</label>&nbsp;</td>\r
+                                                       <td><input type="text" id="metaauthor" name="metaauthor" value="" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="metacopyright">{#fullpage_dlg.copyright}</label>&nbsp;</td>\r
+                                                       <td><input type="text" id="metacopyright" name="metacopyright" value="" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="metarobots">{#fullpage_dlg.meta_robots}</label>&nbsp;</td>\r
+                                                       <td>\r
+                                                               <select id="metarobots" name="metarobots">\r
+                                                                                       <option value="">{#not_set}</option> \r
+                                                                                       <option value="index,follow">{#fullpage_dlg.meta_index_follow}</option>\r
+                                                                                       <option value="index,nofollow">{#fullpage_dlg.meta_index_nofollow}</option>\r
+                                                                                       <option value="noindex,follow">{#fullpage_dlg.meta_noindex_follow}</option>\r
+                                                                                       <option value="noindex,nofollow">{#fullpage_dlg.meta_noindex_nofollow}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.langprops}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="docencoding">{#fullpage_dlg.encoding}</label></td> \r
+                                                       <td>\r
+                                                               <select id="docencoding" name="docencoding"> \r
+                                                                               <option value="">{#not_set}</option>\r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="doctypes">{#fullpage_dlg.doctypes}</label>&nbsp;</td>\r
+                                                       <td>\r
+                                                               <select id="doctypes" name="doctypes">\r
+                                                                               <option value="">{#not_set}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="langcode">{#fullpage_dlg.langcode}</label>&nbsp;</td>\r
+                                                       <td><input type="text" id="langcode" name="langcode" value="" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="langdir">{#fullpage_dlg.langdir}</label></td> \r
+                                                       <td>\r
+                                                               <select id="langdir" name="langdir"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="ltr">{#fullpage_dlg.ltr}</option> \r
+                                                                               <option value="rtl">{#fullpage_dlg.rtl}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="nowrap"><label for="xml_pi">{#fullpage_dlg.xml_pi}</label>&nbsp;</td>\r
+                                                       <td><input type="checkbox" id="xml_pi" name="xml_pi" class="checkbox" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="appearance_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.appearance_textprops}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="fontface">{#fullpage_dlg.fontface}</label></td> \r
+                                                       <td>\r
+                                                               <select id="fontface" name="fontface" onchange="changedStyleField(this);">\r
+                                                                               <option value="">{#not_set}</option>\r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="fontsize">{#fullpage_dlg.fontsize}</label></td> \r
+                                                       <td>\r
+                                                               <select id="fontsize" name="fontsize" onchange="changedStyleField(this);">\r
+                                                                               <option value="">{#not_set}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="textcolor">{#fullpage_dlg.textcolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="textcolor" name="textcolor" type="text" value="" size="9" onchange="updateColor('textcolor_pick','textcolor');changedStyleField(this);" /></td>\r
+                                                                               <td id="textcolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.appearance_bgprops}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bgimage">{#fullpage_dlg.bgimage}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bgimage" name="bgimage" type="text" value="" onchange="changedStyleField(this);" /></td>\r
+                                                                               <td id="bgimage_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bgcolor">{#fullpage_dlg.bgcolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedStyleField(this);" /></td>\r
+                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.appearance_marginprops}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="leftmargin">{#fullpage_dlg.left_margin}</label></td> \r
+                                                       <td><input id="leftmargin" name="leftmargin" type="text" value="" onchange="changedStyleField(this);" /></td>\r
+                                                       <td class="column1"><label for="rightmargin">{#fullpage_dlg.right_margin}</label></td> \r
+                                                       <td><input id="rightmargin" name="rightmargin" type="text" value="" onchange="changedStyleField(this);" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="topmargin">{#fullpage_dlg.top_margin}</label></td> \r
+                                                       <td><input id="topmargin" name="topmargin" type="text" value="" onchange="changedStyleField(this);" /></td>\r
+                                                       <td class="column1"><label for="bottommargin">{#fullpage_dlg.bottom_margin}</label></td> \r
+                                                       <td><input id="bottommargin" name="bottommargin" type="text" value="" onchange="changedStyleField(this);" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.appearance_linkprops}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="link_color">{#fullpage_dlg.link_color}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="link_color" name="link_color" type="text" value="" size="9" onchange="updateColor('link_color_pick','link_color');changedStyleField(this);" /></td>\r
+                                                                               <td id="link_color_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td class="column1"><label for="visited_color">{#fullpage_dlg.visited_color}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="visited_color" name="visited_color" type="text" value="" size="9" onchange="updateColor('visited_color_pick','visited_color');changedStyleField(this);" /></td>\r
+                                                                               <td id="visited_color_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="active_color">{#fullpage_dlg.active_color}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="active_color" name="active_color" type="text" value="" size="9" onchange="updateColor('active_color_pick','active_color');changedStyleField(this);" /></td>\r
+                                                                               <td id="active_color_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td>&nbsp;</td>\r
+                                                       <td>&nbsp;</td>\r
+\r
+<!--                                                   <td class="column1"><label for="hover_color">{#fullpage_dlg.hover_color}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="hover_color" name="hover_color" type="text" value="" size="9" onchange="changedStyleField(this);" /></td>\r
+                                                                               <td id="hover_color_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> -->\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.appearance_style}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="stylesheet">{#fullpage_dlg.stylesheet}</label></td> \r
+                                                       <td><table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="stylesheet" name="stylesheet" type="text" value="" /></td>\r
+                                                                               <td id="stylesheet_browsercontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="style">{#fullpage_dlg.style}</label></td> \r
+                                                       <td><input id="style" name="style" type="text" value="" onchange="changedStyleField(this);" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                               <div id="addmenu">\r
+                                       <table border="0" cellpadding="0" cellspacing="0">\r
+                                               <tr><td><a href="javascript:addHeadElm('title');" onmousedown="return false;"><span>{#fullpage_dlg.add_title}</span></a></td></tr>\r
+                                               <tr><td><a href="javascript:addHeadElm('meta');" onmousedown="return false;"><span>{#fullpage_dlg.add_meta}</span></a></td></tr>\r
+                                               <tr><td><a href="javascript:addHeadElm('script');" onmousedown="return false;"><span>{#fullpage_dlg.add_script}</span></a></td></tr>\r
+                                               <tr><td><a href="javascript:addHeadElm('style');" onmousedown="return false;"><span>{#fullpage_dlg.add_style}</span></a></td></tr>\r
+                                               <tr><td><a href="javascript:addHeadElm('link');" onmousedown="return false;"><span>{#fullpage_dlg.add_link}</span></a></td></tr>\r
+                                               <tr><td><a href="javascript:addHeadElm('base');" onmousedown="return false;"><span>{#fullpage_dlg.add_base}</span></a></td></tr>\r
+                                               <tr><td><a href="javascript:addHeadElm('comment');" onmousedown="return false;"><span>{#fullpage_dlg.add_comment}</span></a></td></tr>\r
+                                       </table>\r
+                               </div>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#fullpage_dlg.head_elements}</legend>\r
+\r
+                                       <div class="headlistwrapper">\r
+                                               <div class="toolbar">\r
+                                                       <div style="float: left">\r
+                                                               <a id="addbutton" href="javascript:showAddMenu();" onmousedown="return false;" class="addbutton" title="{#fullpage_dlg.add}"></a>\r
+                                                               <a href="#" onmousedown="return false;" class="removebutton" title="{#fullpage_dlg.remove}"></a>\r
+                                                       </div>\r
+                                                       <div style="float: right">\r
+                                                               <a href="#" onmousedown="return false;" class="moveupbutton" title="{#fullpage_dlg.moveup}"></a>\r
+                                                               <a href="#" onmousedown="return false;" class="movedownbutton" title="{#fullpage_dlg.movedown}"></a>\r
+                                                       </div>\r
+                                                       <br style="clear: both" />\r
+                                               </div>\r
+                                               <select id="headlist" size="26" onchange="updateHeadElm(this.options[this.selectedIndex].value);">\r
+                                                       <option value="title_0">&lt;title&gt;Some title bla bla bla&lt;/title&gt;</option>\r
+                                                       <option value="meta_1">&lt;meta name="keywords"&gt;Some bla bla bla&lt;/meta&gt;</option>\r
+                                                       <option value="meta_2">&lt;meta name="description"&gt;Some bla bla bla bla bla bla bla bla bla&lt;/meta&gt;</option>\r
+                                                       <option value="script_3">&lt;script language=&quot;javascript&quot;&gt;...&lt;/script&gt;</option>\r
+                                                       <option value="style_4">&lt;style&gt;...&lt;/style&gt;</option>\r
+                                                       <option value="base_5">&lt;base href="." /&gt;</option>\r
+                                                       <option value="comment_6">&lt;!-- ... --&gt;</option>\r
+                                                       <option value="link_7">&lt;link href="." /&gt;</option>\r
+                                               </select>\r
+                                       </div>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="meta_element">\r
+                                       <legend>{#fullpage_dlg.meta_element}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="element_meta_type">{#fullpage_dlg.type}</label></td> \r
+                                                       <td><select id="element_meta_type">\r
+                                                                               <option value="name">name</option>\r
+                                                                               <option value="http-equiv">http-equiv</option>\r
+                                                               </select></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="element_meta_name">{#fullpage_dlg.name}</label></td> \r
+                                                       <td><input id="element_meta_name" name="element_meta_name" type="text" value="" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="element_meta_content">{#fullpage_dlg.content}</label></td> \r
+                                                       <td><input id="element_meta_content" name="element_meta_content" type="text" value="" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+\r
+                                       <input type="button" id="meta_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+\r
+                               <fieldset id="title_element">\r
+                                       <legend>{#fullpage_dlg.title_element}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="element_title">{#fullpage_dlg.meta_title}</label></td> \r
+                                                       <td><input id="element_title" name="element_title" type="text" value="" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+\r
+                                       <input type="button" id="title_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+\r
+                               <fieldset id="script_element">\r
+                                       <legend>{#fullpage_dlg.script_element}</legend>\r
+\r
+                                       <div class="tabs">\r
+                                               <ul>\r
+                                                       <li id="script_props_tab" class="current"><span><a href="javascript:mcTabs.displayTab('script_props_tab','script_props_panel');" onmousedown="return false;">{#fullpage_dlg.properties}</a></span></li>\r
+                                                       <li id="script_value_tab"><span><a href="javascript:mcTabs.displayTab('script_value_tab','script_value_panel');" onmousedown="return false;">{#fullpage_dlg.value}</a></span></li>\r
+                                               </ul>\r
+                                       </div>\r
+\r
+                                       <br style="clear: both" />\r
+\r
+                                       <div class="panel_wrapper">\r
+                                               <div id="script_props_panel" class="panel current">\r
+                                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_script_type">{#fullpage_dlg.type}</label></td> \r
+                                                                       <td><select id="element_script_type">\r
+                                                                               <option value="text/javascript">text/javascript</option>\r
+                                                                               <option value="text/jscript">text/jscript</option>\r
+                                                                               <option value="text/vbscript">text/vbscript</option>\r
+                                                                               <option value="text/vbs">text/vbs</option>\r
+                                                                               <option value="text/ecmascript">text/ecmascript</option>\r
+                                                                               <option value="text/xml">text/xml</option>\r
+                                                                       </select></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_script_src">{#fullpage_dlg.src}</label></td> \r
+                                                                       <td><table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="element_script_src" name="element_script_src" type="text" value="" /></td>\r
+                                                                               <td id="script_src_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_script_charset">{#fullpage_dlg.charset}</label></td> \r
+                                                                       <td><select id="element_script_charset"><option value="">{#not_set}</option></select></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_script_defer">{#fullpage_dlg.defer}</label></td> \r
+                                                                       <td><input type="checkbox" id="element_script_defer" name="element_script_defer" class="checkbox" /></td>\r
+                                                               </tr>\r
+                                                       </table>\r
+                                               </div>\r
+\r
+                                               <div id="script_value_panel" class="panel">\r
+                                                       <textarea id="element_script_value"></textarea>\r
+                                               </div>\r
+                                       </div>\r
+\r
+                                       <input type="button" id="script_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+\r
+                               <fieldset id="style_element">\r
+                                       <legend>{#fullpage_dlg.style_element}</legend>\r
+\r
+                                       <div class="tabs">\r
+                                               <ul>\r
+                                                       <li id="style_props_tab" class="current"><span><a href="javascript:mcTabs.displayTab('style_props_tab','style_props_panel');" onmousedown="return false;">{#fullpage_dlg.properties}</a></span></li>\r
+                                                       <li id="style_value_tab"><span><a href="javascript:mcTabs.displayTab('style_value_tab','style_value_panel');" onmousedown="return false;">{#fullpage_dlg.value}</a></span></li>\r
+                                               </ul>\r
+                                       </div>\r
+\r
+                                       <br style="clear: both" />\r
+\r
+                                       <div class="panel_wrapper">\r
+                                               <div id="style_props_panel" class="panel current">\r
+                                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_style_type">{#fullpage_dlg.type}</label></td> \r
+                                                                       <td><select id="element_style_type">\r
+                                                                               <option value="text/css">text/css</option>\r
+                                                                       </select></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_style_media">{#fullpage_dlg.media}</label></td> \r
+                                                                       <td><select id="element_style_media"></select></td>\r
+                                                               </tr>\r
+                                                       </table>\r
+                                               </div>\r
+\r
+                                               <div id="style_value_panel" class="panel">\r
+                                                       <textarea id="element_style_value"></textarea>\r
+                                               </div>\r
+                                       </div>\r
+\r
+                                       <input type="button" id="style_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+\r
+                               <fieldset id="base_element">\r
+                                       <legend>{#fullpage_dlg.base_element}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="element_base_href">{#fullpage_dlg.href}</label></td> \r
+                                                       <td><input id="element_base_href" name="element_base_href" type="text" value="" /></td>\r
+                                               </tr>\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="element_base_target">{#fullpage_dlg.target}</label></td> \r
+                                                       <td><input id="element_base_target" name="element_base_target" type="text" value="" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+\r
+                                       <input type="button" id="base_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+\r
+                               <fieldset id="link_element">\r
+                                       <legend>{#fullpage_dlg.link_element}</legend>\r
+\r
+                                       <div class="tabs">\r
+                                               <ul>\r
+                                                       <li id="link_general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('link_general_tab','link_general_panel');" onmousedown="return false;">{#fullpage_dlg.general_props}</a></span></li>\r
+                                                       <li id="link_advanced_tab"><span><a href="javascript:mcTabs.displayTab('link_advanced_tab','link_advanced_panel');" onmousedown="return false;">{#fullpage_dlg.advanced_props}</a></span></li>\r
+                                               </ul>\r
+                                       </div>\r
+\r
+                                       <br style="clear: both" />\r
+\r
+                                       <div class="panel_wrapper">\r
+                                               <div id="link_general_panel" class="panel current">\r
+                                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_href">{#fullpage_dlg.href}</label></td> \r
+                                                                       <td><table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="element_link_href" name="element_link_href" type="text" value="" /></td>\r
+                                                                               <td id="link_href_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_title">{#fullpage_dlg.meta_title}</label></td> \r
+                                                                       <td><input id="element_link_title" name="element_link_title" type="text" value="" /></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_type">{#fullpage_dlg.type}</label></td> \r
+                                                                       <td><select id="element_link_type" name="element_link_type">\r
+                                                                               <option value="text/css">text/css</option>\r
+                                                                               <option value="text/javascript">text/javascript</option>\r
+                                                                       </select></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_media">{#fullpage_dlg.media}</label></td> \r
+                                                                       <td><select id="element_link_media" name="element_link_media"></select></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td><label for="element_style_rel">{#fullpage_dlg.rel}</label></td>\r
+                                                                       <td><select id="element_style_rel" name="element_style_rel"> \r
+                                                                                       <option value="">{#not_set}</option> \r
+                                                                                       <option value="stylesheet">Stylesheet</option>\r
+                                                                                       <option value="alternate">Alternate</option>\r
+                                                                                       <option value="designates">Designates</option>\r
+                                                                                       <option value="start">Start</option>\r
+                                                                                       <option value="next">Next</option>\r
+                                                                                       <option value="prev">Prev</option>\r
+                                                                                       <option value="contents">Contents</option>\r
+                                                                                       <option value="index">Index</option>\r
+                                                                                       <option value="glossary">Glossary</option>\r
+                                                                                       <option value="copyright">Copyright</option>\r
+                                                                                       <option value="chapter">Chapter</option>\r
+                                                                                       <option value="subsection">Subsection</option>\r
+                                                                                       <option value="appendix">Appendix</option>\r
+                                                                                       <option value="help">Help</option>\r
+                                                                                       <option value="bookmark">Bookmark</option>\r
+                                                                               </select> \r
+                                                                       </td>\r
+                                                               </tr>\r
+                                                       </table>\r
+                                               </div>\r
+\r
+                                               <div id="link_advanced_panel" class="panel">\r
+                                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_charset">{#fullpage_dlg.charset}</label></td> \r
+                                                                       <td><select id="element_link_charset"><option value="">{#not_set}</option></select></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_hreflang">{#fullpage_dlg.hreflang}</label></td> \r
+                                                                       <td><input id="element_link_hreflang" name="element_link_hreflang" type="text" value="" /></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td class="column1"><label for="element_link_target">{#fullpage_dlg.target}</label></td> \r
+                                                                       <td><input id="element_link_target" name="element_link_target" type="text" value="" /></td>\r
+                                                               </tr>\r
+                                                               <tr>\r
+                                                                       <td><label for="element_style_rev">{#fullpage_dlg.rev}</label></td>\r
+                                                                       <td><select id="element_style_rev" name="element_style_rev"> \r
+                                                                                       <option value="">{#not_set}</option> \r
+                                                                                       <option value="alternate">Alternate</option> \r
+                                                                                       <option value="designates">Designates</option> \r
+                                                                                       <option value="stylesheet">Stylesheet</option> \r
+                                                                                       <option value="start">Start</option> \r
+                                                                                       <option value="next">Next</option> \r
+                                                                                       <option value="prev">Prev</option> \r
+                                                                                       <option value="contents">Contents</option> \r
+                                                                                       <option value="index">Index</option> \r
+                                                                                       <option value="glossary">Glossary</option> \r
+                                                                                       <option value="copyright">Copyright</option> \r
+                                                                                       <option value="chapter">Chapter</option> \r
+                                                                                       <option value="subsection">Subsection</option> \r
+                                                                                       <option value="appendix">Appendix</option> \r
+                                                                                       <option value="help">Help</option> \r
+                                                                                       <option value="bookmark">Bookmark</option> \r
+                                                                               </select> \r
+                                                                       </td>\r
+                                                               </tr>\r
+                                                       </table>\r
+                                               </div>\r
+                                       </div>\r
+\r
+                                       <input type="button" id="link_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+\r
+                               <fieldset id="comment_element">\r
+                                       <legend>{#fullpage_dlg.comment_element}</legend>\r
+\r
+                                       <textarea id="element_comment_value"></textarea>\r
+\r
+                                       <input type="button" id="comment_updateelement" class="updateElementButton" name="update" value="{#update}" onclick="updateElement();" />\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="update" value="{#update}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+    </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/fullpage/js/fullpage.js b/plugins/TinyMCE/js/plugins/fullpage/js/fullpage.js
new file mode 100644 (file)
index 0000000..a1bb719
--- /dev/null
@@ -0,0 +1,471 @@
+/**\r
+ * fullpage.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+tinyMCEPopup.requireLangPack();\r
+\r
+var doc;\r
+\r
+var defaultDocTypes = \r
+       'XHTML 1.0 Transitional=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">,' +\r
+       'XHTML 1.0 Frameset=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">,' +\r
+       'XHTML 1.0 Strict=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">,' +\r
+       'XHTML 1.1=<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">,' +\r
+       'HTML 4.01 Transitional=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">,' +\r
+       'HTML 4.01 Strict=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">,' +\r
+       'HTML 4.01 Frameset=<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">';\r
+\r
+var defaultEncodings = \r
+       'Western european (iso-8859-1)=iso-8859-1,' +\r
+       'Central European (iso-8859-2)=iso-8859-2,' +\r
+       'Unicode (UTF-8)=utf-8,' +\r
+       'Chinese traditional (Big5)=big5,' +\r
+       'Cyrillic (iso-8859-5)=iso-8859-5,' +\r
+       'Japanese (iso-2022-jp)=iso-2022-jp,' +\r
+       'Greek (iso-8859-7)=iso-8859-7,' +\r
+       'Korean (iso-2022-kr)=iso-2022-kr,' +\r
+       'ASCII (us-ascii)=us-ascii';\r
+\r
+var defaultMediaTypes = \r
+       'all=all,' +\r
+       'screen=screen,' +\r
+       'print=print,' +\r
+       'tty=tty,' +\r
+       'tv=tv,' +\r
+       'projection=projection,' +\r
+       'handheld=handheld,' +\r
+       'braille=braille,' +\r
+       'aural=aural';\r
+\r
+var defaultFontNames = 'Arial=arial,helvetica,sans-serif;Courier New=courier new,courier,monospace;Georgia=georgia,times new roman,times,serif;Tahoma=tahoma,arial,helvetica,sans-serif;Times New Roman=times new roman,times,serif;Verdana=verdana,arial,helvetica,sans-serif;Impact=impact;WingDings=wingdings';\r
+var defaultFontSizes = '10px,11px,12px,13px,14px,15px,16px';\r
+\r
+function init() {\r
+       var f = document.forms['fullpage'], el = f.elements, e, i, p, doctypes, encodings, mediaTypes, fonts, ed = tinyMCEPopup.editor, dom = tinyMCEPopup.dom, style;\r
+\r
+       // Setup doctype select box\r
+       doctypes = ed.getParam("fullpage_doctypes", defaultDocTypes).split(',');\r
+       for (i=0; i<doctypes.length; i++) {\r
+               p = doctypes[i].split('=');\r
+\r
+               if (p.length > 1)\r
+                       addSelectValue(f, 'doctypes', p[0], p[1]);\r
+       }\r
+\r
+       // Setup fonts select box\r
+       fonts = ed.getParam("fullpage_fonts", defaultFontNames).split(';');\r
+       for (i=0; i<fonts.length; i++) {\r
+               p = fonts[i].split('=');\r
+\r
+               if (p.length > 1)\r
+                       addSelectValue(f, 'fontface', p[0], p[1]);\r
+       }\r
+\r
+       // Setup fontsize select box\r
+       fonts = ed.getParam("fullpage_fontsizes", defaultFontSizes).split(',');\r
+       for (i=0; i<fonts.length; i++)\r
+               addSelectValue(f, 'fontsize', fonts[i], fonts[i]);\r
+\r
+       // Setup mediatype select boxs\r
+       mediaTypes = ed.getParam("fullpage_media_types", defaultMediaTypes).split(',');\r
+       for (i=0; i<mediaTypes.length; i++) {\r
+               p = mediaTypes[i].split('=');\r
+\r
+               if (p.length > 1) {\r
+                       addSelectValue(f, 'element_style_media', p[0], p[1]);\r
+                       addSelectValue(f, 'element_link_media', p[0], p[1]);\r
+               }\r
+       }\r
+\r
+       // Setup encodings select box\r
+       encodings = ed.getParam("fullpage_encodings", defaultEncodings).split(',');\r
+       for (i=0; i<encodings.length; i++) {\r
+               p = encodings[i].split('=');\r
+\r
+               if (p.length > 1) {\r
+                       addSelectValue(f, 'docencoding', p[0], p[1]);\r
+                       addSelectValue(f, 'element_script_charset', p[0], p[1]);\r
+                       addSelectValue(f, 'element_link_charset', p[0], p[1]);\r
+               }\r
+       }\r
+\r
+       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+       document.getElementById('link_color_pickcontainer').innerHTML = getColorPickerHTML('link_color_pick','link_color');\r
+       //document.getElementById('hover_color_pickcontainer').innerHTML = getColorPickerHTML('hover_color_pick','hover_color');\r
+       document.getElementById('visited_color_pickcontainer').innerHTML = getColorPickerHTML('visited_color_pick','visited_color');\r
+       document.getElementById('active_color_pickcontainer').innerHTML = getColorPickerHTML('active_color_pick','active_color');\r
+       document.getElementById('textcolor_pickcontainer').innerHTML = getColorPickerHTML('textcolor_pick','textcolor');\r
+       document.getElementById('stylesheet_browsercontainer').innerHTML = getBrowserHTML('stylesheetbrowser','stylesheet','file','fullpage');\r
+       document.getElementById('link_href_pickcontainer').innerHTML = getBrowserHTML('link_href_browser','element_link_href','file','fullpage');\r
+       document.getElementById('script_src_pickcontainer').innerHTML = getBrowserHTML('script_src_browser','element_script_src','file','fullpage');\r
+       document.getElementById('bgimage_pickcontainer').innerHTML = getBrowserHTML('bgimage_browser','bgimage','image','fullpage');\r
+\r
+       // Resize some elements\r
+       if (isVisible('stylesheetbrowser'))\r
+               document.getElementById('stylesheet').style.width = '220px';\r
+\r
+       if (isVisible('link_href_browser'))\r
+               document.getElementById('element_link_href').style.width = '230px';\r
+\r
+       if (isVisible('bgimage_browser'))\r
+               document.getElementById('bgimage').style.width = '210px';\r
+\r
+       // Add iframe\r
+       dom.add(document.body, 'iframe', {id : 'documentIframe', src : 'javascript:""', style : {display : 'none'}});\r
+       doc = dom.get('documentIframe').contentWindow.document;\r
+       h = tinyMCEPopup.getWindowArg('head_html');\r
+\r
+       // Preprocess the HTML disable scripts and urls\r
+       h = h.replace(/<script>/gi, '<script type="text/javascript">');\r
+       h = h.replace(/type=([\"\'])?/gi, 'type=$1-mce-');\r
+       h = h.replace(/(src=|href=)/g, '_mce_$1');\r
+\r
+       // Write in the content in the iframe\r
+       doc.write(h + '</body></html>');\r
+       doc.close();\r
+\r
+       // Parse xml and doctype\r
+       xmlVer = getReItem(/<\?\s*?xml.*?version\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);\r
+       xmlEnc = getReItem(/<\?\s*?xml.*?encoding\s*?=\s*?"(.*?)".*?\?>/gi, h, 1);\r
+       docType = getReItem(/<\!DOCTYPE.*?>/gi, h.replace(/\n/g, ''), 0).replace(/ +/g, ' ');\r
+       f.langcode.value = getReItem(/lang="(.*?)"/gi, h, 1);\r
+\r
+       // Parse title\r
+       if (e = doc.getElementsByTagName('title')[0])\r
+               el.metatitle.value = e.textContent || e.text;\r
+\r
+       // Parse meta\r
+       tinymce.each(doc.getElementsByTagName('meta'), function(n) {\r
+               var na = (n.getAttribute('name', 2) || '').toLowerCase(), va = n.getAttribute('content', 2), eq = n.getAttribute('httpEquiv', 2) || '';\r
+\r
+               e = el['meta' + na];\r
+\r
+               if (na == 'robots') {\r
+                       selectByValue(f, 'metarobots', tinymce.trim(va), true, true);\r
+                       return;\r
+               }\r
+\r
+               switch (eq.toLowerCase()) {\r
+                       case "content-type":\r
+                               tmp = getReItem(/charset\s*=\s*(.*)\s*/gi, va, 1);\r
+\r
+                               // Override XML encoding\r
+                               if (tmp != "")\r
+                                       xmlEnc = tmp;\r
+\r
+                               return;\r
+               }\r
+\r
+               if (e)\r
+                       e.value = va;\r
+       });\r
+\r
+       selectByValue(f, 'doctypes', docType, true, true);\r
+       selectByValue(f, 'docencoding', xmlEnc, true, true);\r
+       selectByValue(f, 'langdir', doc.body.getAttribute('dir', 2) || '', true, true);\r
+\r
+       if (xmlVer != '')\r
+               el.xml_pi.checked = true;\r
+\r
+       // Parse appearance\r
+\r
+       // Parse primary stylesheet\r
+       tinymce.each(doc.getElementsByTagName("link"), function(l) {\r
+               var m = l.getAttribute('media', 2) || '', t = l.getAttribute('type', 2) || '';\r
+\r
+               if (t == "-mce-text/css" && (m == "" || m == "screen" || m == "all") && (l.getAttribute('rel', 2) || '') == "stylesheet") {\r
+                       f.stylesheet.value = l.getAttribute('_mce_href', 2) || '';\r
+                       return false;\r
+               }\r
+       });\r
+\r
+       // Get from style elements\r
+       tinymce.each(doc.getElementsByTagName("style"), function(st) {\r
+               var tmp = parseStyleElement(st);\r
+\r
+               for (x=0; x<tmp.length; x++) {\r
+                       if (tmp[x].rule.indexOf('a:visited') != -1 && tmp[x].data['color'])\r
+                               f.visited_color.value = tmp[x].data['color'];\r
+\r
+                       if (tmp[x].rule.indexOf('a:link') != -1 && tmp[x].data['color'])\r
+                               f.link_color.value = tmp[x].data['color'];\r
+\r
+                       if (tmp[x].rule.indexOf('a:active') != -1 && tmp[x].data['color'])\r
+                               f.active_color.value = tmp[x].data['color'];\r
+               }\r
+       });\r
+\r
+       f.textcolor.value = tinyMCEPopup.dom.getAttrib(doc.body, "text");\r
+       f.active_color.value = tinyMCEPopup.dom.getAttrib(doc.body, "alink");\r
+       f.link_color.value = tinyMCEPopup.dom.getAttrib(doc.body, "link");\r
+       f.visited_color.value = tinyMCEPopup.dom.getAttrib(doc.body, "vlink");\r
+       f.bgcolor.value = tinyMCEPopup.dom.getAttrib(doc.body, "bgcolor");\r
+       f.bgimage.value = tinyMCEPopup.dom.getAttrib(doc.body, "background");\r
+\r
+       // Get from style info\r
+       style = tinyMCEPopup.dom.parseStyle(tinyMCEPopup.dom.getAttrib(doc.body, 'style'));\r
+\r
+       if (style['font-family'])\r
+               selectByValue(f, 'fontface', style['font-family'], true, true);\r
+       else\r
+               selectByValue(f, 'fontface', ed.getParam("fullpage_default_fontface", ""), true, true);\r
+\r
+       if (style['font-size'])\r
+               selectByValue(f, 'fontsize', style['font-size'], true, true);\r
+       else\r
+               selectByValue(f, 'fontsize', ed.getParam("fullpage_default_fontsize", ""), true, true);\r
+\r
+       if (style['color'])\r
+               f.textcolor.value = convertRGBToHex(style['color']);\r
+\r
+       if (style['background-image'])\r
+               f.bgimage.value = style['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+\r
+       if (style['background-color'])\r
+               f.bgcolor.value = style['background-color'];\r
+\r
+       if (style['margin']) {\r
+               tmp = style['margin'].replace(/[^0-9 ]/g, '');\r
+               tmp = tmp.split(/ +/);\r
+               f.topmargin.value = tmp.length > 0 ? tmp[0] : '';\r
+               f.rightmargin.value = tmp.length > 1 ? tmp[1] : tmp[0];\r
+               f.bottommargin.value = tmp.length > 2 ? tmp[2] : tmp[0];\r
+               f.leftmargin.value = tmp.length > 3 ? tmp[3] : tmp[0];\r
+       }\r
+\r
+       if (style['margin-left'])\r
+               f.leftmargin.value = style['margin-left'].replace(/[^0-9]/g, '');\r
+\r
+       if (style['margin-right'])\r
+               f.rightmargin.value = style['margin-right'].replace(/[^0-9]/g, '');\r
+\r
+       if (style['margin-top'])\r
+               f.topmargin.value = style['margin-top'].replace(/[^0-9]/g, '');\r
+\r
+       if (style['margin-bottom'])\r
+               f.bottommargin.value = style['margin-bottom'].replace(/[^0-9]/g, '');\r
+\r
+       f.style.value = tinyMCEPopup.dom.serializeStyle(style);\r
+\r
+       // Update colors\r
+       updateColor('textcolor_pick', 'textcolor');\r
+       updateColor('bgcolor_pick', 'bgcolor');\r
+       updateColor('visited_color_pick', 'visited_color');\r
+       updateColor('active_color_pick', 'active_color');\r
+       updateColor('link_color_pick', 'link_color');\r
+}\r
+\r
+function getReItem(r, s, i) {\r
+       var c = r.exec(s);\r
+\r
+       if (c && c.length > i)\r
+               return c[i];\r
+\r
+       return '';\r
+}\r
+\r
+function updateAction() {\r
+       var f = document.forms[0], nl, i, h, v, s, head, html, l, tmp, addlink = true, ser;\r
+\r
+       head = doc.getElementsByTagName('head')[0];\r
+\r
+       // Fix scripts without a type\r
+       nl = doc.getElementsByTagName('script');\r
+       for (i=0; i<nl.length; i++) {\r
+               if (tinyMCEPopup.dom.getAttrib(nl[i], '_mce_type') == '')\r
+                       nl[i].setAttribute('_mce_type', 'text/javascript');\r
+       }\r
+\r
+       // Get primary stylesheet\r
+       nl = doc.getElementsByTagName("link");\r
+       for (i=0; i<nl.length; i++) {\r
+               l = nl[i];\r
+\r
+               tmp = tinyMCEPopup.dom.getAttrib(l, 'media');\r
+\r
+               if (tinyMCEPopup.dom.getAttrib(l, '_mce_type') == "text/css" && (tmp == "" || tmp == "screen" || tmp == "all") && tinyMCEPopup.dom.getAttrib(l, 'rel') == "stylesheet") {\r
+                       addlink = false;\r
+\r
+                       if (f.stylesheet.value == '')\r
+                               l.parentNode.removeChild(l);\r
+                       else\r
+                               l.setAttribute('_mce_href', f.stylesheet.value);\r
+\r
+                       break;\r
+               }\r
+       }\r
+\r
+       // Add new link\r
+       if (f.stylesheet.value != '') {\r
+               l = doc.createElement('link');\r
+\r
+               l.setAttribute('type', 'text/css');\r
+               l.setAttribute('_mce_href', f.stylesheet.value);\r
+               l.setAttribute('rel', 'stylesheet');\r
+\r
+               head.appendChild(l);\r
+       }\r
+\r
+       setMeta(head, 'keywords', f.metakeywords.value);\r
+       setMeta(head, 'description', f.metadescription.value);\r
+       setMeta(head, 'author', f.metaauthor.value);\r
+       setMeta(head, 'copyright', f.metacopyright.value);\r
+       setMeta(head, 'robots', getSelectValue(f, 'metarobots'));\r
+       setMeta(head, 'Content-Type', getSelectValue(f, 'docencoding'));\r
+\r
+       doc.body.dir = getSelectValue(f, 'langdir');\r
+       doc.body.style.cssText = f.style.value;\r
+\r
+       doc.body.setAttribute('vLink', f.visited_color.value);\r
+       doc.body.setAttribute('link', f.link_color.value);\r
+       doc.body.setAttribute('text', f.textcolor.value);\r
+       doc.body.setAttribute('aLink', f.active_color.value);\r
+\r
+       doc.body.style.fontFamily = getSelectValue(f, 'fontface');\r
+       doc.body.style.fontSize = getSelectValue(f, 'fontsize');\r
+       doc.body.style.backgroundColor = f.bgcolor.value;\r
+\r
+       if (f.leftmargin.value != '')\r
+               doc.body.style.marginLeft = f.leftmargin.value + 'px';\r
+\r
+       if (f.rightmargin.value != '')\r
+               doc.body.style.marginRight = f.rightmargin.value + 'px';\r
+\r
+       if (f.bottommargin.value != '')\r
+               doc.body.style.marginBottom = f.bottommargin.value + 'px';\r
+\r
+       if (f.topmargin.value != '')\r
+               doc.body.style.marginTop = f.topmargin.value + 'px';\r
+\r
+       html = doc.getElementsByTagName('html')[0];\r
+       html.setAttribute('lang', f.langcode.value);\r
+       html.setAttribute('xml:lang', f.langcode.value);\r
+\r
+       if (f.bgimage.value != '')\r
+               doc.body.style.backgroundImage = "url('" + f.bgimage.value + "')";\r
+       else\r
+               doc.body.style.backgroundImage = '';\r
+\r
+       ser = tinyMCEPopup.editor.plugins.fullpage._createSerializer();\r
+       ser.setRules('-title,meta[http-equiv|name|content],base[href|target],link[href|rel|type|title|media],style[type],script[type|language|src],html[lang|xml::lang|xmlns],body[style|dir|vlink|link|text|alink],head');\r
+\r
+       h = ser.serialize(doc.documentElement);\r
+       h = h.substring(0, h.lastIndexOf('</body>'));\r
+\r
+       if (h.indexOf('<title>') == -1)\r
+               h = h.replace(/<head.*?>/, '$&\n' + '<title>' + tinyMCEPopup.dom.encode(f.metatitle.value) + '</title>');\r
+       else\r
+               h = h.replace(/<title>(.*?)<\/title>/, '<title>' + tinyMCEPopup.dom.encode(f.metatitle.value) + '</title>');\r
+\r
+       if ((v = getSelectValue(f, 'doctypes')) != '')\r
+               h = v + '\n' + h;\r
+\r
+       if (f.xml_pi.checked) {\r
+               s = '<?xml version="1.0"';\r
+\r
+               if ((v = getSelectValue(f, 'docencoding')) != '')\r
+                       s += ' encoding="' + v + '"';\r
+\r
+               s += '?>\n';\r
+               h = s + h;\r
+       }\r
+\r
+       h = h.replace(/type=\"\-mce\-/gi, 'type="');\r
+\r
+       tinyMCEPopup.editor.plugins.fullpage.head = h;\r
+       tinyMCEPopup.editor.plugins.fullpage._setBodyAttribs(tinyMCEPopup.editor, {});\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function changedStyleField(field) {\r
+}\r
+\r
+function setMeta(he, k, v) {\r
+       var nl, i, m;\r
+\r
+       nl = he.getElementsByTagName('meta');\r
+       for (i=0; i<nl.length; i++) {\r
+               if (k == 'Content-Type' && tinyMCEPopup.dom.getAttrib(nl[i], 'http-equiv') == k) {\r
+                       if (v == '')\r
+                               nl[i].parentNode.removeChild(nl[i]);\r
+                       else\r
+                               nl[i].setAttribute('content', "text/html; charset=" + v);\r
+\r
+                       return;\r
+               }\r
+\r
+               if (tinyMCEPopup.dom.getAttrib(nl[i], 'name') == k) {\r
+                       if (v == '')\r
+                               nl[i].parentNode.removeChild(nl[i]);\r
+                       else\r
+                               nl[i].setAttribute('content', v);\r
+                       return;\r
+               }\r
+       }\r
+\r
+       if (v == '')\r
+               return;\r
+\r
+       m = doc.createElement('meta');\r
+\r
+       if (k == 'Content-Type')\r
+               m.httpEquiv = k;\r
+       else\r
+               m.setAttribute('name', k);\r
+\r
+       m.setAttribute('content', v);\r
+       he.appendChild(m);\r
+}\r
+\r
+function parseStyleElement(e) {\r
+       var v = e.innerHTML;\r
+       var p, i, r;\r
+\r
+       v = v.replace(/<!--/gi, '');\r
+       v = v.replace(/-->/gi, '');\r
+       v = v.replace(/[\n\r]/gi, '');\r
+       v = v.replace(/\s+/gi, ' ');\r
+\r
+       r = [];\r
+       p = v.split(/{|}/);\r
+\r
+       for (i=0; i<p.length; i+=2) {\r
+               if (p[i] != "")\r
+                       r[r.length] = {rule : tinymce.trim(p[i]), data : tinyMCEPopup.dom.parseStyle(p[i+1])};\r
+       }\r
+\r
+       return r;\r
+}\r
+\r
+function serializeStyleElement(d) {\r
+       var i, s, st;\r
+\r
+       s = '<!--\n';\r
+\r
+       for (i=0; i<d.length; i++) {\r
+               s += d[i].rule + ' {\n';\r
+\r
+               st = tinyMCE.serializeStyle(d[i].data);\r
+\r
+               if (st != '')\r
+                       st += ';';\r
+\r
+               s += st.replace(/;/g, ';\n');\r
+               s += '}\n';\r
+\r
+               if (i != d.length - 1)\r
+                       s += '\n';\r
+       }\r
+\r
+       s += '\n-->';\r
+\r
+       return s;\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/fullpage/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/fullpage/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..f5801b8
--- /dev/null
@@ -0,0 +1,85 @@
+tinyMCE.addI18n('en.fullpage_dlg',{\r
+title:"Document properties",\r
+meta_tab:"General",\r
+appearance_tab:"Appearance",\r
+advanced_tab:"Advanced",\r
+meta_props:"Meta information",\r
+langprops:"Language and encoding",\r
+meta_title:"Title",\r
+meta_keywords:"Keywords",\r
+meta_description:"Description",\r
+meta_robots:"Robots",\r
+doctypes:"Doctype",\r
+langcode:"Language code",\r
+langdir:"Language direction",\r
+ltr:"Left to right",\r
+rtl:"Right to left",\r
+xml_pi:"XML declaration",\r
+encoding:"Character encoding",\r
+appearance_bgprops:"Background properties",\r
+appearance_marginprops:"Body margins",\r
+appearance_linkprops:"Link colors",\r
+appearance_textprops:"Text properties",\r
+bgcolor:"Background color",\r
+bgimage:"Background image",\r
+left_margin:"Left margin",\r
+right_margin:"Right margin",\r
+top_margin:"Top margin",\r
+bottom_margin:"Bottom margin",\r
+text_color:"Text color",\r
+font_size:"Font size",\r
+font_face:"Font face",\r
+link_color:"Link color",\r
+hover_color:"Hover color",\r
+visited_color:"Visited color",\r
+active_color:"Active color",\r
+textcolor:"Color",\r
+fontsize:"Font size",\r
+fontface:"Font family",\r
+meta_index_follow:"Index and follow the links",\r
+meta_index_nofollow:"Index and don't follow the links",\r
+meta_noindex_follow:"Do not index but follow the links",\r
+meta_noindex_nofollow:"Do not index and don\'t follow the links",\r
+appearance_style:"Stylesheet and style properties",\r
+stylesheet:"Stylesheet",\r
+style:"Style",\r
+author:"Author",\r
+copyright:"Copyright",\r
+add:"Add new element",\r
+remove:"Remove selected element",\r
+moveup:"Move selected element up",\r
+movedown:"Move selected element down",\r
+head_elements:"Head elements",\r
+info:"Information",\r
+add_title:"Title element",\r
+add_meta:"Meta element",\r
+add_script:"Script element",\r
+add_style:"Style element",\r
+add_link:"Link element",\r
+add_base:"Base element",\r
+add_comment:"Comment node",\r
+title_element:"Title element",\r
+script_element:"Script element",\r
+style_element:"Style element",\r
+base_element:"Base element",\r
+link_element:"Link element",\r
+meta_element:"Meta element",\r
+comment_element:"Comment",\r
+src:"Src",\r
+language:"Language",\r
+href:"Href",\r
+target:"Target",\r
+type:"Type",\r
+charset:"Charset",\r
+defer:"Defer",\r
+media:"Media",\r
+properties:"Properties",\r
+name:"Name",\r
+value:"Value",\r
+content:"Content",\r
+rel:"Rel",\r
+rev:"Rev",\r
+hreflang:"Href lang",\r
+general_props:"General",\r
+advanced_props:"Advanced"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin.js b/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin.js
new file mode 100644 (file)
index 0000000..4437bd2
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.DOM;tinymce.create("tinymce.plugins.FullScreenPlugin",{init:function(c,d){var e=this,f={},b;e.editor=c;c.addCommand("mceFullScreen",function(){var h,i=a.doc.documentElement;if(c.getParam("fullscreen_is_enabled")){if(c.getParam("fullscreen_new_window")){closeFullscreen()}else{a.win.setTimeout(function(){tinymce.dom.Event.remove(a.win,"resize",e.resizeFunc);tinyMCE.get(c.getParam("fullscreen_editor_id")).setContent(c.getContent({format:"raw"}),{format:"raw"});tinyMCE.remove(c);a.remove("mce_fullscreen_container");i.style.overflow=c.getParam("fullscreen_html_overflow");a.setStyle(a.doc.body,"overflow",c.getParam("fullscreen_overflow"));a.win.scrollTo(c.getParam("fullscreen_scrollx"),c.getParam("fullscreen_scrolly"));tinyMCE.settings=tinyMCE.oldSettings},10)}return}if(c.getParam("fullscreen_new_window")){h=a.win.open(d+"/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);try{h.resizeTo(screen.availWidth,screen.availHeight)}catch(g){}}else{tinyMCE.oldSettings=tinyMCE.settings;f.fullscreen_overflow=a.getStyle(a.doc.body,"overflow",1)||"auto";f.fullscreen_html_overflow=a.getStyle(i,"overflow",1);b=a.getViewPort();f.fullscreen_scrollx=b.x;f.fullscreen_scrolly=b.y;if(tinymce.isOpera&&f.fullscreen_overflow=="visible"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&f.fullscreen_overflow=="scroll"){f.fullscreen_overflow="auto"}if(tinymce.isIE&&(f.fullscreen_html_overflow=="visible"||f.fullscreen_html_overflow=="scroll")){f.fullscreen_html_overflow="auto"}if(f.fullscreen_overflow=="0px"){f.fullscreen_overflow=""}a.setStyle(a.doc.body,"overflow","hidden");i.style.overflow="hidden";b=a.getViewPort();a.win.scrollTo(0,0);if(tinymce.isIE){b.h-=1}n=a.add(a.doc.body,"div",{id:"mce_fullscreen_container",style:"position:"+(tinymce.isIE6||(tinymce.isIE&&!a.boxModel)?"absolute":"fixed")+";top:0;left:0;width:"+b.w+"px;height:"+b.h+"px;z-index:200000;"});a.add(n,"div",{id:"mce_fullscreen"});tinymce.each(c.settings,function(j,k){f[k]=j});f.id="mce_fullscreen";f.width=n.clientWidth;f.height=n.clientHeight-15;f.fullscreen_is_enabled=true;f.fullscreen_editor_id=c.id;f.theme_advanced_resizing=false;f.save_onsavecallback=function(){c.setContent(tinyMCE.get(f.id).getContent({format:"raw"}),{format:"raw"});c.execCommand("mceSave")};tinymce.each(c.getParam("fullscreen_settings"),function(l,j){f[j]=l});if(f.theme_advanced_toolbar_location==="external"){f.theme_advanced_toolbar_location="top"}e.fullscreenEditor=new tinymce.Editor("mce_fullscreen",f);e.fullscreenEditor.onInit.add(function(){e.fullscreenEditor.setContent(c.getContent());e.fullscreenEditor.focus()});e.fullscreenEditor.render();e.fullscreenElement=new tinymce.dom.Element("mce_fullscreen_container");e.fullscreenElement.update();e.resizeFunc=tinymce.dom.Event.add(a.win,"resize",function(){var m=tinymce.DOM.getViewPort(),k=e.fullscreenEditor,j,l;j=k.dom.getSize(k.getContainer().firstChild);l=k.dom.getSize(k.getContainer().getElementsByTagName("iframe")[0]);k.theme.resizeTo(m.w-j.w+l.w,m.h-j.h+l.h)})}});c.addButton("fullscreen",{title:"fullscreen.desc",cmd:"mceFullScreen"});c.onNodeChange.add(function(h,g){g.setActive("fullscreen",h.getParam("fullscreen_is_enabled"))})},getInfo:function(){return{longname:"Fullscreen",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("fullscreen",tinymce.plugins.FullScreenPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/fullscreen/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..0efd9bb
--- /dev/null
@@ -0,0 +1,151 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var DOM = tinymce.DOM;\r
+\r
+       tinymce.create('tinymce.plugins.FullScreenPlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this, s = {}, vp;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceFullScreen', function() {\r
+                               var win, de = DOM.doc.documentElement;\r
+\r
+                               if (ed.getParam('fullscreen_is_enabled')) {\r
+                                       if (ed.getParam('fullscreen_new_window'))\r
+                                               closeFullscreen(); // Call to close in new window\r
+                                       else {\r
+                                               DOM.win.setTimeout(function() {\r
+                                                       tinymce.dom.Event.remove(DOM.win, 'resize', t.resizeFunc);\r
+                                                       tinyMCE.get(ed.getParam('fullscreen_editor_id')).setContent(ed.getContent({format : 'raw'}), {format : 'raw'});\r
+                                                       tinyMCE.remove(ed);\r
+                                                       DOM.remove('mce_fullscreen_container');\r
+                                                       de.style.overflow = ed.getParam('fullscreen_html_overflow');\r
+                                                       DOM.setStyle(DOM.doc.body, 'overflow', ed.getParam('fullscreen_overflow'));\r
+                                                       DOM.win.scrollTo(ed.getParam('fullscreen_scrollx'), ed.getParam('fullscreen_scrolly'));\r
+                                                       tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings\r
+                                               }, 10);\r
+                                       }\r
+\r
+                                       return;\r
+                               }\r
+\r
+                               if (ed.getParam('fullscreen_new_window')) {\r
+                                       win = DOM.win.open(url + "/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight);\r
+                                       try {\r
+                                               win.resizeTo(screen.availWidth, screen.availHeight);\r
+                                       } catch (e) {\r
+                                               // Ignore\r
+                                       }\r
+                               } else {\r
+                                       tinyMCE.oldSettings = tinyMCE.settings; // Store old settings\r
+                                       s.fullscreen_overflow = DOM.getStyle(DOM.doc.body, 'overflow', 1) || 'auto';\r
+                                       s.fullscreen_html_overflow = DOM.getStyle(de, 'overflow', 1);\r
+                                       vp = DOM.getViewPort();\r
+                                       s.fullscreen_scrollx = vp.x;\r
+                                       s.fullscreen_scrolly = vp.y;\r
+\r
+                                       // Fixes an Opera bug where the scrollbars doesn't reappear\r
+                                       if (tinymce.isOpera && s.fullscreen_overflow == 'visible')\r
+                                               s.fullscreen_overflow = 'auto';\r
+\r
+                                       // Fixes an IE bug where horizontal scrollbars would appear\r
+                                       if (tinymce.isIE && s.fullscreen_overflow == 'scroll')\r
+                                               s.fullscreen_overflow = 'auto';\r
+\r
+                                       // Fixes an IE bug where the scrollbars doesn't reappear\r
+                                       if (tinymce.isIE && (s.fullscreen_html_overflow == 'visible' || s.fullscreen_html_overflow == 'scroll'))\r
+                                               s.fullscreen_html_overflow = 'auto'; \r
+\r
+                                       if (s.fullscreen_overflow == '0px')\r
+                                               s.fullscreen_overflow = '';\r
+\r
+                                       DOM.setStyle(DOM.doc.body, 'overflow', 'hidden');\r
+                                       de.style.overflow = 'hidden'; //Fix for IE6/7\r
+                                       vp = DOM.getViewPort();\r
+                                       DOM.win.scrollTo(0, 0);\r
+\r
+                                       if (tinymce.isIE)\r
+                                               vp.h -= 1;\r
+\r
+                                       n = DOM.add(DOM.doc.body, 'div', {id : 'mce_fullscreen_container', style : 'position:' + (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel) ? 'absolute' : 'fixed') + ';top:0;left:0;width:' + vp.w + 'px;height:' + vp.h + 'px;z-index:200000;'});\r
+                                       DOM.add(n, 'div', {id : 'mce_fullscreen'});\r
+\r
+                                       tinymce.each(ed.settings, function(v, n) {\r
+                                               s[n] = v;\r
+                                       });\r
+\r
+                                       s.id = 'mce_fullscreen';\r
+                                       s.width = n.clientWidth;\r
+                                       s.height = n.clientHeight - 15;\r
+                                       s.fullscreen_is_enabled = true;\r
+                                       s.fullscreen_editor_id = ed.id;\r
+                                       s.theme_advanced_resizing = false;\r
+                                       s.save_onsavecallback = function() {\r
+                                               ed.setContent(tinyMCE.get(s.id).getContent({format : 'raw'}), {format : 'raw'});\r
+                                               ed.execCommand('mceSave');\r
+                                       };\r
+\r
+                                       tinymce.each(ed.getParam('fullscreen_settings'), function(v, k) {\r
+                                               s[k] = v;\r
+                                       });\r
+\r
+                                       if (s.theme_advanced_toolbar_location === 'external')\r
+                                               s.theme_advanced_toolbar_location = 'top';\r
+\r
+                                       t.fullscreenEditor = new tinymce.Editor('mce_fullscreen', s);\r
+                                       t.fullscreenEditor.onInit.add(function() {\r
+                                               t.fullscreenEditor.setContent(ed.getContent());\r
+                                               t.fullscreenEditor.focus();\r
+                                       });\r
+\r
+                                       t.fullscreenEditor.render();\r
+\r
+                                       t.fullscreenElement = new tinymce.dom.Element('mce_fullscreen_container');\r
+                                       t.fullscreenElement.update();\r
+                                       //document.body.overflow = 'hidden';\r
+\r
+                                       t.resizeFunc = tinymce.dom.Event.add(DOM.win, 'resize', function() {\r
+                                               var vp = tinymce.DOM.getViewPort(), fed = t.fullscreenEditor, outerSize, innerSize;\r
+\r
+                                               // Get outer/inner size to get a delta size that can be used to calc the new iframe size\r
+                                               outerSize = fed.dom.getSize(fed.getContainer().firstChild);\r
+                                               innerSize = fed.dom.getSize(fed.getContainer().getElementsByTagName('iframe')[0]);\r
+\r
+                                               fed.theme.resizeTo(vp.w - outerSize.w + innerSize.w, vp.h - outerSize.h + innerSize.h);\r
+                                       });\r
+                               }\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'mceFullScreen'});\r
+\r
+                       ed.onNodeChange.add(function(ed, cm) {\r
+                               cm.setActive('fullscreen', ed.getParam('fullscreen_is_enabled'));\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Fullscreen',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/fullscreen',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('fullscreen', tinymce.plugins.FullScreenPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/fullscreen/fullscreen.htm b/plugins/TinyMCE/js/plugins/fullscreen/fullscreen.htm
new file mode 100644 (file)
index 0000000..4c4f27e
--- /dev/null
@@ -0,0 +1,109 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title></title>\r
+       <script type="text/javascript" src="../../tiny_mce.js"></script>\r
+       <script type="text/javascript">\r
+               function patchCallback(settings, key) {\r
+                       if (settings[key])\r
+                               settings[key] = "window.opener." + settings[key];\r
+               }\r
+\r
+               var settings = {}, paSe = window.opener.tinyMCE.activeEditor.settings, oeID = window.opener.tinyMCE.activeEditor.id;\r
+\r
+               // Clone array\r
+               for (var n in paSe)\r
+                       settings[n] = paSe[n];\r
+\r
+               // Override options for fullscreen\r
+               for (var n in paSe.fullscreen_settings)\r
+                       settings[n] = paSe.fullscreen_settings[n];\r
+\r
+               // Patch callbacks, make them point to window.opener\r
+               patchCallback(settings, 'urlconverter_callback');\r
+               patchCallback(settings, 'insertlink_callback');\r
+               patchCallback(settings, 'insertimage_callback');\r
+               patchCallback(settings, 'setupcontent_callback');\r
+               patchCallback(settings, 'save_callback');\r
+               patchCallback(settings, 'onchange_callback');\r
+               patchCallback(settings, 'init_instance_callback');\r
+               patchCallback(settings, 'file_browser_callback');\r
+               patchCallback(settings, 'cleanup_callback');\r
+               patchCallback(settings, 'execcommand_callback');\r
+               patchCallback(settings, 'oninit');\r
+\r
+               // Set options\r
+               delete settings.id;\r
+               settings['mode'] = 'exact';\r
+               settings['elements'] = 'fullscreenarea';\r
+               settings['add_unload_trigger'] = false;\r
+               settings['ask'] = false;\r
+               settings['document_base_url'] = window.opener.tinyMCE.activeEditor.documentBaseURI.getURI();\r
+               settings['fullscreen_is_enabled'] = true;\r
+               settings['fullscreen_editor_id'] = oeID;\r
+               settings['theme_advanced_resizing'] = false;\r
+               settings['strict_loading_mode'] = true;\r
+\r
+               settings.save_onsavecallback = function() {\r
+                       window.opener.tinyMCE.get(oeID).setContent(tinyMCE.get('fullscreenarea').getContent({format : 'raw'}), {format : 'raw'});\r
+                       window.opener.tinyMCE.get(oeID).execCommand('mceSave');\r
+                       window.close();\r
+               };\r
+\r
+               function unloadHandler(e) {\r
+                       moveContent();\r
+               }\r
+\r
+               function moveContent() {\r
+                       window.opener.tinyMCE.get(oeID).setContent(tinyMCE.activeEditor.getContent());\r
+               }\r
+\r
+               function closeFullscreen() {\r
+                       moveContent();\r
+                       window.close();\r
+               }\r
+\r
+               function doParentSubmit() {\r
+                       moveContent();\r
+\r
+                       if (window.opener.tinyMCE.selectedInstance.formElement.form)\r
+                               window.opener.tinyMCE.selectedInstance.formElement.form.submit();\r
+\r
+                       window.close();\r
+\r
+                       return false;\r
+               }\r
+\r
+               function render() {\r
+                       var e = document.getElementById('fullscreenarea'), vp, ed, ow, oh, dom = tinymce.DOM;\r
+\r
+                       e.value = window.opener.tinyMCE.get(oeID).getContent();\r
+\r
+                       vp = dom.getViewPort();\r
+                       settings.width = vp.w;\r
+                       settings.height = vp.h - 15;\r
+\r
+                       tinymce.dom.Event.add(window, 'resize', function() {\r
+                               var vp = dom.getViewPort();\r
+\r
+                               tinyMCE.activeEditor.theme.resizeTo(vp.w, vp.h);\r
+                       });\r
+\r
+                       tinyMCE.init(settings);\r
+               }\r
+\r
+               // Add onunload\r
+               tinymce.dom.Event.add(window, "beforeunload", unloadHandler);\r
+       </script>\r
+</head>\r
+<body style="margin:0;overflow:hidden;width:100%;height:100%" scrolling="no" scroll="no">\r
+<form onsubmit="doParentSubmit();">\r
+<textarea id="fullscreenarea" style="width:100%; height:100%"></textarea>\r
+</form>\r
+\r
+<script type="text/javascript">\r
+       render();\r
+</script>\r
+\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/iespell/editor_plugin.js b/plugins/TinyMCE/js/plugins/iespell/editor_plugin.js
new file mode 100644 (file)
index 0000000..e9cba10
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.IESpell",{init:function(a,b){var c=this,d;if(!tinymce.isIE){return}c.editor=a;a.addCommand("mceIESpell",function(){try{d=new ActiveXObject("ieSpell.ieSpellExtension");d.CheckDocumentNode(a.getDoc().documentElement)}catch(f){if(f.number==-2146827859){a.windowManager.confirm(a.getLang("iespell.download"),function(e){if(e){window.open("http://www.iespell.com/download.php","ieSpellDownload","")}})}else{a.windowManager.alert("Error Loading ieSpell: Exception "+f.number)}}});a.addButton("iespell",{title:"iespell.iespell_desc",cmd:"mceIESpell"})},getInfo:function(){return{longname:"IESpell (IE Only)",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("iespell",tinymce.plugins.IESpell)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/iespell/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/iespell/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..1b2bb98
--- /dev/null
@@ -0,0 +1,54 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.IESpell', {\r
+               init : function(ed, url) {\r
+                       var t = this, sp;\r
+\r
+                       if (!tinymce.isIE)\r
+                               return;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceIESpell', function() {\r
+                               try {\r
+                                       sp = new ActiveXObject("ieSpell.ieSpellExtension");\r
+                                       sp.CheckDocumentNode(ed.getDoc().documentElement);\r
+                               } catch (e) {\r
+                                       if (e.number == -2146827859) {\r
+                                               ed.windowManager.confirm(ed.getLang("iespell.download"), function(s) {\r
+                                                       if (s)\r
+                                                               window.open('http://www.iespell.com/download.php', 'ieSpellDownload', '');\r
+                                               });\r
+                                       } else\r
+                                               ed.windowManager.alert("Error Loading ieSpell: Exception " + e.number);\r
+                               }\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('iespell', {title : 'iespell.iespell_desc', cmd : 'mceIESpell'});\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'IESpell (IE Only)',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/iespell',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('iespell', tinymce.plugins.IESpell);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin.js b/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin.js
new file mode 100644 (file)
index 0000000..07ea477
--- /dev/null
@@ -0,0 +1 @@
+(function(){var d=tinymce.DOM,b=tinymce.dom.Element,a=tinymce.dom.Event,e=tinymce.each,c=tinymce.is;tinymce.create("tinymce.plugins.InlinePopups",{init:function(f,g){f.onBeforeRenderUI.add(function(){f.windowManager=new tinymce.InlineWindowManager(f);d.loadCSS(g+"/skins/"+(f.settings.inlinepopups_skin||"clearlooks2")+"/window.css")})},getInfo:function(){return{longname:"InlinePopups",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.create("tinymce.InlineWindowManager:tinymce.WindowManager",{InlineWindowManager:function(f){var g=this;g.parent(f);g.zIndex=300000;g.count=0;g.windows={}},open:function(r,j){var y=this,i,k="",q=y.editor,g=0,s=0,h,m,n,o,l,v,x;r=r||{};j=j||{};if(!r.inline){return y.parent(r,j)}if(!r.type){y.bookmark=q.selection.getBookmark(1)}i=d.uniqueId();h=d.getViewPort();r.width=parseInt(r.width||320);r.height=parseInt(r.height||240)+(tinymce.isIE?8:0);r.min_width=parseInt(r.min_width||150);r.min_height=parseInt(r.min_height||100);r.max_width=parseInt(r.max_width||2000);r.max_height=parseInt(r.max_height||2000);r.left=r.left||Math.round(Math.max(h.x,h.x+(h.w/2)-(r.width/2)));r.top=r.top||Math.round(Math.max(h.y,h.y+(h.h/2)-(r.height/2)));r.movable=r.resizable=true;j.mce_width=r.width;j.mce_height=r.height;j.mce_inline=true;j.mce_window_id=i;j.mce_auto_focus=r.auto_focus;y.features=r;y.params=j;y.onOpen.dispatch(y,r,j);if(r.type){k+=" mceModal";if(r.type){k+=" mce"+r.type.substring(0,1).toUpperCase()+r.type.substring(1)}r.resizable=false}if(r.statusbar){k+=" mceStatusbar"}if(r.resizable){k+=" mceResizable"}if(r.minimizable){k+=" mceMinimizable"}if(r.maximizable){k+=" mceMaximizable"}if(r.movable){k+=" mceMovable"}y._addAll(d.doc.body,["div",{id:i,"class":q.settings.inlinepopups_skin||"clearlooks2",style:"width:100px;height:100px"},["div",{id:i+"_wrapper","class":"mceWrapper"+k},["div",{id:i+"_top","class":"mceTop"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_title"},r.title||""]],["div",{id:i+"_middle","class":"mceMiddle"},["div",{id:i+"_left","class":"mceLeft"}],["span",{id:i+"_content"}],["div",{id:i+"_right","class":"mceRight"}]],["div",{id:i+"_bottom","class":"mceBottom"},["div",{"class":"mceLeft"}],["div",{"class":"mceCenter"}],["div",{"class":"mceRight"}],["span",{id:i+"_status"},"Content"]],["a",{"class":"mceMove",tabindex:"-1",href:"javascript:;"}],["a",{"class":"mceMin",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMax",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceMed",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{"class":"mceClose",tabindex:"-1",href:"javascript:;",onmousedown:"return false;"}],["a",{id:i+"_resize_n","class":"mceResize mceResizeN",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_s","class":"mceResize mceResizeS",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_w","class":"mceResize mceResizeW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_e","class":"mceResize mceResizeE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_nw","class":"mceResize mceResizeNW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_ne","class":"mceResize mceResizeNE",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_sw","class":"mceResize mceResizeSW",tabindex:"-1",href:"javascript:;"}],["a",{id:i+"_resize_se","class":"mceResize mceResizeSE",tabindex:"-1",href:"javascript:;"}]]]);d.setStyles(i,{top:-10000,left:-10000});if(tinymce.isGecko){d.setStyle(i,"overflow","auto")}if(!r.type){g+=d.get(i+"_left").clientWidth;g+=d.get(i+"_right").clientWidth;s+=d.get(i+"_top").clientHeight;s+=d.get(i+"_bottom").clientHeight}d.setStyles(i,{top:r.top,left:r.left,width:r.width+g,height:r.height+s});x=r.url||r.file;if(x){if(tinymce.relaxedDomain){x+=(x.indexOf("?")==-1?"?":"&")+"mce_rdomain="+tinymce.relaxedDomain}x=tinymce._addVer(x)}if(!r.type){d.add(i+"_content","iframe",{id:i+"_ifr",src:'javascript:""',frameBorder:0,style:"border:0;width:10px;height:10px"});d.setStyles(i+"_ifr",{width:r.width,height:r.height});d.setAttrib(i+"_ifr","src",x)}else{d.add(i+"_wrapper","a",{id:i+"_ok","class":"mceButton mceOk",href:"javascript:;",onmousedown:"return false;"},"Ok");if(r.type=="confirm"){d.add(i+"_wrapper","a",{"class":"mceButton mceCancel",href:"javascript:;",onmousedown:"return false;"},"Cancel")}d.add(i+"_middle","div",{"class":"mceIcon"});d.setHTML(i+"_content",r.content.replace("\n","<br />"))}n=a.add(i,"mousedown",function(t){var u=t.target,f,p;f=y.windows[i];y.focus(i);if(u.nodeName=="A"||u.nodeName=="a"){if(u.className=="mceMax"){f.oldPos=f.element.getXY();f.oldSize=f.element.getSize();p=d.getViewPort();p.w-=2;p.h-=2;f.element.moveTo(p.x,p.y);f.element.resizeTo(p.w,p.h);d.setStyles(i+"_ifr",{width:p.w-f.deltaWidth,height:p.h-f.deltaHeight});d.addClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMed"){f.element.moveTo(f.oldPos.x,f.oldPos.y);f.element.resizeTo(f.oldSize.w,f.oldSize.h);f.iframeElement.resizeTo(f.oldSize.w-f.deltaWidth,f.oldSize.h-f.deltaHeight);d.removeClass(i+"_wrapper","mceMaximized")}else{if(u.className=="mceMove"){return y._startDrag(i,t,u.className)}else{if(d.hasClass(u,"mceResize")){return y._startDrag(i,t,u.className.substring(13))}}}}}});o=a.add(i,"click",function(f){var p=f.target;y.focus(i);if(p.nodeName=="A"||p.nodeName=="a"){switch(p.className){case"mceClose":y.close(null,i);return a.cancel(f);case"mceButton mceOk":case"mceButton mceCancel":r.button_func(p.className=="mceButton mceOk");return a.cancel(f)}}});v=y.windows[i]={id:i,mousedown_func:n,click_func:o,element:new b(i,{blocker:1,container:q.getContainer()}),iframeElement:new b(i+"_ifr"),features:r,deltaWidth:g,deltaHeight:s};v.iframeElement.on("focus",function(){y.focus(i)});if(y.count==0&&y.editor.getParam("dialog_type","modal")=="modal"){d.add(d.doc.body,"div",{id:"mceModalBlocker","class":(y.editor.settings.inlinepopups_skin||"clearlooks2")+"_modalBlocker",style:{zIndex:y.zIndex-1}});d.show("mceModalBlocker")}else{d.setStyle("mceModalBlocker","z-index",y.zIndex-1)}if(tinymce.isIE6||/Firefox\/2\./.test(navigator.userAgent)||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceModalBlocker",{position:"absolute",left:h.x,top:h.y,width:h.w-2,height:h.h-2})}y.focus(i);y._fixIELayout(i,1);if(d.get(i+"_ok")){d.get(i+"_ok").focus()}y.count++;return v},focus:function(h){var g=this,f;if(f=g.windows[h]){f.zIndex=this.zIndex++;f.element.setStyle("zIndex",f.zIndex);f.element.update();h=h+"_wrapper";d.removeClass(g.lastId,"mceFocus");d.addClass(h,"mceFocus");g.lastId=h}},_addAll:function(k,h){var g,l,f=this,j=tinymce.DOM;if(c(h,"string")){k.appendChild(j.doc.createTextNode(h))}else{if(h.length){k=k.appendChild(j.create(h[0],h[1]));for(g=2;g<h.length;g++){f._addAll(k,h[g])}}}},_startDrag:function(v,G,E){var o=this,u,z,C=d.doc,f,l=o.windows[v],h=l.element,y=h.getXY(),x,q,F,g,A,s,r,j,i,m,k,n,B;g={x:0,y:0};A=d.getViewPort();A.w-=2;A.h-=2;j=G.screenX;i=G.screenY;m=k=n=B=0;u=a.add(C,"mouseup",function(p){a.remove(C,"mouseup",u);a.remove(C,"mousemove",z);if(f){f.remove()}h.moveBy(m,k);h.resizeBy(n,B);q=h.getSize();d.setStyles(v+"_ifr",{width:q.w-l.deltaWidth,height:q.h-l.deltaHeight});o._fixIELayout(v,1);return a.cancel(p)});if(E!="Move"){D()}function D(){if(f){return}o._fixIELayout(v,0);d.add(C.body,"div",{id:"mceEventBlocker","class":"mceEventBlocker "+(o.editor.settings.inlinepopups_skin||"clearlooks2"),style:{zIndex:o.zIndex+1}});if(tinymce.isIE6||(tinymce.isIE&&!d.boxModel)){d.setStyles("mceEventBlocker",{position:"absolute",left:A.x,top:A.y,width:A.w-2,height:A.h-2})}f=new b("mceEventBlocker");f.update();x=h.getXY();q=h.getSize();s=g.x+x.x-A.x;r=g.y+x.y-A.y;d.add(f.get(),"div",{id:"mcePlaceHolder","class":"mcePlaceHolder",style:{left:s,top:r,width:q.w,height:q.h}});F=new b("mcePlaceHolder")}z=a.add(C,"mousemove",function(w){var p,H,t;D();p=w.screenX-j;H=w.screenY-i;switch(E){case"ResizeW":m=p;n=0-p;break;case"ResizeE":n=p;break;case"ResizeN":case"ResizeNW":case"ResizeNE":if(E=="ResizeNW"){m=p;n=0-p}else{if(E=="ResizeNE"){n=p}}k=H;B=0-H;break;case"ResizeS":case"ResizeSW":case"ResizeSE":if(E=="ResizeSW"){m=p;n=0-p}else{if(E=="ResizeSE"){n=p}}B=H;break;case"mceMove":m=p;k=H;break}if(n<(t=l.features.min_width-q.w)){if(m!==0){m+=n-t}n=t}if(B<(t=l.features.min_height-q.h)){if(k!==0){k+=B-t}B=t}n=Math.min(n,l.features.max_width-q.w);B=Math.min(B,l.features.max_height-q.h);m=Math.max(m,A.x-(s+A.x));k=Math.max(k,A.y-(r+A.y));m=Math.min(m,(A.w+A.x)-(s+q.w+A.x));k=Math.min(k,(A.h+A.y)-(r+q.h+A.y));if(m+k!==0){if(s+m<0){m=0}if(r+k<0){k=0}F.moveTo(s+m,r+k)}if(n+B!==0){F.resizeTo(q.w+n,q.h+B)}return a.cancel(w)});return a.cancel(G)},resizeBy:function(g,h,i){var f=this.windows[i];if(f){f.element.resizeBy(g,h);f.iframeElement.resizeBy(g,h)}},close:function(j,l){var h=this,g,k=d.doc,f=0,i,l;l=h._findId(l||j);if(!h.windows[l]){h.parent(j);return}h.count--;if(h.count==0){d.remove("mceModalBlocker")}if(g=h.windows[l]){h.onClose.dispatch(h);a.remove(k,"mousedown",g.mousedownFunc);a.remove(k,"click",g.clickFunc);a.clear(l);a.clear(l+"_ifr");d.setAttrib(l+"_ifr","src",'javascript:""');g.element.remove();delete h.windows[l];e(h.windows,function(m){if(m.zIndex>f){i=m;f=m.zIndex}});if(i){h.focus(i.id)}}},setTitle:function(f,g){var h;f=this._findId(f);if(h=d.get(f+"_title")){h.innerHTML=d.encode(g)}},alert:function(g,f,j){var i=this,h;h=i.open({title:i,type:"alert",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},confirm:function(g,f,j){var i=this,h;h=i.open({title:i,type:"confirm",button_func:function(k){if(f){f.call(k||i,k)}i.close(null,h.id)},content:d.encode(i.editor.getLang(g,g)),inline:1,width:400,height:130})},_findId:function(f){var g=this;if(typeof(f)=="string"){return f}e(g.windows,function(h){var i=d.get(h.id+"_ifr");if(i&&f==i.contentWindow){f=h.id;return false}});return f},_fixIELayout:function(i,h){var f,g;if(!tinymce.isIE6){return}e(["n","s","w","e","nw","ne","sw","se"],function(j){var k=d.get(i+"_resize_"+j);d.setStyles(k,{width:h?k.clientWidth:"",height:h?k.clientHeight:"",cursor:d.getStyle(k,"cursor",1)});d.setStyle(i+"_bottom","bottom","-1px");k=0});if(f=this.windows[i]){f.element.hide();f.element.show();e(d.select("div,a",i),function(k,j){if(k.currentStyle.backgroundImage!="none"){g=new Image();g.src=k.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/,"$1")}});d.get(i).style.filter=""}}});tinymce.PluginManager.add("inlinepopups",tinymce.plugins.InlinePopups)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/inlinepopups/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..e991683
--- /dev/null
@@ -0,0 +1,635 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var DOM = tinymce.DOM, Element = tinymce.dom.Element, Event = tinymce.dom.Event, each = tinymce.each, is = tinymce.is;\r
+\r
+       tinymce.create('tinymce.plugins.InlinePopups', {\r
+               init : function(ed, url) {\r
+                       // Replace window manager\r
+                       ed.onBeforeRenderUI.add(function() {\r
+                               ed.windowManager = new tinymce.InlineWindowManager(ed);\r
+                               DOM.loadCSS(url + '/skins/' + (ed.settings.inlinepopups_skin || 'clearlooks2') + "/window.css");\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'InlinePopups',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       tinymce.create('tinymce.InlineWindowManager:tinymce.WindowManager', {\r
+               InlineWindowManager : function(ed) {\r
+                       var t = this;\r
+\r
+                       t.parent(ed);\r
+                       t.zIndex = 300000;\r
+                       t.count = 0;\r
+                       t.windows = {};\r
+               },\r
+\r
+               open : function(f, p) {\r
+                       var t = this, id, opt = '', ed = t.editor, dw = 0, dh = 0, vp, po, mdf, clf, we, w, u;\r
+\r
+                       f = f || {};\r
+                       p = p || {};\r
+\r
+                       // Run native windows\r
+                       if (!f.inline)\r
+                               return t.parent(f, p);\r
+\r
+                       // Only store selection if the type is a normal window\r
+                       if (!f.type)\r
+                               t.bookmark = ed.selection.getBookmark(1);\r
+\r
+                       id = DOM.uniqueId();\r
+                       vp = DOM.getViewPort();\r
+                       f.width = parseInt(f.width || 320);\r
+                       f.height = parseInt(f.height || 240) + (tinymce.isIE ? 8 : 0);\r
+                       f.min_width = parseInt(f.min_width || 150);\r
+                       f.min_height = parseInt(f.min_height || 100);\r
+                       f.max_width = parseInt(f.max_width || 2000);\r
+                       f.max_height = parseInt(f.max_height || 2000);\r
+                       f.left = f.left || Math.round(Math.max(vp.x, vp.x + (vp.w / 2.0) - (f.width / 2.0)));\r
+                       f.top = f.top || Math.round(Math.max(vp.y, vp.y + (vp.h / 2.0) - (f.height / 2.0)));\r
+                       f.movable = f.resizable = true;\r
+                       p.mce_width = f.width;\r
+                       p.mce_height = f.height;\r
+                       p.mce_inline = true;\r
+                       p.mce_window_id = id;\r
+                       p.mce_auto_focus = f.auto_focus;\r
+\r
+                       // Transpose\r
+//                     po = DOM.getPos(ed.getContainer());\r
+//                     f.left -= po.x;\r
+//                     f.top -= po.y;\r
+\r
+                       t.features = f;\r
+                       t.params = p;\r
+                       t.onOpen.dispatch(t, f, p);\r
+\r
+                       if (f.type) {\r
+                               opt += ' mceModal';\r
+\r
+                               if (f.type)\r
+                                       opt += ' mce' + f.type.substring(0, 1).toUpperCase() + f.type.substring(1);\r
+\r
+                               f.resizable = false;\r
+                       }\r
+\r
+                       if (f.statusbar)\r
+                               opt += ' mceStatusbar';\r
+\r
+                       if (f.resizable)\r
+                               opt += ' mceResizable';\r
+\r
+                       if (f.minimizable)\r
+                               opt += ' mceMinimizable';\r
+\r
+                       if (f.maximizable)\r
+                               opt += ' mceMaximizable';\r
+\r
+                       if (f.movable)\r
+                               opt += ' mceMovable';\r
+\r
+                       // Create DOM objects\r
+                       t._addAll(DOM.doc.body, \r
+                               ['div', {id : id, 'class' : ed.settings.inlinepopups_skin || 'clearlooks2', style : 'width:100px;height:100px'}, \r
+                                       ['div', {id : id + '_wrapper', 'class' : 'mceWrapper' + opt},\r
+                                               ['div', {id : id + '_top', 'class' : 'mceTop'}, \r
+                                                       ['div', {'class' : 'mceLeft'}],\r
+                                                       ['div', {'class' : 'mceCenter'}],\r
+                                                       ['div', {'class' : 'mceRight'}],\r
+                                                       ['span', {id : id + '_title'}, f.title || '']\r
+                                               ],\r
+\r
+                                               ['div', {id : id + '_middle', 'class' : 'mceMiddle'}, \r
+                                                       ['div', {id : id + '_left', 'class' : 'mceLeft'}],\r
+                                                       ['span', {id : id + '_content'}],\r
+                                                       ['div', {id : id + '_right', 'class' : 'mceRight'}]\r
+                                               ],\r
+\r
+                                               ['div', {id : id + '_bottom', 'class' : 'mceBottom'},\r
+                                                       ['div', {'class' : 'mceLeft'}],\r
+                                                       ['div', {'class' : 'mceCenter'}],\r
+                                                       ['div', {'class' : 'mceRight'}],\r
+                                                       ['span', {id : id + '_status'}, 'Content']\r
+                                               ],\r
+\r
+                                               ['a', {'class' : 'mceMove', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {'class' : 'mceMin', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
+                                               ['a', {'class' : 'mceMax', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
+                                               ['a', {'class' : 'mceMed', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
+                                               ['a', {'class' : 'mceClose', tabindex : '-1', href : 'javascript:;', onmousedown : 'return false;'}],\r
+                                               ['a', {id : id + '_resize_n', 'class' : 'mceResize mceResizeN', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_s', 'class' : 'mceResize mceResizeS', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_w', 'class' : 'mceResize mceResizeW', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_e', 'class' : 'mceResize mceResizeE', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_nw', 'class' : 'mceResize mceResizeNW', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_ne', 'class' : 'mceResize mceResizeNE', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_sw', 'class' : 'mceResize mceResizeSW', tabindex : '-1', href : 'javascript:;'}],\r
+                                               ['a', {id : id + '_resize_se', 'class' : 'mceResize mceResizeSE', tabindex : '-1', href : 'javascript:;'}]\r
+                                       ]\r
+                               ]\r
+                       );\r
+\r
+                       DOM.setStyles(id, {top : -10000, left : -10000});\r
+\r
+                       // Fix gecko rendering bug, where the editors iframe messed with window contents\r
+                       if (tinymce.isGecko)\r
+                               DOM.setStyle(id, 'overflow', 'auto');\r
+\r
+                       // Measure borders\r
+                       if (!f.type) {\r
+                               dw += DOM.get(id + '_left').clientWidth;\r
+                               dw += DOM.get(id + '_right').clientWidth;\r
+                               dh += DOM.get(id + '_top').clientHeight;\r
+                               dh += DOM.get(id + '_bottom').clientHeight;\r
+                       }\r
+\r
+                       // Resize window\r
+                       DOM.setStyles(id, {top : f.top, left : f.left, width : f.width + dw, height : f.height + dh});\r
+\r
+                       u = f.url || f.file;\r
+                       if (u) {\r
+                               if (tinymce.relaxedDomain)\r
+                                       u += (u.indexOf('?') == -1 ? '?' : '&') + 'mce_rdomain=' + tinymce.relaxedDomain;\r
+\r
+                               u = tinymce._addVer(u);\r
+                       }\r
+\r
+                       if (!f.type) {\r
+                               DOM.add(id + '_content', 'iframe', {id : id + '_ifr', src : 'javascript:""', frameBorder : 0, style : 'border:0;width:10px;height:10px'});\r
+                               DOM.setStyles(id + '_ifr', {width : f.width, height : f.height});\r
+                               DOM.setAttrib(id + '_ifr', 'src', u);\r
+                       } else {\r
+                               DOM.add(id + '_wrapper', 'a', {id : id + '_ok', 'class' : 'mceButton mceOk', href : 'javascript:;', onmousedown : 'return false;'}, 'Ok');\r
+\r
+                               if (f.type == 'confirm')\r
+                                       DOM.add(id + '_wrapper', 'a', {'class' : 'mceButton mceCancel', href : 'javascript:;', onmousedown : 'return false;'}, 'Cancel');\r
+\r
+                               DOM.add(id + '_middle', 'div', {'class' : 'mceIcon'});\r
+                               DOM.setHTML(id + '_content', f.content.replace('\n', '<br />'));\r
+                       }\r
+\r
+                       // Register events\r
+                       mdf = Event.add(id, 'mousedown', function(e) {\r
+                               var n = e.target, w, vp;\r
+\r
+                               w = t.windows[id];\r
+                               t.focus(id);\r
+\r
+                               if (n.nodeName == 'A' || n.nodeName == 'a') {\r
+                                       if (n.className == 'mceMax') {\r
+                                               w.oldPos = w.element.getXY();\r
+                                               w.oldSize = w.element.getSize();\r
+\r
+                                               vp = DOM.getViewPort();\r
+\r
+                                               // Reduce viewport size to avoid scrollbars\r
+                                               vp.w -= 2;\r
+                                               vp.h -= 2;\r
+\r
+                                               w.element.moveTo(vp.x, vp.y);\r
+                                               w.element.resizeTo(vp.w, vp.h);\r
+                                               DOM.setStyles(id + '_ifr', {width : vp.w - w.deltaWidth, height : vp.h - w.deltaHeight});\r
+                                               DOM.addClass(id + '_wrapper', 'mceMaximized');\r
+                                       } else if (n.className == 'mceMed') {\r
+                                               // Reset to old size\r
+                                               w.element.moveTo(w.oldPos.x, w.oldPos.y);\r
+                                               w.element.resizeTo(w.oldSize.w, w.oldSize.h);\r
+                                               w.iframeElement.resizeTo(w.oldSize.w - w.deltaWidth, w.oldSize.h - w.deltaHeight);\r
+\r
+                                               DOM.removeClass(id + '_wrapper', 'mceMaximized');\r
+                                       } else if (n.className == 'mceMove')\r
+                                               return t._startDrag(id, e, n.className);\r
+                                       else if (DOM.hasClass(n, 'mceResize'))\r
+                                               return t._startDrag(id, e, n.className.substring(13));\r
+                               }\r
+                       });\r
+\r
+                       clf = Event.add(id, 'click', function(e) {\r
+                               var n = e.target;\r
+\r
+                               t.focus(id);\r
+\r
+                               if (n.nodeName == 'A' || n.nodeName == 'a') {\r
+                                       switch (n.className) {\r
+                                               case 'mceClose':\r
+                                                       t.close(null, id);\r
+                                                       return Event.cancel(e);\r
+\r
+                                               case 'mceButton mceOk':\r
+                                               case 'mceButton mceCancel':\r
+                                                       f.button_func(n.className == 'mceButton mceOk');\r
+                                                       return Event.cancel(e);\r
+                                       }\r
+                               }\r
+                       });\r
+\r
+                       // Add window\r
+                       w = t.windows[id] = {\r
+                               id : id,\r
+                               mousedown_func : mdf,\r
+                               click_func : clf,\r
+                               element : new Element(id, {blocker : 1, container : ed.getContainer()}),\r
+                               iframeElement : new Element(id + '_ifr'),\r
+                               features : f,\r
+                               deltaWidth : dw,\r
+                               deltaHeight : dh\r
+                       };\r
+\r
+                       w.iframeElement.on('focus', function() {\r
+                               t.focus(id);\r
+                       });\r
+\r
+                       // Setup blocker\r
+                       if (t.count == 0 && t.editor.getParam('dialog_type', 'modal') == 'modal') {\r
+                               DOM.add(DOM.doc.body, 'div', {\r
+                                       id : 'mceModalBlocker',\r
+                                       'class' : (t.editor.settings.inlinepopups_skin || 'clearlooks2') + '_modalBlocker',\r
+                                       style : {zIndex : t.zIndex - 1}\r
+                               });\r
+\r
+                               DOM.show('mceModalBlocker'); // Reduces flicker in IE\r
+                       } else\r
+                               DOM.setStyle('mceModalBlocker', 'z-index', t.zIndex - 1);\r
+\r
+                       if (tinymce.isIE6 || /Firefox\/2\./.test(navigator.userAgent) || (tinymce.isIE && !DOM.boxModel))\r
+                               DOM.setStyles('mceModalBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});\r
+\r
+                       t.focus(id);\r
+                       t._fixIELayout(id, 1);\r
+\r
+                       // Focus ok button\r
+                       if (DOM.get(id + '_ok'))\r
+                               DOM.get(id + '_ok').focus();\r
+\r
+                       t.count++;\r
+\r
+                       return w;\r
+               },\r
+\r
+               focus : function(id) {\r
+                       var t = this, w;\r
+\r
+                       if (w = t.windows[id]) {\r
+                               w.zIndex = this.zIndex++;\r
+                               w.element.setStyle('zIndex', w.zIndex);\r
+                               w.element.update();\r
+\r
+                               id = id + '_wrapper';\r
+                               DOM.removeClass(t.lastId, 'mceFocus');\r
+                               DOM.addClass(id, 'mceFocus');\r
+                               t.lastId = id;\r
+                       }\r
+               },\r
+\r
+               _addAll : function(te, ne) {\r
+                       var i, n, t = this, dom = tinymce.DOM;\r
+\r
+                       if (is(ne, 'string'))\r
+                               te.appendChild(dom.doc.createTextNode(ne));\r
+                       else if (ne.length) {\r
+                               te = te.appendChild(dom.create(ne[0], ne[1]));\r
+\r
+                               for (i=2; i<ne.length; i++)\r
+                                       t._addAll(te, ne[i]);\r
+                       }\r
+               },\r
+\r
+               _startDrag : function(id, se, ac) {\r
+                       var t = this, mu, mm, d = DOM.doc, eb, w = t.windows[id], we = w.element, sp = we.getXY(), p, sz, ph, cp, vp, sx, sy, sex, sey, dx, dy, dw, dh;\r
+\r
+                       // Get positons and sizes\r
+//                     cp = DOM.getPos(t.editor.getContainer());\r
+                       cp = {x : 0, y : 0};\r
+                       vp = DOM.getViewPort();\r
+\r
+                       // Reduce viewport size to avoid scrollbars while dragging\r
+                       vp.w -= 2;\r
+                       vp.h -= 2;\r
+\r
+                       sex = se.screenX;\r
+                       sey = se.screenY;\r
+                       dx = dy = dw = dh = 0;\r
+\r
+                       // Handle mouse up\r
+                       mu = Event.add(d, 'mouseup', function(e) {\r
+                               Event.remove(d, 'mouseup', mu);\r
+                               Event.remove(d, 'mousemove', mm);\r
+\r
+                               if (eb)\r
+                                       eb.remove();\r
+\r
+                               we.moveBy(dx, dy);\r
+                               we.resizeBy(dw, dh);\r
+                               sz = we.getSize();\r
+                               DOM.setStyles(id + '_ifr', {width : sz.w - w.deltaWidth, height : sz.h - w.deltaHeight});\r
+                               t._fixIELayout(id, 1);\r
+\r
+                               return Event.cancel(e);\r
+                       });\r
+\r
+                       if (ac != 'Move')\r
+                               startMove();\r
+\r
+                       function startMove() {\r
+                               if (eb)\r
+                                       return;\r
+\r
+                               t._fixIELayout(id, 0);\r
+\r
+                               // Setup event blocker\r
+                               DOM.add(d.body, 'div', {\r
+                                       id : 'mceEventBlocker',\r
+                                       'class' : 'mceEventBlocker ' + (t.editor.settings.inlinepopups_skin || 'clearlooks2'),\r
+                                       style : {zIndex : t.zIndex + 1}\r
+                               });\r
+\r
+                               if (tinymce.isIE6 || (tinymce.isIE && !DOM.boxModel))\r
+                                       DOM.setStyles('mceEventBlocker', {position : 'absolute', left : vp.x, top : vp.y, width : vp.w - 2, height : vp.h - 2});\r
+\r
+                               eb = new Element('mceEventBlocker');\r
+                               eb.update();\r
+\r
+                               // Setup placeholder\r
+                               p = we.getXY();\r
+                               sz = we.getSize();\r
+                               sx = cp.x + p.x - vp.x;\r
+                               sy = cp.y + p.y - vp.y;\r
+                               DOM.add(eb.get(), 'div', {id : 'mcePlaceHolder', 'class' : 'mcePlaceHolder', style : {left : sx, top : sy, width : sz.w, height : sz.h}});\r
+                               ph = new Element('mcePlaceHolder');\r
+                       };\r
+\r
+                       // Handle mouse move/drag\r
+                       mm = Event.add(d, 'mousemove', function(e) {\r
+                               var x, y, v;\r
+\r
+                               startMove();\r
+\r
+                               x = e.screenX - sex;\r
+                               y = e.screenY - sey;\r
+\r
+                               switch (ac) {\r
+                                       case 'ResizeW':\r
+                                               dx = x;\r
+                                               dw = 0 - x;\r
+                                               break;\r
+\r
+                                       case 'ResizeE':\r
+                                               dw = x;\r
+                                               break;\r
+\r
+                                       case 'ResizeN':\r
+                                       case 'ResizeNW':\r
+                                       case 'ResizeNE':\r
+                                               if (ac == "ResizeNW") {\r
+                                                       dx = x;\r
+                                                       dw = 0 - x;\r
+                                               } else if (ac == "ResizeNE")\r
+                                                       dw = x;\r
+\r
+                                               dy = y;\r
+                                               dh = 0 - y;\r
+                                               break;\r
+\r
+                                       case 'ResizeS':\r
+                                       case 'ResizeSW':\r
+                                       case 'ResizeSE':\r
+                                               if (ac == "ResizeSW") {\r
+                                                       dx = x;\r
+                                                       dw = 0 - x;\r
+                                               } else if (ac == "ResizeSE")\r
+                                                       dw = x;\r
+\r
+                                               dh = y;\r
+                                               break;\r
+\r
+                                       case 'mceMove':\r
+                                               dx = x;\r
+                                               dy = y;\r
+                                               break;\r
+                               }\r
+\r
+                               // Boundary check\r
+                               if (dw < (v = w.features.min_width - sz.w)) {\r
+                                       if (dx !== 0)\r
+                                               dx += dw - v;\r
+\r
+                                       dw = v;\r
+                               }\r
+       \r
+                               if (dh < (v = w.features.min_height - sz.h)) {\r
+                                       if (dy !== 0)\r
+                                               dy += dh - v;\r
+\r
+                                       dh = v;\r
+                               }\r
+\r
+                               dw = Math.min(dw, w.features.max_width - sz.w);\r
+                               dh = Math.min(dh, w.features.max_height - sz.h);\r
+                               dx = Math.max(dx, vp.x - (sx + vp.x));\r
+                               dy = Math.max(dy, vp.y - (sy + vp.y));\r
+                               dx = Math.min(dx, (vp.w + vp.x) - (sx + sz.w + vp.x));\r
+                               dy = Math.min(dy, (vp.h + vp.y) - (sy + sz.h + vp.y));\r
+\r
+                               // Move if needed\r
+                               if (dx + dy !== 0) {\r
+                                       if (sx + dx < 0)\r
+                                               dx = 0;\r
+       \r
+                                       if (sy + dy < 0)\r
+                                               dy = 0;\r
+\r
+                                       ph.moveTo(sx + dx, sy + dy);\r
+                               }\r
+\r
+                               // Resize if needed\r
+                               if (dw + dh !== 0)\r
+                                       ph.resizeTo(sz.w + dw, sz.h + dh);\r
+\r
+                               return Event.cancel(e);\r
+                       });\r
+\r
+                       return Event.cancel(se);\r
+               },\r
+\r
+               resizeBy : function(dw, dh, id) {\r
+                       var w = this.windows[id];\r
+\r
+                       if (w) {\r
+                               w.element.resizeBy(dw, dh);\r
+                               w.iframeElement.resizeBy(dw, dh);\r
+                       }\r
+               },\r
+\r
+               close : function(win, id) {\r
+                       var t = this, w, d = DOM.doc, ix = 0, fw, id;\r
+\r
+                       id = t._findId(id || win);\r
+\r
+                       // Probably not inline\r
+                       if (!t.windows[id]) {\r
+                               t.parent(win);\r
+                               return;\r
+                       }\r
+\r
+                       t.count--;\r
+\r
+                       if (t.count == 0)\r
+                               DOM.remove('mceModalBlocker');\r
+\r
+                       if (w = t.windows[id]) {\r
+                               t.onClose.dispatch(t);\r
+                               Event.remove(d, 'mousedown', w.mousedownFunc);\r
+                               Event.remove(d, 'click', w.clickFunc);\r
+                               Event.clear(id);\r
+                               Event.clear(id + '_ifr');\r
+\r
+                               DOM.setAttrib(id + '_ifr', 'src', 'javascript:""'); // Prevent leak\r
+                               w.element.remove();\r
+                               delete t.windows[id];\r
+\r
+                               // Find front most window and focus that\r
+                               each (t.windows, function(w) {\r
+                                       if (w.zIndex > ix) {\r
+                                               fw = w;\r
+                                               ix = w.zIndex;\r
+                                       }\r
+                               });\r
+\r
+                               if (fw)\r
+                                       t.focus(fw.id);\r
+                       }\r
+               },\r
+\r
+               setTitle : function(w, ti) {\r
+                       var e;\r
+\r
+                       w = this._findId(w);\r
+\r
+                       if (e = DOM.get(w + '_title'))\r
+                               e.innerHTML = DOM.encode(ti);\r
+               },\r
+\r
+               alert : function(txt, cb, s) {\r
+                       var t = this, w;\r
+\r
+                       w = t.open({\r
+                               title : t,\r
+                               type : 'alert',\r
+                               button_func : function(s) {\r
+                                       if (cb)\r
+                                               cb.call(s || t, s);\r
+\r
+                                       t.close(null, w.id);\r
+                               },\r
+                               content : DOM.encode(t.editor.getLang(txt, txt)),\r
+                               inline : 1,\r
+                               width : 400,\r
+                               height : 130\r
+                       });\r
+               },\r
+\r
+               confirm : function(txt, cb, s) {\r
+                       var t = this, w;\r
+\r
+                       w = t.open({\r
+                               title : t,\r
+                               type : 'confirm',\r
+                               button_func : function(s) {\r
+                                       if (cb)\r
+                                               cb.call(s || t, s);\r
+\r
+                                       t.close(null, w.id);\r
+                               },\r
+                               content : DOM.encode(t.editor.getLang(txt, txt)),\r
+                               inline : 1,\r
+                               width : 400,\r
+                               height : 130\r
+                       });\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _findId : function(w) {\r
+                       var t = this;\r
+\r
+                       if (typeof(w) == 'string')\r
+                               return w;\r
+\r
+                       each(t.windows, function(wo) {\r
+                               var ifr = DOM.get(wo.id + '_ifr');\r
+\r
+                               if (ifr && w == ifr.contentWindow) {\r
+                                       w = wo.id;\r
+                                       return false;\r
+                               }\r
+                       });\r
+\r
+                       return w;\r
+               },\r
+\r
+               _fixIELayout : function(id, s) {\r
+                       var w, img;\r
+\r
+                       if (!tinymce.isIE6)\r
+                               return;\r
+\r
+                       // Fixes the bug where hover flickers and does odd things in IE6\r
+                       each(['n','s','w','e','nw','ne','sw','se'], function(v) {\r
+                               var e = DOM.get(id + '_resize_' + v);\r
+\r
+                               DOM.setStyles(e, {\r
+                                       width : s ? e.clientWidth : '',\r
+                                       height : s ? e.clientHeight : '',\r
+                                       cursor : DOM.getStyle(e, 'cursor', 1)\r
+                               });\r
+\r
+                               DOM.setStyle(id + "_bottom", 'bottom', '-1px');\r
+\r
+                               e = 0;\r
+                       });\r
+\r
+                       // Fixes graphics glitch\r
+                       if (w = this.windows[id]) {\r
+                               // Fixes rendering bug after resize\r
+                               w.element.hide();\r
+                               w.element.show();\r
+\r
+                               // Forced a repaint of the window\r
+                               //DOM.get(id).style.filter = '';\r
+\r
+                               // IE has a bug where images used in CSS won't get loaded\r
+                               // sometimes when the cache in the browser is disabled\r
+                               // This fix tries to solve it by loading the images using the image object\r
+                               each(DOM.select('div,a', id), function(e, i) {\r
+                                       if (e.currentStyle.backgroundImage != 'none') {\r
+                                               img = new Image();\r
+                                               img.src = e.currentStyle.backgroundImage.replace(/url\(\"(.+)\"\)/, '$1');\r
+                                       }\r
+                               });\r
+\r
+                               DOM.get(id).style.filter = '';\r
+                       }\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('inlinepopups', tinymce.plugins.InlinePopups);\r
+})();\r
+\r
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif
new file mode 100644 (file)
index 0000000..94abd08
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/alert.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif
new file mode 100644 (file)
index 0000000..e671094
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/button.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif
new file mode 100644 (file)
index 0000000..6baf64a
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/buttons.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif
new file mode 100644 (file)
index 0000000..497307a
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/confirm.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif
new file mode 100644 (file)
index 0000000..c894b2e
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/corners.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif
new file mode 100644 (file)
index 0000000..c2a2ad4
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/horizontal.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif
new file mode 100644 (file)
index 0000000..43a735f
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/img/vertical.gif differ
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/window.css b/plugins/TinyMCE/js/plugins/inlinepopups/skins/clearlooks2/window.css
new file mode 100644 (file)
index 0000000..5e6fd7d
--- /dev/null
@@ -0,0 +1,90 @@
+/* Clearlooks 2 */
+
+/* Reset */
+.clearlooks2, .clearlooks2 div, .clearlooks2 span, .clearlooks2 a {vertical-align:baseline; text-align:left; position:absolute; border:0; padding:0; margin:0; background:transparent; font-family:Arial,Verdana; font-size:11px; color:#000; text-decoration:none; font-weight:normal; width:auto; height:auto; overflow:hidden; display:block}
+
+/* General */
+.clearlooks2 {position:absolute; direction:ltr}
+.clearlooks2 .mceWrapper {position:static}
+.mceEventBlocker {position:fixed; left:0; top:0; background:url(img/horizontal.gif) no-repeat 0 -75px; width:100%; height:100%}
+.clearlooks2 .mcePlaceHolder {border:1px solid #000; background:#888; top:0; left:0; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50)}
+.clearlooks2_modalBlocker {position:fixed; left:0; top:0; width:100%; height:100%; background:#FFF; opacity:0.6; -ms-filter:'alpha(opacity=60)'; filter:alpha(opacity=60); display:none}
+
+/* Top */
+.clearlooks2 .mceTop, .clearlooks2 .mceTop div {top:0; width:100%; height:23px}
+.clearlooks2 .mceTop .mceLeft {width:6px; background:url(img/corners.gif)}
+.clearlooks2 .mceTop .mceCenter {right:6px; width:100%; height:23px; background:url(img/horizontal.gif) 12px 0; clip:rect(auto auto auto 12px)}
+.clearlooks2 .mceTop .mceRight {right:0; width:6px; height:23px; background:url(img/corners.gif) -12px 0}
+.clearlooks2 .mceTop span {width:100%; text-align:center; vertical-align:middle; line-height:23px; font-weight:bold}
+.clearlooks2 .mceFocus .mceTop .mceLeft {background:url(img/corners.gif) -6px 0}
+.clearlooks2 .mceFocus .mceTop .mceCenter {background:url(img/horizontal.gif) 0 -23px}
+.clearlooks2 .mceFocus .mceTop .mceRight {background:url(img/corners.gif) -18px 0}
+.clearlooks2 .mceFocus .mceTop span {color:#FFF}
+
+/* Middle */
+.clearlooks2 .mceMiddle, .clearlooks2 .mceMiddle div {top:0}
+.clearlooks2 .mceMiddle {width:100%; height:100%; clip:rect(23px auto auto auto)}
+.clearlooks2 .mceMiddle .mceLeft {left:0; width:5px; height:100%; background:url(img/vertical.gif) -5px 0}
+.clearlooks2 .mceMiddle span {top:23px; left:5px; width:100%; height:100%; background:#FFF}
+.clearlooks2 .mceMiddle .mceRight {right:0; width:5px; height:100%; background:url(img/vertical.gif)}
+
+/* Bottom */
+.clearlooks2 .mceBottom, .clearlooks2 .mceBottom div {height:6px}
+.clearlooks2 .mceBottom {left:0; bottom:0; width:100%}
+.clearlooks2 .mceBottom div {top:0}
+.clearlooks2 .mceBottom .mceLeft {left:0; width:5px; background:url(img/corners.gif) -34px -6px}
+.clearlooks2 .mceBottom .mceCenter {left:5px; width:100%; background:url(img/horizontal.gif) 0 -46px}
+.clearlooks2 .mceBottom .mceRight {right:0; width:5px; background: url(img/corners.gif) -34px 0}
+.clearlooks2 .mceBottom span {display:none}
+.clearlooks2 .mceStatusbar .mceBottom, .clearlooks2 .mceStatusbar .mceBottom div {height:23px}
+.clearlooks2 .mceStatusbar .mceBottom .mceLeft {background:url(img/corners.gif) -29px 0}
+.clearlooks2 .mceStatusbar .mceBottom .mceCenter {background:url(img/horizontal.gif) 0 -52px}
+.clearlooks2 .mceStatusbar .mceBottom .mceRight {background:url(img/corners.gif) -24px 0}
+.clearlooks2 .mceStatusbar .mceBottom span {display:block; left:7px; font-family:Arial, Verdana; font-size:11px; line-height:23px}
+
+/* Actions */
+.clearlooks2 a {width:29px; height:16px; top:3px;}
+.clearlooks2 .mceClose {right:6px; background:url(img/buttons.gif) -87px 0}
+.clearlooks2 .mceMin {display:none; right:68px; background:url(img/buttons.gif) 0 0}
+.clearlooks2 .mceMed {display:none; right:37px; background:url(img/buttons.gif) -29px 0}
+.clearlooks2 .mceMax {display:none; right:37px; background:url(img/buttons.gif) -58px 0}
+.clearlooks2 .mceMove {display:none;width:100%;cursor:move;background:url(img/corners.gif) no-repeat -100px -100px}
+.clearlooks2 .mceMovable .mceMove {display:block}
+.clearlooks2 .mceFocus .mceClose {right:6px; background:url(img/buttons.gif) -87px -16px}
+.clearlooks2 .mceFocus .mceMin {right:68px; background:url(img/buttons.gif) 0 -16px}
+.clearlooks2 .mceFocus .mceMed {right:37px; background:url(img/buttons.gif) -29px -16px}
+.clearlooks2 .mceFocus .mceMax {right:37px; background:url(img/buttons.gif) -58px -16px}
+.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
+.clearlooks2 .mceFocus .mceClose:hover {right:6px; background:url(img/buttons.gif) -87px -32px}
+.clearlooks2 .mceFocus .mceMin:hover {right:68px; background:url(img/buttons.gif) 0 -32px}
+.clearlooks2 .mceFocus .mceMed:hover {right:37px; background:url(img/buttons.gif) -29px -32px}
+.clearlooks2 .mceFocus .mceMax:hover {right:37px; background:url(img/buttons.gif) -58px -32px}
+
+/* Resize */
+.clearlooks2 .mceResize {top:auto; left:auto; display:none; width:5px; height:5px; background:url(img/horizontal.gif) no-repeat 0 -75px}
+.clearlooks2 .mceResizable .mceResize {display:block}
+.clearlooks2 .mceResizable .mceMin, .clearlooks2 .mceMax {display:none}
+.clearlooks2 .mceMinimizable .mceMin {display:block}
+.clearlooks2 .mceMaximizable .mceMax {display:block}
+.clearlooks2 .mceMaximized .mceMed {display:block}
+.clearlooks2 .mceMaximized .mceMax {display:none}
+.clearlooks2 a.mceResizeN {top:0; left:0; width:100%; cursor:n-resize}
+.clearlooks2 a.mceResizeNW {top:0; left:0; cursor:nw-resize}
+.clearlooks2 a.mceResizeNE {top:0; right:0; cursor:ne-resize}
+.clearlooks2 a.mceResizeW {top:0; left:0; height:100%; cursor:w-resize;}
+.clearlooks2 a.mceResizeE {top:0; right:0; height:100%; cursor:e-resize}
+.clearlooks2 a.mceResizeS {bottom:0; left:0; width:100%; cursor:s-resize}
+.clearlooks2 a.mceResizeSW {bottom:0; left:0; cursor:sw-resize}
+.clearlooks2 a.mceResizeSE {bottom:0; right:0; cursor:se-resize}
+
+/* Alert/Confirm */
+.clearlooks2 .mceButton {font-weight:bold; bottom:10px; width:80px; height:30px; background:url(img/button.gif); line-height:30px; vertical-align:middle; text-align:center; outline:0}
+.clearlooks2 .mceMiddle .mceIcon {left:15px; top:35px; width:32px; height:32px}
+.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal}
+.clearlooks2 a:hover {font-weight:bold;}
+.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5}
+.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px}
+.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif)}
+.clearlooks2 .mceConfirm .mceOk {left:50%; top:auto; margin-left: -90px}
+.clearlooks2 .mceConfirm .mceCancel {left:50%; top:auto}
+.clearlooks2 .mceConfirm .mceIcon {background:url(img/confirm.gif)} 
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/inlinepopups/template.htm b/plugins/TinyMCE/js/plugins/inlinepopups/template.htm
new file mode 100644 (file)
index 0000000..f9ec642
--- /dev/null
@@ -0,0 +1,387 @@
+<!-- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> -->\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+<title>Template for dialogs</title>\r
+<link rel="stylesheet" type="text/css" href="skins/clearlooks2/window.css" />\r
+</head>\r
+<body>\r
+\r
+<div class="mceEditor">\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:10px;">\r
+               <div class="mceWrapper">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Blured</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:420px;">\r
+               <div class="mceWrapper mceMovable mceFocus">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Focused</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:120px;">\r
+               <div class="mceWrapper mceMovable mceFocus mceStatusbar">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:120px;">\r
+               <div class="mceWrapper mceMovable mceFocus mceStatusbar mceResizable">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar, Resizable</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:230px;">\r
+               <div class="mceWrapper mceMovable mceFocus mceResizable mceMaximizable">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Resizable, Maximizable</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:230px;">\r
+               <div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximizable">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Blurred, Maximizable, Statusbar, Resizable</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:10px; top:340px;">\r
+               <div class="mceWrapper mceMovable mceFocus mceResizable mceMaximized mceMinimizable mceMaximizable">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Maximized, Maximizable, Minimizable</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:100px; left:420px; top:340px;">\r
+               <div class="mceWrapper mceMovable mceStatusbar mceResizable mceMaximized mceMinimizable mceMaximizable">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Blured</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>Content</span>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Statusbar text.</span>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceMin" href="#"></a>\r
+                       <a class="mceMax" href="#"></a>\r
+                       <a class="mceMed" href="#"></a>\r
+                       <a class="mceClose" href="#"></a>\r
+                       <a class="mceResize mceResizeN" href="#"></a>\r
+                       <a class="mceResize mceResizeS" href="#"></a>\r
+                       <a class="mceResize mceResizeW" href="#"></a>\r
+                       <a class="mceResize mceResizeE" href="#"></a>\r
+                       <a class="mceResize mceResizeNW" href="#"></a>\r
+                       <a class="mceResize mceResizeNE" href="#"></a>\r
+                       <a class="mceResize mceResizeSW" href="#"></a>\r
+                       <a class="mceResize mceResizeSE" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:130px; left:10px; top:450px;">\r
+               <div class="mceWrapper mceMovable mceFocus mceModal mceAlert">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Alert</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                               </span>\r
+                               <div class="mceRight"></div>\r
+                               <div class="mceIcon"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceButton mceOk" href="#">Ok</a>\r
+                       <a class="mceClose" href="#"></a>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="clearlooks2" style="width:400px; height:130px; left:420px; top:450px;">\r
+               <div class="mceWrapper mceMovable mceFocus mceModal mceConfirm">\r
+                       <div class="mceTop">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                               <span>Confirm</span>\r
+                       </div>\r
+\r
+                       <div class="mceMiddle">\r
+                               <div class="mceLeft"></div>\r
+                               <span>\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       This is a very long error message. This is a very long error message.\r
+                                       </span>\r
+                               <div class="mceRight"></div>\r
+                               <div class="mceIcon"></div>\r
+                       </div>\r
+\r
+                       <div class="mceBottom">\r
+                               <div class="mceLeft"></div>\r
+                               <div class="mceCenter"></div>\r
+                               <div class="mceRight"></div>\r
+                       </div>\r
+\r
+                       <a class="mceMove" href="#"></a>\r
+                       <a class="mceButton mceOk" href="#">Ok</a>\r
+                       <a class="mceButton mceCancel" href="#">Cancel</a>\r
+                       <a class="mceClose" href="#"></a>\r
+               </div>\r
+       </div>\r
+</div>\r
+\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin.js b/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin.js
new file mode 100644 (file)
index 0000000..938ce6b
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.InsertDateTime",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertDate",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_dateFormat",a.getLang("insertdatetime.date_fmt")));a.execCommand("mceInsertContent",false,d)});a.addCommand("mceInsertTime",function(){var d=c._getDateTime(new Date(),a.getParam("plugin_insertdate_timeFormat",a.getLang("insertdatetime.time_fmt")));a.execCommand("mceInsertContent",false,d)});a.addButton("insertdate",{title:"insertdatetime.insertdate_desc",cmd:"mceInsertDate"});a.addButton("inserttime",{title:"insertdatetime.inserttime_desc",cmd:"mceInsertTime"})},getInfo:function(){return{longname:"Insert date/time",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_getDateTime:function(e,a){var c=this.editor;function b(g,d){g=""+g;if(g.length<d){for(var f=0;f<(d-g.length);f++){g="0"+g}}return g}a=a.replace("%D","%m/%d/%y");a=a.replace("%r","%I:%M:%S %p");a=a.replace("%Y",""+e.getFullYear());a=a.replace("%y",""+e.getYear());a=a.replace("%m",b(e.getMonth()+1,2));a=a.replace("%d",b(e.getDate(),2));a=a.replace("%H",""+b(e.getHours(),2));a=a.replace("%M",""+b(e.getMinutes(),2));a=a.replace("%S",""+b(e.getSeconds(),2));a=a.replace("%I",""+((e.getHours()+11)%12+1));a=a.replace("%p",""+(e.getHours()<12?"AM":"PM"));a=a.replace("%B",""+c.getLang("insertdatetime.months_long").split(",")[e.getMonth()]);a=a.replace("%b",""+c.getLang("insertdatetime.months_short").split(",")[e.getMonth()]);a=a.replace("%A",""+c.getLang("insertdatetime.day_long").split(",")[e.getDay()]);a=a.replace("%a",""+c.getLang("insertdatetime.day_short").split(",")[e.getDay()]);a=a.replace("%%","%");return a}});tinymce.PluginManager.add("insertdatetime",tinymce.plugins.InsertDateTime)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/insertdatetime/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..181c791
--- /dev/null
@@ -0,0 +1,83 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.InsertDateTime', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       ed.addCommand('mceInsertDate', function() {\r
+                               var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_dateFormat", ed.getLang('insertdatetime.date_fmt')));\r
+\r
+                               ed.execCommand('mceInsertContent', false, str);\r
+                       });\r
+\r
+                       ed.addCommand('mceInsertTime', function() {\r
+                               var str = t._getDateTime(new Date(), ed.getParam("plugin_insertdate_timeFormat", ed.getLang('insertdatetime.time_fmt')));\r
+\r
+                               ed.execCommand('mceInsertContent', false, str);\r
+                       });\r
+\r
+                       ed.addButton('insertdate', {title : 'insertdatetime.insertdate_desc', cmd : 'mceInsertDate'});\r
+                       ed.addButton('inserttime', {title : 'insertdatetime.inserttime_desc', cmd : 'mceInsertTime'});\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Insert date/time',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/insertdatetime',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _getDateTime : function(d, fmt) {\r
+                       var ed = this.editor;\r
+\r
+                       function addZeros(value, len) {\r
+                               value = "" + value;\r
+\r
+                               if (value.length < len) {\r
+                                       for (var i=0; i<(len-value.length); i++)\r
+                                               value = "0" + value;\r
+                               }\r
+\r
+                               return value;\r
+                       };\r
+\r
+                       fmt = fmt.replace("%D", "%m/%d/%y");\r
+                       fmt = fmt.replace("%r", "%I:%M:%S %p");\r
+                       fmt = fmt.replace("%Y", "" + d.getFullYear());\r
+                       fmt = fmt.replace("%y", "" + d.getYear());\r
+                       fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
+                       fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
+                       fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
+                       fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
+                       fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
+                       fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
+                       fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
+                       fmt = fmt.replace("%B", "" + ed.getLang("insertdatetime.months_long").split(',')[d.getMonth()]);\r
+                       fmt = fmt.replace("%b", "" + ed.getLang("insertdatetime.months_short").split(',')[d.getMonth()]);\r
+                       fmt = fmt.replace("%A", "" + ed.getLang("insertdatetime.day_long").split(',')[d.getDay()]);\r
+                       fmt = fmt.replace("%a", "" + ed.getLang("insertdatetime.day_short").split(',')[d.getDay()]);\r
+                       fmt = fmt.replace("%%", "%");\r
+\r
+                       return fmt;\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('insertdatetime', tinymce.plugins.InsertDateTime);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/layer/editor_plugin.js b/plugins/TinyMCE/js/plugins/layer/editor_plugin.js
new file mode 100644 (file)
index 0000000..f88a6dd
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.Layer",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceInsertLayer",c._insertLayer,c);a.addCommand("mceMoveForward",function(){c._move(1)});a.addCommand("mceMoveBackward",function(){c._move(-1)});a.addCommand("mceMakeAbsolute",function(){c._toggleAbsolute()});a.addButton("moveforward",{title:"layer.forward_desc",cmd:"mceMoveForward"});a.addButton("movebackward",{title:"layer.backward_desc",cmd:"mceMoveBackward"});a.addButton("absolute",{title:"layer.absolute_desc",cmd:"mceMakeAbsolute"});a.addButton("insertlayer",{title:"layer.insertlayer_desc",cmd:"mceInsertLayer"});a.onInit.add(function(){if(tinymce.isIE){a.getDoc().execCommand("2D-Position",false,true)}});a.onNodeChange.add(c._nodeChange,c);a.onVisualAid.add(c._visualAid,c)},getInfo:function(){return{longname:"Layer",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,e){var c,d;c=this._getParentLayer(e);d=b.dom.getParent(e,"DIV,P,IMG");if(!d){a.setDisabled("absolute",1);a.setDisabled("moveforward",1);a.setDisabled("movebackward",1)}else{a.setDisabled("absolute",0);a.setDisabled("moveforward",!c);a.setDisabled("movebackward",!c);a.setActive("absolute",c&&c.style.position.toLowerCase()=="absolute")}},_visualAid:function(a,c,b){var d=a.dom;tinymce.each(d.select("div,p",c),function(f){if(/^(absolute|relative|static)$/i.test(f.style.position)){if(b){d.addClass(f,"mceItemVisualAid")}else{d.removeClass(f,"mceItemVisualAid")}}})},_move:function(h){var b=this.editor,f,g=[],e=this._getParentLayer(b.selection.getNode()),c=-1,j=-1,a;a=[];tinymce.walk(b.getBody(),function(d){if(d.nodeType==1&&/^(absolute|relative|static)$/i.test(d.style.position)){a.push(d)}},"childNodes");for(f=0;f<a.length;f++){g[f]=a[f].style.zIndex?parseInt(a[f].style.zIndex):0;if(c<0&&a[f]==e){c=f}}if(h<0){for(f=0;f<g.length;f++){if(g[f]<g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{if(g[c]>0){a[c].style.zIndex=g[c]-1}}}else{for(f=0;f<g.length;f++){if(g[f]>g[c]){j=f;break}}if(j>-1){a[c].style.zIndex=g[j];a[j].style.zIndex=g[c]}else{a[c].style.zIndex=g[c]+1}}b.execCommand("mceRepaint")},_getParentLayer:function(a){return this.editor.dom.getParent(a,function(b){return b.nodeType==1&&/^(absolute|relative|static)$/i.test(b.style.position)})},_insertLayer:function(){var a=this.editor,b=a.dom.getPos(a.dom.getParent(a.selection.getNode(),"*"));a.dom.add(a.getBody(),"div",{style:{position:"absolute",left:b.x,top:(b.y>20?b.y:20),width:100,height:100},"class":"mceItemVisualAid"},a.selection.getContent()||a.getLang("layer.content"))},_toggleAbsolute:function(){var a=this.editor,b=this._getParentLayer(a.selection.getNode());if(!b){b=a.dom.getParent(a.selection.getNode(),"DIV,P,IMG")}if(b){if(b.style.position.toLowerCase()=="absolute"){a.dom.setStyles(b,{position:"",left:"",top:"",width:"",height:""});a.dom.removeClass(b,"mceItemVisualAid")}else{if(b.style.left==""){b.style.left=20+"px"}if(b.style.top==""){b.style.top=20+"px"}if(b.style.width==""){b.style.width=b.width?(b.width+"px"):"100px"}if(b.style.height==""){b.style.height=b.height?(b.height+"px"):"100px"}b.style.position="absolute";a.addVisual(a.getBody())}a.execCommand("mceRepaint");a.nodeChanged()}}});tinymce.PluginManager.add("layer",tinymce.plugins.Layer)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/layer/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/layer/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..d5aa865
--- /dev/null
@@ -0,0 +1,212 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.Layer', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceInsertLayer', t._insertLayer, t);\r
+\r
+                       ed.addCommand('mceMoveForward', function() {\r
+                               t._move(1);\r
+                       });\r
+\r
+                       ed.addCommand('mceMoveBackward', function() {\r
+                               t._move(-1);\r
+                       });\r
+\r
+                       ed.addCommand('mceMakeAbsolute', function() {\r
+                               t._toggleAbsolute();\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('moveforward', {title : 'layer.forward_desc', cmd : 'mceMoveForward'});\r
+                       ed.addButton('movebackward', {title : 'layer.backward_desc', cmd : 'mceMoveBackward'});\r
+                       ed.addButton('absolute', {title : 'layer.absolute_desc', cmd : 'mceMakeAbsolute'});\r
+                       ed.addButton('insertlayer', {title : 'layer.insertlayer_desc', cmd : 'mceInsertLayer'});\r
+\r
+                       ed.onInit.add(function() {\r
+                               if (tinymce.isIE)\r
+                                       ed.getDoc().execCommand('2D-Position', false, true);\r
+                       });\r
+\r
+                       ed.onNodeChange.add(t._nodeChange, t);\r
+                       ed.onVisualAid.add(t._visualAid, t);\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Layer',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/layer',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _nodeChange : function(ed, cm, n) {\r
+                       var le, p;\r
+\r
+                       le = this._getParentLayer(n);\r
+                       p = ed.dom.getParent(n, 'DIV,P,IMG');\r
+\r
+                       if (!p) {\r
+                               cm.setDisabled('absolute', 1);\r
+                               cm.setDisabled('moveforward', 1);\r
+                               cm.setDisabled('movebackward', 1);\r
+                       } else {\r
+                               cm.setDisabled('absolute', 0);\r
+                               cm.setDisabled('moveforward', !le);\r
+                               cm.setDisabled('movebackward', !le);\r
+                               cm.setActive('absolute', le && le.style.position.toLowerCase() == "absolute");\r
+                       }\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _visualAid : function(ed, e, s) {\r
+                       var dom = ed.dom;\r
+\r
+                       tinymce.each(dom.select('div,p', e), function(e) {\r
+                               if (/^(absolute|relative|static)$/i.test(e.style.position)) {\r
+                                       if (s)\r
+                                               dom.addClass(e, 'mceItemVisualAid');\r
+                                       else\r
+                                               dom.removeClass(e, 'mceItemVisualAid'); \r
+                               }\r
+                       });\r
+               },\r
+\r
+               _move : function(d) {\r
+                       var ed = this.editor, i, z = [], le = this._getParentLayer(ed.selection.getNode()), ci = -1, fi = -1, nl;\r
+\r
+                       nl = [];\r
+                       tinymce.walk(ed.getBody(), function(n) {\r
+                               if (n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position))\r
+                                       nl.push(n); \r
+                       }, 'childNodes');\r
+\r
+                       // Find z-indexes\r
+                       for (i=0; i<nl.length; i++) {\r
+                               z[i] = nl[i].style.zIndex ? parseInt(nl[i].style.zIndex) : 0;\r
+\r
+                               if (ci < 0 && nl[i] == le)\r
+                                       ci = i;\r
+                       }\r
+\r
+                       if (d < 0) {\r
+                               // Move back\r
+\r
+                               // Try find a lower one\r
+                               for (i=0; i<z.length; i++) {\r
+                                       if (z[i] < z[ci]) {\r
+                                               fi = i;\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               if (fi > -1) {\r
+                                       nl[ci].style.zIndex = z[fi];\r
+                                       nl[fi].style.zIndex = z[ci];\r
+                               } else {\r
+                                       if (z[ci] > 0)\r
+                                               nl[ci].style.zIndex = z[ci] - 1;\r
+                               }\r
+                       } else {\r
+                               // Move forward\r
+\r
+                               // Try find a higher one\r
+                               for (i=0; i<z.length; i++) {\r
+                                       if (z[i] > z[ci]) {\r
+                                               fi = i;\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               if (fi > -1) {\r
+                                       nl[ci].style.zIndex = z[fi];\r
+                                       nl[fi].style.zIndex = z[ci];\r
+                               } else\r
+                                       nl[ci].style.zIndex = z[ci] + 1;\r
+                       }\r
+\r
+                       ed.execCommand('mceRepaint');\r
+               },\r
+\r
+               _getParentLayer : function(n) {\r
+                       return this.editor.dom.getParent(n, function(n) {\r
+                               return n.nodeType == 1 && /^(absolute|relative|static)$/i.test(n.style.position);\r
+                       });\r
+               },\r
+\r
+               _insertLayer : function() {\r
+                       var ed = this.editor, p = ed.dom.getPos(ed.dom.getParent(ed.selection.getNode(), '*'));\r
+\r
+                       ed.dom.add(ed.getBody(), 'div', {\r
+                               style : {\r
+                                       position : 'absolute',\r
+                                       left : p.x,\r
+                                       top : (p.y > 20 ? p.y : 20),\r
+                                       width : 100,\r
+                                       height : 100\r
+                               },\r
+                               'class' : 'mceItemVisualAid'\r
+                       }, ed.selection.getContent() || ed.getLang('layer.content'));\r
+               },\r
+\r
+               _toggleAbsolute : function() {\r
+                       var ed = this.editor, le = this._getParentLayer(ed.selection.getNode());\r
+\r
+                       if (!le)\r
+                               le = ed.dom.getParent(ed.selection.getNode(), 'DIV,P,IMG');\r
+\r
+                       if (le) {\r
+                               if (le.style.position.toLowerCase() == "absolute") {\r
+                                       ed.dom.setStyles(le, {\r
+                                               position : '',\r
+                                               left : '',\r
+                                               top : '',\r
+                                               width : '',\r
+                                               height : ''\r
+                                       });\r
+\r
+                                       ed.dom.removeClass(le, 'mceItemVisualAid');\r
+                               } else {\r
+                                       if (le.style.left == "")\r
+                                               le.style.left = 20 + 'px';\r
+\r
+                                       if (le.style.top == "")\r
+                                               le.style.top = 20 + 'px';\r
+\r
+                                       if (le.style.width == "")\r
+                                               le.style.width = le.width ? (le.width + 'px') : '100px';\r
+\r
+                                       if (le.style.height == "")\r
+                                               le.style.height = le.height ? (le.height + 'px') : '100px';\r
+\r
+                                       le.style.position = "absolute";\r
+                                       ed.addVisual(ed.getBody());\r
+                               }\r
+\r
+                               ed.execCommand('mceRepaint');\r
+                               ed.nodeChanged();\r
+                       }\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('layer', tinymce.plugins.Layer);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin.js b/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin.js
new file mode 100644 (file)
index 0000000..29d43c5
--- /dev/null
@@ -0,0 +1 @@
+(function(a){a.onAddEditor.addToTop(function(c,b){b.settings.inline_styles=false});a.create("tinymce.plugins.LegacyOutput",{init:function(b){b.onInit.add(function(){var c="p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img",e=a.explode(b.settings.font_size_style_values),d=b.serializer;b.formatter.register({alignleft:{selector:c,attributes:{align:"left"}},aligncenter:{selector:c,attributes:{align:"center"}},alignright:{selector:c,attributes:{align:"right"}},alignfull:{selector:c,attributes:{align:"full"}},bold:{inline:"b"},italic:{inline:"i"},underline:{inline:"u"},strikethrough:{inline:"strike"},fontname:{inline:"font",attributes:{face:"%value"}},fontsize:{inline:"font",attributes:{size:function(f){return a.inArray(e,f.value)+1}}},forecolor:{inline:"font",styles:{color:"%value"}},hilitecolor:{inline:"font",styles:{backgroundColor:"%value"}}});d._setup();a.each("b,i,u,strike".split(","),function(f){var g=d.rules[f];if(!g){d.addRules(f)}});if(!d.rules.font){d.addRules("font[face|size|color|style]")}a.each(c.split(","),function(f){var h=d.rules[f],g;if(h){a.each(h.attribs,function(j,i){if(i.name=="align"){g=true;return false}});if(!g){h.attribs.push({name:"align"})}}});b.onNodeChange.add(function(g,k){var j,f,h,i;f=g.dom.getParent(g.selection.getNode(),"font");if(f){h=f.face;i=f.size}if(j=k.get("fontselect")){j.select(function(l){return l==h})}if(j=k.get("fontsizeselect")){j.select(function(m){var l=a.inArray(e,m.fontSize);return l+1==i})}})})},getInfo:function(){return{longname:"LegacyOutput",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput",version:a.majorVersion+"."+a.minorVersion}}});a.PluginManager.add("legacyoutput",a.plugins.LegacyOutput)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/legacyoutput/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..e852da1
--- /dev/null
@@ -0,0 +1,136 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ *\r
+ * This plugin will force TinyMCE to produce deprecated legacy output such as font elements, u elements, align\r
+ * attributes and so forth. There are a few cases where these old items might be needed for example in email applications or with Flash\r
+ *\r
+ * However you should NOT use this plugin if you are building some system that produces web contents such as a CMS. All these elements are\r
+ * not apart of the newer specifications for HTML and XHTML.\r
+ */\r
+\r
+(function(tinymce) {\r
+       // Override inline_styles setting to force TinyMCE to produce deprecated contents\r
+       tinymce.onAddEditor.addToTop(function(tinymce, editor) {\r
+               editor.settings.inline_styles = false;\r
+       });\r
+\r
+       // Create the legacy ouput plugin\r
+       tinymce.create('tinymce.plugins.LegacyOutput', {\r
+               init : function(editor) {\r
+                       editor.onInit.add(function() {\r
+                               var alignElements = 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li,table,img',\r
+                                       fontSizes = tinymce.explode(editor.settings.font_size_style_values),\r
+                                       serializer = editor.serializer;\r
+\r
+                               // Override some internal formats to produce legacy elements and attributes\r
+                               editor.formatter.register({\r
+                                       // Change alignment formats to use the deprecated align attribute\r
+                                       alignleft : {selector : alignElements, attributes : {align : 'left'}},\r
+                                       aligncenter : {selector : alignElements, attributes : {align : 'center'}},\r
+                                       alignright : {selector : alignElements, attributes : {align : 'right'}},\r
+                                       alignfull : {selector : alignElements, attributes : {align : 'full'}},\r
+\r
+                                       // Change the basic formatting elements to use deprecated element types\r
+                                       bold : {inline : 'b'},\r
+                                       italic : {inline : 'i'},\r
+                                       underline : {inline : 'u'},\r
+                                       strikethrough : {inline : 'strike'},\r
+\r
+                                       // Change font size and font family to use the deprecated font element\r
+                                       fontname : {inline : 'font', attributes : {face : '%value'}},\r
+                                       fontsize : {\r
+                                               inline : 'font',\r
+                                               attributes : {\r
+                                                       size : function(vars) {\r
+                                                               return tinymce.inArray(fontSizes, vars.value) + 1;\r
+                                                       }\r
+                                               }\r
+                                       },\r
+\r
+                                       // Setup font elements for colors as well\r
+                                       forecolor : {inline : 'font', styles : {color : '%value'}},\r
+                                       hilitecolor : {inline : 'font', styles : {backgroundColor : '%value'}}\r
+                               });\r
+\r
+                               // Force parsing of the serializer rules\r
+                               serializer._setup();\r
+\r
+                               // Check that deprecated elements are allowed if not add them\r
+                               tinymce.each('b,i,u,strike'.split(','), function(name) {\r
+                                       var rule = serializer.rules[name];\r
+\r
+                                       if (!rule)\r
+                                               serializer.addRules(name);\r
+                               });\r
+\r
+                               // Add font element if it's missing\r
+                               if (!serializer.rules["font"])\r
+                                       serializer.addRules("font[face|size|color|style]");\r
+\r
+                               // Add the missing and depreacted align attribute for the serialization engine\r
+                               tinymce.each(alignElements.split(','), function(name) {\r
+                                       var rule = serializer.rules[name], found;\r
+\r
+                                       if (rule) {\r
+                                               tinymce.each(rule.attribs, function(name, attr) {\r
+                                                       if (attr.name == 'align') {\r
+                                                               found = true;\r
+                                                               return false;\r
+                                                       }\r
+                                               });\r
+\r
+                                               if (!found)\r
+                                                       rule.attribs.push({name : 'align'});\r
+                                       }\r
+                               });\r
+\r
+                               // Listen for the onNodeChange event so that we can do special logic for the font size and font name drop boxes\r
+                               editor.onNodeChange.add(function(editor, control_manager) {\r
+                                       var control, fontElm, fontName, fontSize;\r
+\r
+                                       // Find font element get it's name and size\r
+                                       fontElm = editor.dom.getParent(editor.selection.getNode(), 'font');\r
+                                       if (fontElm) {\r
+                                               fontName = fontElm.face;\r
+                                               fontSize = fontElm.size;\r
+                                       }\r
+\r
+                                       // Select/unselect the font name in droplist\r
+                                       if (control = control_manager.get('fontselect')) {\r
+                                               control.select(function(value) {\r
+                                                       return value == fontName;\r
+                                               });\r
+                                       }\r
+\r
+                                       // Select/unselect the font size in droplist\r
+                                       if (control = control_manager.get('fontsizeselect')) {\r
+                                               control.select(function(value) {\r
+                                                       var index = tinymce.inArray(fontSizes, value.fontSize);\r
+\r
+                                                       return index + 1 == fontSize;\r
+                                               });\r
+                                       }\r
+                               });\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'LegacyOutput',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/legacyoutput',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('legacyoutput', tinymce.plugins.LegacyOutput);\r
+})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/linkautodetect/changelog.txt b/plugins/TinyMCE/js/plugins/linkautodetect/changelog.txt
new file mode 100644 (file)
index 0000000..ecab340
--- /dev/null
@@ -0,0 +1,9 @@
+0.1     2009-04-15 - initial version\r
+0.11    2009-05-10 - Fix for email addresses with two periods in the domain\r
+                        were incorrectly converted to http links.  Fix submitted\r
+                        by Ralph Slooten.\r
+                     Fix for tinyMCE.isIE that needed to be tinymce.isIE.\r
+0.12    2009-06-23 - Fix for URLs that have an HTML anchor identifier in them, such as\r
+                     http://www.palmpre.org/forums/palm-pre/85-copy-and-paste.html#post457\r
+                     Previously, it would create a link to only\r
+                     http://www.palmpre.org/forums/palm-pre/85-copy-and-paste.html
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/linkautodetect/editor_plugin.js b/plugins/TinyMCE/js/plugins/linkautodetect/editor_plugin.js
new file mode 100644 (file)
index 0000000..7e97a78
--- /dev/null
@@ -0,0 +1,7 @@
+
+(function(){tinymce.create('tinymce.plugins.LinkAutoDetect',{init:function(ed,url){var t=this;t.RE_email=/^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$/i;t.RE_url=/^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?$/i;ed.onKeyPress.add(t.onKeyPress,t);ed.onKeyUp.add(t.onKeyUp,t);},getInfo:function(){return{longname:'Link Auto Detect',author:'Ubernote/Shane Tomlinson',authorurl:'http://www.ubernote.com',infourl:'http://www.ubernote.com',version:'0.2'};},onKeyPress:function(ed,ev,o){if(tinymce.isIE){return;}
+var s=ed.selection.getSel();var textNode=s.anchorNode;var createLink=function(searchfor,hlink,midStart){var leftText=textNode;var rightText=leftText.splitText(s.anchorOffset);var midText=leftText.splitText(midStart);var midEnd=midText.data.search(searchfor);if(midEnd!=-1){rightText=midText.splitText(midEnd);}
+var tag=ed.dom.create('a',{href:hlink},midText.data);var a=midText.parentNode.insertBefore(tag,rightText);s.collapse(rightText,0);ed.dom.remove(midText);};if((ev.which==13||ev.which==32)&&textNode.nodeType==3&&textNode.data.length>3&&textNode.data.indexOf('.')>=0&&!ed.dom.getParent(textNode,'a')){var midStart=textNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/);if(midStart!=-1){var matchData=textNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/,'$1');var matchURL=matchData.match(this.RE_url);var matchEmail=matchData.match(this.RE_email);if(matchEmail){createLink(/[^a-zA-Z0-9\.@_\-]/,'mailto:'+matchEmail[0],midStart);}
+else if(matchURL){createLink(/[^a-zA-Z0-9\._\-\/\&\?#=:@]/,(matchURL[1]?'':'http://')+matchURL[0],midStart);}}}},onKeyUp:function(ed,ev,o){if(tinymce.isIE){return;}
+var s=ed.selection.getSel();var textNode=s.anchorNode;var a=ed.dom.getParent(textNode,'a');if(!(ev.which&&(ev.which==13||ev.which==32))&&(ev.which||ev.keyCode==8||ev.keyCode==46)&&(textNode.nodeType==3)&&(a)){var matchEmail=s.anchorNode.data.match(this.RE_email);var matchURL=textNode.data.match(this.RE_url);if(matchEmail){ed.dom.setAttrib(a,'href','mailto:'+textNode.data);}
+if(matchURL){ed.dom.setAttrib(a,'href',(matchURL[1]?'':'http://')+matchURL[0]);}}}});tinymce.PluginManager.add('linkautodetect',tinymce.plugins.LinkAutoDetect);})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/linkautodetect/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/linkautodetect/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..d269392
--- /dev/null
@@ -0,0 +1,141 @@
+/**\r
+ * $Id: editor_plugin_src.js 2009-05-10\r
+ *\r
+ * @author Ubernote/Shane Tomlinson\r
+ * http://www.ubernote.com\r
+ * set117@gmail.com\r
+ *\r
+ * Detect emails and urls as they are typed in Mozilla/Safari/Chrome and Opera\r
+ * Borrowed from both Typo3 http://typo3.org/ and Xinha http://xinha.gogo.co.nz/\r
+ * Heavily modified and cleaned up.\r
+ * \r
+ * Original license info from Xinha at the bottom.\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.LinkAutoDetect', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+                       t.RE_email = /^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$/i;\r
+                       t.RE_url   = /^((https?|ftp|news):\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]))(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?$/i;\r
+                       ed.onKeyPress.add( t.onKeyPress, t );\r
+                       ed.onKeyUp.add( t.onKeyUp, t );\r
+               },\r
+               \r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Link Auto Detect',\r
+                               author : 'Ubernote/Shane Tomlinson',\r
+                               authorurl : 'http://www.ubernote.com',\r
+                               infourl : 'http://www.ubernote.com',\r
+                               version : '0.2'\r
+                       };\r
+               },\r
+               \r
+               onKeyPress : function(ed, ev, o) {\r
+                       if(tinymce.isIE) {   \r
+                               // IE already does auto-detect, so no worries.\r
+                               return;\r
+                       } // end if\r
+                       \r
+                       var s = ed.selection.getSel();\r
+                       var textNode = s.anchorNode;\r
+                       \r
+                       var createLink = function (searchfor, hlink, midStart) {\r
+                               var leftText  = textNode;\r
+                               var rightText = leftText.splitText(s.anchorOffset);\r
+                               var midText   = leftText.splitText(midStart);\r
+                               var midEnd = midText.data.search(searchfor);\r
+                               if (midEnd != -1) {\r
+                                       rightText = midText.splitText(midEnd);\r
+                               } // end if\r
+                               var tag = ed.dom.create('a', { href: hlink }, midText.data);\r
+                               var a = midText.parentNode.insertBefore(tag, rightText);\r
+                               \r
+                               // We are going to put the cursor into the first position after\r
+                               //  the anchor and let the browser take care of inserting the space/enter.\r
+                               s.collapse(rightText, 0);\r
+                               ed.dom.remove(midText);\r
+                       };\r
+                       \r
+                       // Space or Enter, see if the text just typed looks like a URL, or email address and link it accordingly\r
+                       if((ev.which == 13 || ev.which == 32) \r
+                               && textNode.nodeType == 3 && textNode.data.length > 3 \r
+                               && textNode.data.indexOf('.') >= 0 && !ed.dom.getParent(textNode, 'a')) {\r
+                               var midStart = textNode.data.substring(0,s.anchorOffset).search(/\S{4,}$/);\r
+                               if(midStart != -1) {\r
+                                       var matchData = textNode.data.substring(0,s.anchorOffset).replace(/^.*?(\S*)$/, '$1');\r
+                                       var matchURL = matchData.match(this.RE_url);\r
+                                       var matchEmail = matchData.match(this.RE_email);\r
+                                       if(matchEmail) {\r
+                                               createLink(/[^a-zA-Z0-9\.@_\-]/, 'mailto:' + matchEmail[0], midStart);\r
+                                       }\r
+                                       else if(matchURL) {\r
+                                               createLink( /[^a-zA-Z0-9\._\-\/\&\?#=:@]/, (matchURL[1] ? '' : 'http://') + matchURL[0], midStart);\r
+                                       }\r
+                               } // end if\r
+                       }\r
+               },\r
+               \r
+               onKeyUp : function(ed, ev, o) {\r
+                       if(tinymce.isIE) {   \r
+                               // IE already does auto-detect, so no worries.\r
+                               return;\r
+                       } // end if\r
+                       \r
+                       var s = ed.selection.getSel();\r
+                       var textNode = s.anchorNode;\r
+                               var a = ed.dom.getParent(textNode, 'a');\r
+                               \r
+                               if( ! (ev.which && ( ev.which == 13 || ev.which == 32)) \r
+                                       && (ev.which || ev.keyCode == 8 || ev.keyCode == 46)\r
+                                       && (textNode.nodeType == 3) && (a)) {\r
+                                       // See if we might be changing a link\r
+                                       var matchEmail = s.anchorNode.data.match(this.RE_email);\r
+                                       var matchURL = textNode.data.match(this.RE_url);\r
+                                       if(matchEmail) {\r
+                                               ed.dom.setAttrib(a, 'href', 'mailto:' + textNode.data);\r
+                                       } // end if\r
+                                       if(matchURL) {\r
+                                               ed.dom.setAttrib(a, 'href', (matchURL[1] ? '' : 'http://') + matchURL[0]);\r
+                                       } // end if\r
+                               } // end if\r
+                       }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('linkautodetect', tinymce.plugins.LinkAutoDetect);\r
+})();\r
+\r
+/*\r
+htmlArea License (based on BSD license)\r
+Copyright (c) 2002-2004, interactivetools.com, inc.\r
+Copyright (c) 2003-2004 dynarch.com\r
+All rights reserved.\r
+\r
+Redistribution and use in source and binary forms, with or without\r
+modification, are permitted provided that the following conditions are met:\r
+\r
+1) Redistributions of source code must retain the above copyright notice,\r
+   this list of conditions and the following disclaimer.\r
+\r
+2) Redistributions in binary form must reproduce the above copyright notice,\r
+   this list of conditions and the following disclaimer in the documentation\r
+   and/or other materials provided with the distribution.\r
+\r
+3) Neither the name of interactivetools.com, inc. nor the names of its\r
+   contributors may be used to endorse or promote products derived from this\r
+   software without specific prior written permission.\r
+\r
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\r
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\r
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\r
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\r
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\r
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\r
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\r
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\r
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\r
+POSSIBILITY OF SUCH DAMAGE.\r
+*/
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/css/content.css b/plugins/TinyMCE/js/plugins/media/css/content.css
new file mode 100644 (file)
index 0000000..1bf6a75
--- /dev/null
@@ -0,0 +1,6 @@
+.mceItemFlash, .mceItemShockWave, .mceItemQuickTime, .mceItemWindowsMedia, .mceItemRealMedia {border:1px dotted #cc0000; background-position:center; background-repeat:no-repeat; background-color:#ffffcc;}\r
+.mceItemShockWave {background-image: url(../img/shockwave.gif);}\r
+.mceItemFlash {background-image:url(../img/flash.gif);}\r
+.mceItemQuickTime {background-image:url(../img/quicktime.gif);}\r
+.mceItemWindowsMedia {background-image:url(../img/windowsmedia.gif);}\r
+.mceItemRealMedia {background-image:url(../img/realmedia.gif);}\r
diff --git a/plugins/TinyMCE/js/plugins/media/css/media.css b/plugins/TinyMCE/js/plugins/media/css/media.css
new file mode 100644 (file)
index 0000000..2d08794
--- /dev/null
@@ -0,0 +1,16 @@
+#id, #name, #hspace, #vspace, #class_name, #align {    width: 100px }\r
+#hspace, #vspace { width: 50px }\r
+#flash_quality, #flash_align, #flash_scale, #flash_salign, #flash_wmode { width: 100px }\r
+#flash_base, #flash_flashvars { width: 240px }\r
+#width, #height { width: 40px }\r
+#src, #media_type { width: 250px }\r
+#class { width: 120px }\r
+#prev { margin: 0; border: 1px solid black; width: 380px; height: 230px; overflow: auto }\r
+.panel_wrapper div.current { height: 390px; overflow: auto }\r
+#flash_options, #shockwave_options, #qt_options, #wmp_options, #rmp_options { display: none }\r
+.mceAddSelectValue { background-color: #DDDDDD }\r
+#qt_starttime, #qt_endtime, #qt_fov, #qt_href, #qt_moveid, #qt_moviename, #qt_node, #qt_pan, #qt_qtsrc, #qt_qtsrcchokespeed, #qt_target, #qt_tilt, #qt_urlsubstituten, #qt_volume { width: 70px }\r
+#wmp_balance, #wmp_baseurl, #wmp_captioningid, #wmp_currentmarker, #wmp_currentposition, #wmp_defaultframe, #wmp_playcount, #wmp_rate, #wmp_uimode, #wmp_volume { width: 70px }\r
+#rmp_console, #rmp_numloop, #rmp_controls, #rmp_scriptcallbacks { width: 70px }\r
+#shockwave_swvolume, #shockwave_swframe, #shockwave_swurl, #shockwave_swstretchvalign, #shockwave_swstretchhalign, #shockwave_swstretchstyle { width: 90px }\r
+#qt_qtsrc { width: 200px }\r
diff --git a/plugins/TinyMCE/js/plugins/media/editor_plugin.js b/plugins/TinyMCE/js/plugins/media/editor_plugin.js
new file mode 100644 (file)
index 0000000..4bbe367
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.MediaPlugin",{init:function(b,c){var e=this;e.editor=b;e.url=c;function f(g){return/^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(g.className)}b.onPreInit.add(function(){b.serializer.addRules("param[name|value|_mce_value]")});b.addCommand("mceMedia",function(){b.windowManager.open({file:c+"/media.htm",width:430+parseInt(b.getLang("media.delta_width",0)),height:470+parseInt(b.getLang("media.delta_height",0)),inline:1},{plugin_url:c})});b.addButton("media",{title:"media.desc",cmd:"mceMedia"});b.onNodeChange.add(function(h,g,i){g.setActive("media",i.nodeName=="IMG"&&f(i))});b.onInit.add(function(){var g={mceItemFlash:"flash",mceItemShockWave:"shockwave",mceItemWindowsMedia:"windowsmedia",mceItemQuickTime:"quicktime",mceItemRealMedia:"realmedia"};b.selection.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.selection.onBeforeSetContent.add(e._objectsToSpans,e);if(b.settings.content_css!==false){b.dom.loadCSS(c+"/css/content.css")}if(b.theme&&b.theme.onResolveName){b.theme.onResolveName.add(function(h,i){if(i.name=="img"){a(g,function(l,j){if(b.dom.hasClass(i.node,j)){i.name=l;i.title=b.dom.getAttrib(i.node,"title");return false}})}})}if(b&&b.plugins.contextmenu){b.plugins.contextmenu.onContextMenu.add(function(i,h,j){if(j.nodeName=="IMG"&&/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(j.className)){h.add({title:"media.edit",icon:"media",cmd:"mceMedia"})}})}});b.onBeforeSetContent.add(e._objectsToSpans,e);b.onSetContent.add(function(){e._spansToImgs(b.getBody())});b.onPreProcess.add(function(g,i){var h=g.dom;if(i.set){e._spansToImgs(i.node);a(h.select("IMG",i.node),function(k){var j;if(f(k)){j=e._parse(k.title);h.setAttrib(k,"width",h.getAttrib(k,"width",j.width||100));h.setAttrib(k,"height",h.getAttrib(k,"height",j.height||100))}})}if(i.get){a(h.select("IMG",i.node),function(m){var l,j,k;if(g.getParam("media_use_script")){if(f(m)){m.className=m.className.replace(/mceItem/g,"mceTemp")}return}switch(m.className){case"mceItemFlash":l="d27cdb6e-ae6d-11cf-96b8-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="application/x-shockwave-flash";break;case"mceItemShockWave":l="166b1bca-3f9c-11cf-8075-444553540000";j="http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0";k="application/x-director";break;case"mceItemWindowsMedia":l=g.getParam("media_wmp6_compatible")?"05589fa1-c356-11ce-bf01-00aa0055595a":"6bf52a52-394a-11d3-b153-00c04f79faa6";j="http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701";k="application/x-mplayer2";break;case"mceItemQuickTime":l="02bf25d5-8c17-4b23-bc80-d3488abddc6b";j="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0";k="video/quicktime";break;case"mceItemRealMedia":l="cfcdaa03-8be4-11cf-b84b-0020afbbccfa";j="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0";k="audio/x-pn-realaudio-plugin";break}if(l){h.replace(e._buildObj({classid:l,codebase:j,type:k},m),m)}})}});b.onPostProcess.add(function(g,h){h.content=h.content.replace(/_mce_value=/g,"value=")});function d(g,h){h=new RegExp(h+'="([^"]+)"',"g").exec(g);return h?b.dom.decode(h[1]):""}b.onPostProcess.add(function(g,h){if(g.getParam("media_use_script")){h.content=h.content.replace(/<img[^>]+>/g,function(j){var i=d(j,"class");if(/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(i)){at=e._parse(d(j,"title"));at.width=d(j,"width");at.height=d(j,"height");j='<script type="text/javascript">write'+i.substring(7)+"({"+e._serialize(at)+"});<\/script>"}return j})}})},getInfo:function(){return{longname:"Media",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_objectsToSpans:function(b,e){var c=this,d=e.content;d=d.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi,function(g,f,i){var h=c._parse(i);return'<img class="mceItem'+f+'" title="'+b.dom.encode(i)+'" src="'+c.url+'/img/trans.gif" width="'+h.width+'" height="'+h.height+'" />'});d=d.replace(/<object([^>]*)>/gi,'<span class="mceItemObject" $1>');d=d.replace(/<embed([^>]*)\/?>/gi,'<span class="mceItemEmbed" $1></span>');d=d.replace(/<embed([^>]*)>/gi,'<span class="mceItemEmbed" $1>');d=d.replace(/<\/(object)([^>]*)>/gi,"</span>");d=d.replace(/<\/embed>/gi,"");d=d.replace(/<param([^>]*)>/gi,function(g,f){return"<span "+f.replace(/value=/gi,"_mce_value=")+' class="mceItemParam"></span>'});d=d.replace(/\/ class=\"mceItemParam\"><\/span>/gi,'class="mceItemParam"></span>');e.content=d},_buildObj:function(g,h){var d,c=this.editor,f=c.dom,e=this._parse(h.title),b;b=c.getParam("media_strict",true)&&g.type=="application/x-shockwave-flash";e.width=g.width=f.getAttrib(h,"width")||100;e.height=g.height=f.getAttrib(h,"height")||100;if(e.src){e.src=c.convertURL(e.src,"src",h)}if(b){d=f.create("span",{id:e.id,_mce_name:"object",type:"application/x-shockwave-flash",data:e.src,style:f.getAttrib(h,"style"),width:g.width,height:g.height})}else{d=f.create("span",{id:e.id,_mce_name:"object",classid:"clsid:"+g.classid,style:f.getAttrib(h,"style"),codebase:g.codebase,width:g.width,height:g.height})}a(e,function(j,i){if(!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(i)){if(g.type=="application/x-mplayer2"&&i=="src"&&!e.url){i="url"}if(j){f.add(d,"span",{_mce_name:"param",name:i,_mce_value:j})}}});if(!b){f.add(d,"span",tinymce.extend({_mce_name:"embed",type:g.type,style:f.getAttrib(h,"style")},e))}return d},_spansToImgs:function(e){var d=this,f=d.editor.dom,b,c;a(f.select("span",e),function(g){if(f.getAttrib(g,"class")=="mceItemObject"){c=f.getAttrib(g,"classid").toLowerCase().replace(/\s+/g,"");switch(c){case"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000":f.replace(d._createImg("mceItemFlash",g),g);break;case"clsid:166b1bca-3f9c-11cf-8075-444553540000":f.replace(d._createImg("mceItemShockWave",g),g);break;case"clsid:6bf52a52-394a-11d3-b153-00c04f79faa6":case"clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95":case"clsid:05589fa1-c356-11ce-bf01-00aa0055595a":f.replace(d._createImg("mceItemWindowsMedia",g),g);break;case"clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b":f.replace(d._createImg("mceItemQuickTime",g),g);break;case"clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa":f.replace(d._createImg("mceItemRealMedia",g),g);break;default:f.replace(d._createImg("mceItemFlash",g),g)}return}if(f.getAttrib(g,"class")=="mceItemEmbed"){switch(f.getAttrib(g,"type")){case"application/x-shockwave-flash":f.replace(d._createImg("mceItemFlash",g),g);break;case"application/x-director":f.replace(d._createImg("mceItemShockWave",g),g);break;case"application/x-mplayer2":f.replace(d._createImg("mceItemWindowsMedia",g),g);break;case"video/quicktime":f.replace(d._createImg("mceItemQuickTime",g),g);break;case"audio/x-pn-realaudio-plugin":f.replace(d._createImg("mceItemRealMedia",g),g);break;default:f.replace(d._createImg("mceItemFlash",g),g)}}})},_createImg:function(c,h){var b,g=this.editor.dom,f={},e="",d;d=["id","name","width","height","bgcolor","align","flashvars","src","wmode","allowfullscreen","quality","data"];b=g.create("img",{src:this.url+"/img/trans.gif",width:g.getAttrib(h,"width")||100,height:g.getAttrib(h,"height")||100,style:g.getAttrib(h,"style"),"class":c});a(d,function(i){var j=g.getAttrib(h,i);if(j){f[i]=j}});a(g.select("span",h),function(i){if(g.hasClass(i,"mceItemParam")){f[g.getAttrib(i,"name")]=g.getAttrib(i,"_mce_value")}});if(f.movie){f.src=f.movie;delete f.movie}if(!f.src){f.src=f.data;delete f.data}h=g.select(".mceItemEmbed",h)[0];if(h){a(d,function(i){var j=g.getAttrib(h,i);if(j&&!f[i]){f[i]=j}})}delete f.width;delete f.height;b.title=this._serialize(f);return b},_parse:function(b){return tinymce.util.JSON.parse("{"+b+"}")},_serialize:function(b){return tinymce.util.JSON.serialize(b).replace(/[{}]/g,"")}});tinymce.PluginManager.add("media",tinymce.plugins.MediaPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/media/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..fc84e5b
--- /dev/null
@@ -0,0 +1,414 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.plugins.MediaPlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+                       \r
+                       t.editor = ed;\r
+                       t.url = url;\r
+\r
+                       function isMediaElm(n) {\r
+                               return /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className);\r
+                       };\r
+\r
+                       ed.onPreInit.add(function() {\r
+                               // Force in _value parameter this extra parameter is required for older Opera versions\r
+                               ed.serializer.addRules('param[name|value|_mce_value]');\r
+                       });\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceMedia', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/media.htm',\r
+                                       width : 430 + parseInt(ed.getLang('media.delta_width', 0)),\r
+                                       height : 470 + parseInt(ed.getLang('media.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('media', {title : 'media.desc', cmd : 'mceMedia'});\r
+\r
+                       ed.onNodeChange.add(function(ed, cm, n) {\r
+                               cm.setActive('media', n.nodeName == 'IMG' && isMediaElm(n));\r
+                       });\r
+\r
+                       ed.onInit.add(function() {\r
+                               var lo = {\r
+                                       mceItemFlash : 'flash',\r
+                                       mceItemShockWave : 'shockwave',\r
+                                       mceItemWindowsMedia : 'windowsmedia',\r
+                                       mceItemQuickTime : 'quicktime',\r
+                                       mceItemRealMedia : 'realmedia'\r
+                               };\r
+\r
+                               ed.selection.onSetContent.add(function() {\r
+                                       t._spansToImgs(ed.getBody());\r
+                               });\r
+\r
+                               ed.selection.onBeforeSetContent.add(t._objectsToSpans, t);\r
+\r
+                               if (ed.settings.content_css !== false)\r
+                                       ed.dom.loadCSS(url + "/css/content.css");\r
+\r
+                               if (ed.theme && ed.theme.onResolveName) {\r
+                                       ed.theme.onResolveName.add(function(th, o) {\r
+                                               if (o.name == 'img') {\r
+                                                       each(lo, function(v, k) {\r
+                                                               if (ed.dom.hasClass(o.node, k)) {\r
+                                                                       o.name = v;\r
+                                                                       o.title = ed.dom.getAttrib(o.node, 'title');\r
+                                                                       return false;\r
+                                                               }\r
+                                                       });\r
+                                               }\r
+                                       });\r
+                               }\r
+\r
+                               if (ed && ed.plugins.contextmenu) {\r
+                                       ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
+                                               if (e.nodeName == 'IMG' && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(e.className)) {\r
+                                                       m.add({title : 'media.edit', icon : 'media', cmd : 'mceMedia'});\r
+                                               }\r
+                                       });\r
+                               }\r
+                       });\r
+\r
+                       ed.onBeforeSetContent.add(t._objectsToSpans, t);\r
+\r
+                       ed.onSetContent.add(function() {\r
+                               t._spansToImgs(ed.getBody());\r
+                       });\r
+\r
+                       ed.onPreProcess.add(function(ed, o) {\r
+                               var dom = ed.dom;\r
+\r
+                               if (o.set) {\r
+                                       t._spansToImgs(o.node);\r
+\r
+                                       each(dom.select('IMG', o.node), function(n) {\r
+                                               var p;\r
+\r
+                                               if (isMediaElm(n)) {\r
+                                                       p = t._parse(n.title);\r
+                                                       dom.setAttrib(n, 'width', dom.getAttrib(n, 'width', p.width || 100));\r
+                                                       dom.setAttrib(n, 'height', dom.getAttrib(n, 'height', p.height || 100));\r
+                                               }\r
+                                       });\r
+                               }\r
+\r
+                               if (o.get) {\r
+                                       each(dom.select('IMG', o.node), function(n) {\r
+                                               var ci, cb, mt;\r
+\r
+                                               if (ed.getParam('media_use_script')) {\r
+                                                       if (isMediaElm(n))\r
+                                                               n.className = n.className.replace(/mceItem/g, 'mceTemp');\r
+\r
+                                                       return;\r
+                                               }\r
+\r
+                                               switch (n.className) {\r
+                                                       case 'mceItemFlash':\r
+                                                               ci = 'd27cdb6e-ae6d-11cf-96b8-444553540000';\r
+                                                               cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
+                                                               mt = 'application/x-shockwave-flash';\r
+                                                               break;\r
+\r
+                                                       case 'mceItemShockWave':\r
+                                                               ci = '166b1bca-3f9c-11cf-8075-444553540000';\r
+                                                               cb = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';\r
+                                                               mt = 'application/x-director';\r
+                                                               break;\r
+\r
+                                                       case 'mceItemWindowsMedia':\r
+                                                               ci = ed.getParam('media_wmp6_compatible') ? '05589fa1-c356-11ce-bf01-00aa0055595a' : '6bf52a52-394a-11d3-b153-00c04f79faa6';\r
+                                                               cb = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
+                                                               mt = 'application/x-mplayer2';\r
+                                                               break;\r
+\r
+                                                       case 'mceItemQuickTime':\r
+                                                               ci = '02bf25d5-8c17-4b23-bc80-d3488abddc6b';\r
+                                                               cb = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';\r
+                                                               mt = 'video/quicktime';\r
+                                                               break;\r
+\r
+                                                       case 'mceItemRealMedia':\r
+                                                               ci = 'cfcdaa03-8be4-11cf-b84b-0020afbbccfa';\r
+                                                               cb = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
+                                                               mt = 'audio/x-pn-realaudio-plugin';\r
+                                                               break;\r
+                                               }\r
+\r
+                                               if (ci) {\r
+                                                       dom.replace(t._buildObj({\r
+                                                               classid : ci,\r
+                                                               codebase : cb,\r
+                                                               type : mt\r
+                                                       }, n), n);\r
+                                               }\r
+                                       });\r
+                               }\r
+                       });\r
+\r
+                       ed.onPostProcess.add(function(ed, o) {\r
+                               o.content = o.content.replace(/_mce_value=/g, 'value=');\r
+                       });\r
+\r
+                       function getAttr(s, n) {\r
+                               n = new RegExp(n + '=\"([^\"]+)\"', 'g').exec(s);\r
+\r
+                               return n ? ed.dom.decode(n[1]) : '';\r
+                       };\r
+\r
+                       ed.onPostProcess.add(function(ed, o) {\r
+                               if (ed.getParam('media_use_script')) {\r
+                                       o.content = o.content.replace(/<img[^>]+>/g, function(im) {\r
+                                               var cl = getAttr(im, 'class');\r
+\r
+                                               if (/^(mceTempFlash|mceTempShockWave|mceTempWindowsMedia|mceTempQuickTime|mceTempRealMedia)$/.test(cl)) {\r
+                                                       at = t._parse(getAttr(im, 'title'));\r
+                                                       at.width = getAttr(im, 'width');\r
+                                                       at.height = getAttr(im, 'height');\r
+                                                       im = '<script type="text/javascript">write' + cl.substring(7) + '({' + t._serialize(at) + '});</script>';\r
+                                               }\r
+\r
+                                               return im;\r
+                                       });\r
+                               }\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Media',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/media',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+               _objectsToSpans : function(ed, o) {\r
+                       var t = this, h = o.content;\r
+\r
+                       h = h.replace(/<script[^>]*>\s*write(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)\(\{([^\)]*)\}\);\s*<\/script>/gi, function(a, b, c) {\r
+                               var o = t._parse(c);\r
+\r
+                               return '<img class="mceItem' + b + '" title="' + ed.dom.encode(c) + '" src="' + t.url + '/img/trans.gif" width="' + o.width + '" height="' + o.height + '" />'\r
+                       });\r
+\r
+                       h = h.replace(/<object([^>]*)>/gi, '<span class="mceItemObject" $1>');\r
+                       h = h.replace(/<embed([^>]*)\/?>/gi, '<span class="mceItemEmbed" $1></span>');\r
+                       h = h.replace(/<embed([^>]*)>/gi, '<span class="mceItemEmbed" $1>');\r
+                       h = h.replace(/<\/(object)([^>]*)>/gi, '</span>');\r
+                       h = h.replace(/<\/embed>/gi, '');\r
+                       h = h.replace(/<param([^>]*)>/gi, function(a, b) {return '<span ' + b.replace(/value=/gi, '_mce_value=') + ' class="mceItemParam"></span>'});\r
+                       h = h.replace(/\/ class=\"mceItemParam\"><\/span>/gi, 'class="mceItemParam"></span>');\r
+\r
+                       o.content = h;\r
+               },\r
+\r
+               _buildObj : function(o, n) {\r
+                       var ob, ed = this.editor, dom = ed.dom, p = this._parse(n.title), stc;\r
+                       \r
+                       stc = ed.getParam('media_strict', true) && o.type == 'application/x-shockwave-flash';\r
+\r
+                       p.width = o.width = dom.getAttrib(n, 'width') || 100;\r
+                       p.height = o.height = dom.getAttrib(n, 'height') || 100;\r
+\r
+                       if (p.src)\r
+                               p.src = ed.convertURL(p.src, 'src', n);\r
+\r
+                       if (stc) {\r
+                               ob = dom.create('span', {\r
+                                       id : p.id,\r
+                                       _mce_name : 'object',\r
+                                       type : 'application/x-shockwave-flash',\r
+                                       data : p.src,\r
+                                       style : dom.getAttrib(n, 'style'),\r
+                                       width : o.width,\r
+                                       height : o.height\r
+                               });\r
+                       } else {\r
+                               ob = dom.create('span', {\r
+                                       id : p.id,\r
+                                       _mce_name : 'object',\r
+                                       classid : "clsid:" + o.classid,\r
+                                       style : dom.getAttrib(n, 'style'),\r
+                                       codebase : o.codebase,\r
+                                       width : o.width,\r
+                                       height : o.height\r
+                               });\r
+                       }\r
+\r
+                       each (p, function(v, k) {\r
+                               if (!/^(width|height|codebase|classid|id|_cx|_cy)$/.test(k)) {\r
+                                       // Use url instead of src in IE for Windows media\r
+                                       if (o.type == 'application/x-mplayer2' && k == 'src' && !p.url)\r
+                                               k = 'url';\r
+\r
+                                       if (v)\r
+                                               dom.add(ob, 'span', {_mce_name : 'param', name : k, '_mce_value' : v});\r
+                               }\r
+                       });\r
+\r
+                       if (!stc)\r
+                               dom.add(ob, 'span', tinymce.extend({_mce_name : 'embed', type : o.type, style : dom.getAttrib(n, 'style')}, p));\r
+\r
+                       return ob;\r
+               },\r
+\r
+               _spansToImgs : function(p) {\r
+                       var t = this, dom = t.editor.dom, im, ci;\r
+\r
+                       each(dom.select('span', p), function(n) {\r
+                               // Convert object into image\r
+                               if (dom.getAttrib(n, 'class') == 'mceItemObject') {\r
+                                       ci = dom.getAttrib(n, "classid").toLowerCase().replace(/\s+/g, '');\r
+\r
+                                       switch (ci) {\r
+                                               case 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000':\r
+                                                       dom.replace(t._createImg('mceItemFlash', n), n);\r
+                                                       break;\r
+\r
+                                               case 'clsid:166b1bca-3f9c-11cf-8075-444553540000':\r
+                                                       dom.replace(t._createImg('mceItemShockWave', n), n);\r
+                                                       break;\r
+\r
+                                               case 'clsid:6bf52a52-394a-11d3-b153-00c04f79faa6':\r
+                                               case 'clsid:22d6f312-b0f6-11d0-94ab-0080c74c7e95':\r
+                                               case 'clsid:05589fa1-c356-11ce-bf01-00aa0055595a':\r
+                                                       dom.replace(t._createImg('mceItemWindowsMedia', n), n);\r
+                                                       break;\r
+\r
+                                               case 'clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b':\r
+                                                       dom.replace(t._createImg('mceItemQuickTime', n), n);\r
+                                                       break;\r
+\r
+                                               case 'clsid:cfcdaa03-8be4-11cf-b84b-0020afbbccfa':\r
+                                                       dom.replace(t._createImg('mceItemRealMedia', n), n);\r
+                                                       break;\r
+\r
+                                               default:\r
+                                                       dom.replace(t._createImg('mceItemFlash', n), n);\r
+                                       }\r
+                                       \r
+                                       return;\r
+                               }\r
+\r
+                               // Convert embed into image\r
+                               if (dom.getAttrib(n, 'class') == 'mceItemEmbed') {\r
+                                       switch (dom.getAttrib(n, 'type')) {\r
+                                               case 'application/x-shockwave-flash':\r
+                                                       dom.replace(t._createImg('mceItemFlash', n), n);\r
+                                                       break;\r
+\r
+                                               case 'application/x-director':\r
+                                                       dom.replace(t._createImg('mceItemShockWave', n), n);\r
+                                                       break;\r
+\r
+                                               case 'application/x-mplayer2':\r
+                                                       dom.replace(t._createImg('mceItemWindowsMedia', n), n);\r
+                                                       break;\r
+\r
+                                               case 'video/quicktime':\r
+                                                       dom.replace(t._createImg('mceItemQuickTime', n), n);\r
+                                                       break;\r
+\r
+                                               case 'audio/x-pn-realaudio-plugin':\r
+                                                       dom.replace(t._createImg('mceItemRealMedia', n), n);\r
+                                                       break;\r
+\r
+                                               default:\r
+                                                       dom.replace(t._createImg('mceItemFlash', n), n);\r
+                                       }\r
+                               }                       \r
+                       });\r
+               },\r
+\r
+               _createImg : function(cl, n) {\r
+                       var im, dom = this.editor.dom, pa = {}, ti = '', args;\r
+\r
+                       args = ['id', 'name', 'width', 'height', 'bgcolor', 'align', 'flashvars', 'src', 'wmode', 'allowfullscreen', 'quality', 'data'];        \r
+\r
+                       // Create image\r
+                       im = dom.create('img', {\r
+                               src : this.url + '/img/trans.gif',\r
+                               width : dom.getAttrib(n, 'width') || 100,\r
+                               height : dom.getAttrib(n, 'height') || 100,\r
+                               style : dom.getAttrib(n, 'style'),\r
+                               'class' : cl\r
+                       });\r
+\r
+                       // Setup base parameters\r
+                       each(args, function(na) {\r
+                               var v = dom.getAttrib(n, na);\r
+\r
+                               if (v)\r
+                                       pa[na] = v;\r
+                       });\r
+\r
+                       // Add optional parameters\r
+                       each(dom.select('span', n), function(n) {\r
+                               if (dom.hasClass(n, 'mceItemParam'))\r
+                                       pa[dom.getAttrib(n, 'name')] = dom.getAttrib(n, '_mce_value');\r
+                       });\r
+\r
+                       // Use src not movie\r
+                       if (pa.movie) {\r
+                               pa.src = pa.movie;\r
+                               delete pa.movie;\r
+                       }\r
+\r
+                       // No src try data\r
+                       if (!pa.src) {\r
+                               pa.src = pa.data;\r
+                               delete pa.data;\r
+                       }\r
+\r
+                       // Merge with embed args\r
+                       n = dom.select('.mceItemEmbed', n)[0];\r
+                       if (n) {\r
+                               each(args, function(na) {\r
+                                       var v = dom.getAttrib(n, na);\r
+\r
+                                       if (v && !pa[na])\r
+                                               pa[na] = v;\r
+                               });\r
+                       }\r
+\r
+                       delete pa.width;\r
+                       delete pa.height;\r
+\r
+                       im.title = this._serialize(pa);\r
+\r
+                       return im;\r
+               },\r
+\r
+               _parse : function(s) {\r
+                       return tinymce.util.JSON.parse('{' + s + '}');\r
+               },\r
+\r
+               _serialize : function(o) {\r
+                       return tinymce.util.JSON.serialize(o).replace(/[{}]/g, '');\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('media', tinymce.plugins.MediaPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/img/flash.gif b/plugins/TinyMCE/js/plugins/media/img/flash.gif
new file mode 100644 (file)
index 0000000..cb192e6
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/flash.gif differ
diff --git a/plugins/TinyMCE/js/plugins/media/img/flv_player.swf b/plugins/TinyMCE/js/plugins/media/img/flv_player.swf
new file mode 100644 (file)
index 0000000..042c2ab
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/flv_player.swf differ
diff --git a/plugins/TinyMCE/js/plugins/media/img/quicktime.gif b/plugins/TinyMCE/js/plugins/media/img/quicktime.gif
new file mode 100644 (file)
index 0000000..3b04991
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/quicktime.gif differ
diff --git a/plugins/TinyMCE/js/plugins/media/img/realmedia.gif b/plugins/TinyMCE/js/plugins/media/img/realmedia.gif
new file mode 100644 (file)
index 0000000..fdfe0b9
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/realmedia.gif differ
diff --git a/plugins/TinyMCE/js/plugins/media/img/shockwave.gif b/plugins/TinyMCE/js/plugins/media/img/shockwave.gif
new file mode 100644 (file)
index 0000000..5f235df
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/shockwave.gif differ
diff --git a/plugins/TinyMCE/js/plugins/media/img/trans.gif b/plugins/TinyMCE/js/plugins/media/img/trans.gif
new file mode 100644 (file)
index 0000000..3884865
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/trans.gif differ
diff --git a/plugins/TinyMCE/js/plugins/media/img/windowsmedia.gif b/plugins/TinyMCE/js/plugins/media/img/windowsmedia.gif
new file mode 100644 (file)
index 0000000..ab50f2d
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/media/img/windowsmedia.gif differ
diff --git a/plugins/TinyMCE/js/plugins/media/js/embed.js b/plugins/TinyMCE/js/plugins/media/js/embed.js
new file mode 100644 (file)
index 0000000..f8dc810
--- /dev/null
@@ -0,0 +1,73 @@
+/**\r
+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.\r
+ */\r
+\r
+function writeFlash(p) {\r
+       writeEmbed(\r
+               'D27CDB6E-AE6D-11cf-96B8-444553540000',\r
+               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
+               'application/x-shockwave-flash',\r
+               p\r
+       );\r
+}\r
+\r
+function writeShockWave(p) {\r
+       writeEmbed(\r
+       '166B1BCA-3F9C-11CF-8075-444553540000',\r
+       'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',\r
+       'application/x-director',\r
+               p\r
+       );\r
+}\r
+\r
+function writeQuickTime(p) {\r
+       writeEmbed(\r
+               '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',\r
+               'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',\r
+               'video/quicktime',\r
+               p\r
+       );\r
+}\r
+\r
+function writeRealMedia(p) {\r
+       writeEmbed(\r
+               'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',\r
+               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
+               'audio/x-pn-realaudio-plugin',\r
+               p\r
+       );\r
+}\r
+\r
+function writeWindowsMedia(p) {\r
+       p.url = p.src;\r
+       writeEmbed(\r
+               '6BF52A52-394A-11D3-B153-00C04F79FAA6',\r
+               'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',\r
+               'application/x-mplayer2',\r
+               p\r
+       );\r
+}\r
+\r
+function writeEmbed(cls, cb, mt, p) {\r
+       var h = '', n;\r
+\r
+       h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
+       h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';\r
+       h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';\r
+       h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';\r
+       h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';\r
+       h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';\r
+       h += '>';\r
+\r
+       for (n in p)\r
+               h += '<param name="' + n + '" value="' + p[n] + '">';\r
+\r
+       h += '<embed type="' + mt + '"';\r
+\r
+       for (n in p)\r
+               h += n + '="' + p[n] + '" ';\r
+\r
+       h += '></embed></object>';\r
+\r
+       document.write(h);\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/media/js/media.js b/plugins/TinyMCE/js/plugins/media/js/media.js
new file mode 100644 (file)
index 0000000..86cfa98
--- /dev/null
@@ -0,0 +1,630 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var oldWidth, oldHeight, ed, url;\r
+\r
+if (url = tinyMCEPopup.getParam("media_external_list_url"))\r
+       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+\r
+function init() {\r
+       var pl = "", f, val;\r
+       var type = "flash", fe, i;\r
+\r
+       ed = tinyMCEPopup.editor;\r
+\r
+       tinyMCEPopup.resizeToInnerSize();\r
+       f = document.forms[0]\r
+\r
+       fe = ed.selection.getNode();\r
+       if (/mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {\r
+               pl = fe.title;\r
+\r
+               switch (ed.dom.getAttrib(fe, 'class')) {\r
+                       case 'mceItemFlash':\r
+                               type = 'flash';\r
+                               break;\r
+\r
+                       case 'mceItemFlashVideo':\r
+                               type = 'flv';\r
+                               break;\r
+\r
+                       case 'mceItemShockWave':\r
+                               type = 'shockwave';\r
+                               break;\r
+\r
+                       case 'mceItemWindowsMedia':\r
+                               type = 'wmp';\r
+                               break;\r
+\r
+                       case 'mceItemQuickTime':\r
+                               type = 'qt';\r
+                               break;\r
+\r
+                       case 'mceItemRealMedia':\r
+                               type = 'rmp';\r
+                               break;\r
+               }\r
+\r
+               document.forms[0].insert.value = ed.getLang('update', 'Insert', true); \r
+       }\r
+\r
+       document.getElementById('filebrowsercontainer').innerHTML = getBrowserHTML('filebrowser','src','media','media');\r
+       document.getElementById('qtsrcfilebrowsercontainer').innerHTML = getBrowserHTML('qtsrcfilebrowser','qt_qtsrc','media','media');\r
+       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+\r
+       var html = getMediaListHTML('medialist','src','media','media');\r
+       if (html == "")\r
+               document.getElementById("linklistrow").style.display = 'none';\r
+       else\r
+               document.getElementById("linklistcontainer").innerHTML = html;\r
+\r
+       // Resize some elements\r
+       if (isVisible('filebrowser'))\r
+               document.getElementById('src').style.width = '230px';\r
+\r
+       // Setup form\r
+       if (pl != "") {\r
+               pl = tinyMCEPopup.editor.plugins.media._parse(pl);\r
+\r
+               switch (type) {\r
+                       case "flash":\r
+                               setBool(pl, 'flash', 'play');\r
+                               setBool(pl, 'flash', 'loop');\r
+                               setBool(pl, 'flash', 'menu');\r
+                               setBool(pl, 'flash', 'swliveconnect');\r
+                               setStr(pl, 'flash', 'quality');\r
+                               setStr(pl, 'flash', 'scale');\r
+                               setStr(pl, 'flash', 'salign');\r
+                               setStr(pl, 'flash', 'wmode');\r
+                               setStr(pl, 'flash', 'base');\r
+                               setStr(pl, 'flash', 'flashvars');\r
+                       break;\r
+\r
+                       case "qt":\r
+                               setBool(pl, 'qt', 'loop');\r
+                               setBool(pl, 'qt', 'autoplay');\r
+                               setBool(pl, 'qt', 'cache');\r
+                               setBool(pl, 'qt', 'controller');\r
+                               setBool(pl, 'qt', 'correction');\r
+                               setBool(pl, 'qt', 'enablejavascript');\r
+                               setBool(pl, 'qt', 'kioskmode');\r
+                               setBool(pl, 'qt', 'autohref');\r
+                               setBool(pl, 'qt', 'playeveryframe');\r
+                               setBool(pl, 'qt', 'tarsetcache');\r
+                               setStr(pl, 'qt', 'scale');\r
+                               setStr(pl, 'qt', 'starttime');\r
+                               setStr(pl, 'qt', 'endtime');\r
+                               setStr(pl, 'qt', 'tarset');\r
+                               setStr(pl, 'qt', 'qtsrcchokespeed');\r
+                               setStr(pl, 'qt', 'volume');\r
+                               setStr(pl, 'qt', 'qtsrc');\r
+                       break;\r
+\r
+                       case "shockwave":\r
+                               setBool(pl, 'shockwave', 'sound');\r
+                               setBool(pl, 'shockwave', 'progress');\r
+                               setBool(pl, 'shockwave', 'autostart');\r
+                               setBool(pl, 'shockwave', 'swliveconnect');\r
+                               setStr(pl, 'shockwave', 'swvolume');\r
+                               setStr(pl, 'shockwave', 'swstretchstyle');\r
+                               setStr(pl, 'shockwave', 'swstretchhalign');\r
+                               setStr(pl, 'shockwave', 'swstretchvalign');\r
+                       break;\r
+\r
+                       case "wmp":\r
+                               setBool(pl, 'wmp', 'autostart');\r
+                               setBool(pl, 'wmp', 'enabled');\r
+                               setBool(pl, 'wmp', 'enablecontextmenu');\r
+                               setBool(pl, 'wmp', 'fullscreen');\r
+                               setBool(pl, 'wmp', 'invokeurls');\r
+                               setBool(pl, 'wmp', 'mute');\r
+                               setBool(pl, 'wmp', 'stretchtofit');\r
+                               setBool(pl, 'wmp', 'windowlessvideo');\r
+                               setStr(pl, 'wmp', 'balance');\r
+                               setStr(pl, 'wmp', 'baseurl');\r
+                               setStr(pl, 'wmp', 'captioningid');\r
+                               setStr(pl, 'wmp', 'currentmarker');\r
+                               setStr(pl, 'wmp', 'currentposition');\r
+                               setStr(pl, 'wmp', 'defaultframe');\r
+                               setStr(pl, 'wmp', 'playcount');\r
+                               setStr(pl, 'wmp', 'rate');\r
+                               setStr(pl, 'wmp', 'uimode');\r
+                               setStr(pl, 'wmp', 'volume');\r
+                       break;\r
+\r
+                       case "rmp":\r
+                               setBool(pl, 'rmp', 'autostart');\r
+                               setBool(pl, 'rmp', 'loop');\r
+                               setBool(pl, 'rmp', 'autogotourl');\r
+                               setBool(pl, 'rmp', 'center');\r
+                               setBool(pl, 'rmp', 'imagestatus');\r
+                               setBool(pl, 'rmp', 'maintainaspect');\r
+                               setBool(pl, 'rmp', 'nojava');\r
+                               setBool(pl, 'rmp', 'prefetch');\r
+                               setBool(pl, 'rmp', 'shuffle');\r
+                               setStr(pl, 'rmp', 'console');\r
+                               setStr(pl, 'rmp', 'controls');\r
+                               setStr(pl, 'rmp', 'numloop');\r
+                               setStr(pl, 'rmp', 'scriptcallbacks');\r
+                       break;\r
+               }\r
+\r
+               setStr(pl, null, 'src');\r
+               setStr(pl, null, 'id');\r
+               setStr(pl, null, 'name');\r
+               setStr(pl, null, 'vspace');\r
+               setStr(pl, null, 'hspace');\r
+               setStr(pl, null, 'bgcolor');\r
+               setStr(pl, null, 'align');\r
+               setStr(pl, null, 'width');\r
+               setStr(pl, null, 'height');\r
+\r
+               if ((val = ed.dom.getAttrib(fe, "width")) != "")\r
+                       pl.width = f.width.value = val;\r
+\r
+               if ((val = ed.dom.getAttrib(fe, "height")) != "")\r
+                       pl.height = f.height.value = val;\r
+\r
+               oldWidth = pl.width ? parseInt(pl.width) : 0;\r
+               oldHeight = pl.height ? parseInt(pl.height) : 0;\r
+       } else\r
+               oldWidth = oldHeight = 0;\r
+\r
+       selectByValue(f, 'media_type', type);\r
+       changedType(type);\r
+       updateColor('bgcolor_pick', 'bgcolor');\r
+\r
+       TinyMCE_EditableSelects.init();\r
+       generatePreview();\r
+}\r
+\r
+function insertMedia() {\r
+       var fe, f = document.forms[0], h;\r
+\r
+       tinyMCEPopup.restoreSelection();\r
+\r
+       if (!AutoValidator.validate(f)) {\r
+               tinyMCEPopup.alert(ed.getLang('invalid_data'));\r
+               return false;\r
+       }\r
+\r
+       f.width.value = f.width.value == "" ? 100 : f.width.value;\r
+       f.height.value = f.height.value == "" ? 100 : f.height.value;\r
+\r
+       fe = ed.selection.getNode();\r
+       if (fe != null && /mceItem(Flash|ShockWave|WindowsMedia|QuickTime|RealMedia)/.test(ed.dom.getAttrib(fe, 'class'))) {\r
+               switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+                       case "flash":\r
+                               fe.className = "mceItemFlash";\r
+                               break;\r
+\r
+                       case "flv":\r
+                               fe.className = "mceItemFlashVideo";\r
+                               break;\r
+\r
+                       case "shockwave":\r
+                               fe.className = "mceItemShockWave";\r
+                               break;\r
+\r
+                       case "qt":\r
+                               fe.className = "mceItemQuickTime";\r
+                               break;\r
+\r
+                       case "wmp":\r
+                               fe.className = "mceItemWindowsMedia";\r
+                               break;\r
+\r
+                       case "rmp":\r
+                               fe.className = "mceItemRealMedia";\r
+                               break;\r
+               }\r
+\r
+               if (fe.width != f.width.value || fe.height != f.height.value)\r
+                       ed.execCommand('mceRepaint');\r
+\r
+               fe.title = serializeParameters();\r
+               fe.width = f.width.value;\r
+               fe.height = f.height.value;\r
+               fe.style.width = f.width.value + (f.width.value.indexOf('%') == -1 ? 'px' : '');\r
+               fe.style.height = f.height.value + (f.height.value.indexOf('%') == -1 ? 'px' : '');\r
+               fe.align = f.align.options[f.align.selectedIndex].value;\r
+       } else {\r
+               h = '<img src="' + tinyMCEPopup.getWindowArg("plugin_url") + '/img/trans.gif"' ;\r
+\r
+               switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+                       case "flash":\r
+                               h += ' class="mceItemFlash"';\r
+                               break;\r
+\r
+                       case "flv":\r
+                               h += ' class="mceItemFlashVideo"';\r
+                               break;\r
+\r
+                       case "shockwave":\r
+                               h += ' class="mceItemShockWave"';\r
+                               break;\r
+\r
+                       case "qt":\r
+                               h += ' class="mceItemQuickTime"';\r
+                               break;\r
+\r
+                       case "wmp":\r
+                               h += ' class="mceItemWindowsMedia"';\r
+                               break;\r
+\r
+                       case "rmp":\r
+                               h += ' class="mceItemRealMedia"';\r
+                               break;\r
+               }\r
+\r
+               h += ' title="' + serializeParameters() + '"';\r
+               h += ' width="' + f.width.value + '"';\r
+               h += ' height="' + f.height.value + '"';\r
+               h += ' align="' + f.align.options[f.align.selectedIndex].value + '"';\r
+\r
+               h += ' />';\r
+\r
+               ed.execCommand('mceInsertContent', false, h);\r
+       }\r
+\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function updatePreview() {\r
+       var f = document.forms[0], type;\r
+\r
+       f.width.value = f.width.value || '320';\r
+       f.height.value = f.height.value || '240';\r
+\r
+       type = getType(f.src.value);\r
+       selectByValue(f, 'media_type', type);\r
+       changedType(type);\r
+       generatePreview();\r
+}\r
+\r
+function getMediaListHTML() {\r
+       if (typeof(tinyMCEMediaList) != "undefined" && tinyMCEMediaList.length > 0) {\r
+               var html = "";\r
+\r
+               html += '<select id="linklist" name="linklist" style="width: 250px" onchange="this.form.src.value=this.options[this.selectedIndex].value;updatePreview();">';\r
+               html += '<option value="">---</option>';\r
+\r
+               for (var i=0; i<tinyMCEMediaList.length; i++)\r
+                       html += '<option value="' + tinyMCEMediaList[i][1] + '">' + tinyMCEMediaList[i][0] + '</option>';\r
+\r
+               html += '</select>';\r
+\r
+               return html;\r
+       }\r
+\r
+       return "";\r
+}\r
+\r
+function getType(v) {\r
+       var fo, i, c, el, x, f = document.forms[0];\r
+\r
+       fo = ed.getParam("media_types", "flash=swf;flv=flv;shockwave=dcr;qt=mov,qt,mpg,mp3,mp4,mpeg;shockwave=dcr;wmp=avi,wmv,wm,asf,asx,wmx,wvx;rmp=rm,ra,ram").split(';');\r
+\r
+       // YouTube\r
+       if (v.match(/watch\?v=(.+)(.*)/)) {\r
+               f.width.value = '425';\r
+               f.height.value = '350';\r
+               f.src.value = 'http://www.youtube.com/v/' + v.match(/v=(.*)(.*)/)[0].split('=')[1];\r
+               return 'flash';\r
+       }\r
+\r
+       // Google video\r
+       if (v.indexOf('http://video.google.com/videoplay?docid=') == 0) {\r
+               f.width.value = '425';\r
+               f.height.value = '326';\r
+               f.src.value = 'http://video.google.com/googleplayer.swf?docId=' + v.substring('http://video.google.com/videoplay?docid='.length) + '&hl=en';\r
+               return 'flash';\r
+       }\r
+\r
+       for (i=0; i<fo.length; i++) {\r
+               c = fo[i].split('=');\r
+\r
+               el = c[1].split(',');\r
+               for (x=0; x<el.length; x++)\r
+               if (v.indexOf('.' + el[x]) != -1)\r
+                       return c[0];\r
+       }\r
+\r
+       return null;\r
+}\r
+\r
+function switchType(v) {\r
+       var t = getType(v), d = document, f = d.forms[0];\r
+\r
+       if (!t)\r
+               return;\r
+\r
+       selectByValue(d.forms[0], 'media_type', t);\r
+       changedType(t);\r
+\r
+       // Update qtsrc also\r
+       if (t == 'qt' && f.src.value.toLowerCase().indexOf('rtsp://') != -1) {\r
+               alert(ed.getLang("media_qt_stream_warn"));\r
+\r
+               if (f.qt_qtsrc.value == '')\r
+                       f.qt_qtsrc.value = f.src.value;\r
+       }\r
+}\r
+\r
+function changedType(t) {\r
+       var d = document;\r
+\r
+       d.getElementById('flash_options').style.display = 'none';\r
+       d.getElementById('flv_options').style.display = 'none';\r
+       d.getElementById('qt_options').style.display = 'none';\r
+       d.getElementById('shockwave_options').style.display = 'none';\r
+       d.getElementById('wmp_options').style.display = 'none';\r
+       d.getElementById('rmp_options').style.display = 'none';\r
+\r
+       if (t)\r
+               d.getElementById(t + '_options').style.display = 'block';\r
+}\r
+\r
+function serializeParameters() {\r
+       var d = document, f = d.forms[0], s = '';\r
+\r
+       switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+               case "flash":\r
+                       s += getBool('flash', 'play', true);\r
+                       s += getBool('flash', 'loop', true);\r
+                       s += getBool('flash', 'menu', true);\r
+                       s += getBool('flash', 'swliveconnect', false);\r
+                       s += getStr('flash', 'quality');\r
+                       s += getStr('flash', 'scale');\r
+                       s += getStr('flash', 'salign');\r
+                       s += getStr('flash', 'wmode');\r
+                       s += getStr('flash', 'base');\r
+                       s += getStr('flash', 'flashvars');\r
+               break;\r
+\r
+               case "qt":\r
+                       s += getBool('qt', 'loop', false);\r
+                       s += getBool('qt', 'autoplay', true);\r
+                       s += getBool('qt', 'cache', false);\r
+                       s += getBool('qt', 'controller', true);\r
+                       s += getBool('qt', 'correction', false, 'none', 'full');\r
+                       s += getBool('qt', 'enablejavascript', false);\r
+                       s += getBool('qt', 'kioskmode', false);\r
+                       s += getBool('qt', 'autohref', false);\r
+                       s += getBool('qt', 'playeveryframe', false);\r
+                       s += getBool('qt', 'targetcache', false);\r
+                       s += getStr('qt', 'scale');\r
+                       s += getStr('qt', 'starttime');\r
+                       s += getStr('qt', 'endtime');\r
+                       s += getStr('qt', 'target');\r
+                       s += getStr('qt', 'qtsrcchokespeed');\r
+                       s += getStr('qt', 'volume');\r
+                       s += getStr('qt', 'qtsrc');\r
+               break;\r
+\r
+               case "shockwave":\r
+                       s += getBool('shockwave', 'sound');\r
+                       s += getBool('shockwave', 'progress');\r
+                       s += getBool('shockwave', 'autostart');\r
+                       s += getBool('shockwave', 'swliveconnect');\r
+                       s += getStr('shockwave', 'swvolume');\r
+                       s += getStr('shockwave', 'swstretchstyle');\r
+                       s += getStr('shockwave', 'swstretchhalign');\r
+                       s += getStr('shockwave', 'swstretchvalign');\r
+               break;\r
+\r
+               case "wmp":\r
+                       s += getBool('wmp', 'autostart', true);\r
+                       s += getBool('wmp', 'enabled', false);\r
+                       s += getBool('wmp', 'enablecontextmenu', true);\r
+                       s += getBool('wmp', 'fullscreen', false);\r
+                       s += getBool('wmp', 'invokeurls', true);\r
+                       s += getBool('wmp', 'mute', false);\r
+                       s += getBool('wmp', 'stretchtofit', false);\r
+                       s += getBool('wmp', 'windowlessvideo', false);\r
+                       s += getStr('wmp', 'balance');\r
+                       s += getStr('wmp', 'baseurl');\r
+                       s += getStr('wmp', 'captioningid');\r
+                       s += getStr('wmp', 'currentmarker');\r
+                       s += getStr('wmp', 'currentposition');\r
+                       s += getStr('wmp', 'defaultframe');\r
+                       s += getStr('wmp', 'playcount');\r
+                       s += getStr('wmp', 'rate');\r
+                       s += getStr('wmp', 'uimode');\r
+                       s += getStr('wmp', 'volume');\r
+               break;\r
+\r
+               case "rmp":\r
+                       s += getBool('rmp', 'autostart', false);\r
+                       s += getBool('rmp', 'loop', false);\r
+                       s += getBool('rmp', 'autogotourl', true);\r
+                       s += getBool('rmp', 'center', false);\r
+                       s += getBool('rmp', 'imagestatus', true);\r
+                       s += getBool('rmp', 'maintainaspect', false);\r
+                       s += getBool('rmp', 'nojava', false);\r
+                       s += getBool('rmp', 'prefetch', false);\r
+                       s += getBool('rmp', 'shuffle', false);\r
+                       s += getStr('rmp', 'console');\r
+                       s += getStr('rmp', 'controls');\r
+                       s += getStr('rmp', 'numloop');\r
+                       s += getStr('rmp', 'scriptcallbacks');\r
+               break;\r
+       }\r
+\r
+       s += getStr(null, 'id');\r
+       s += getStr(null, 'name');\r
+       s += getStr(null, 'src');\r
+       s += getStr(null, 'align');\r
+       s += getStr(null, 'bgcolor');\r
+       s += getInt(null, 'vspace');\r
+       s += getInt(null, 'hspace');\r
+       s += getStr(null, 'width');\r
+       s += getStr(null, 'height');\r
+\r
+       s = s.length > 0 ? s.substring(0, s.length - 1) : s;\r
+\r
+       return s;\r
+}\r
+\r
+function setBool(pl, p, n) {\r
+       if (typeof(pl[n]) == "undefined")\r
+               return;\r
+\r
+       document.forms[0].elements[p + "_" + n].checked = pl[n] != 'false';\r
+}\r
+\r
+function setStr(pl, p, n) {\r
+       var f = document.forms[0], e = f.elements[(p != null ? p + "_" : '') + n];\r
+\r
+       if (typeof(pl[n]) == "undefined")\r
+               return;\r
+\r
+       if (e.type == "text")\r
+               e.value = pl[n];\r
+       else\r
+               selectByValue(f, (p != null ? p + "_" : '') + n, pl[n]);\r
+}\r
+\r
+function getBool(p, n, d, tv, fv) {\r
+       var v = document.forms[0].elements[p + "_" + n].checked;\r
+\r
+       tv = typeof(tv) == 'undefined' ? 'true' : "'" + jsEncode(tv) + "'";\r
+       fv = typeof(fv) == 'undefined' ? 'false' : "'" + jsEncode(fv) + "'";\r
+\r
+       return (v == d) ? '' : n + (v ? ':' + tv + ',' : ":\'" + fv + "\',");\r
+}\r
+\r
+function getStr(p, n, d) {\r
+       var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];\r
+       var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;\r
+\r
+       if (n == 'src')\r
+               v = tinyMCEPopup.editor.convertURL(v, 'src', null);\r
+\r
+       return ((n == d || v == '') ? '' : n + ":'" + jsEncode(v) + "',");\r
+}\r
+\r
+function getInt(p, n, d) {\r
+       var e = document.forms[0].elements[(p != null ? p + "_" : "") + n];\r
+       var v = e.type == "text" ? e.value : e.options[e.selectedIndex].value;\r
+\r
+       return ((n == d || v == '') ? '' : n + ":" + v.replace(/[^0-9]+/g, '') + ",");\r
+}\r
+\r
+function jsEncode(s) {\r
+       s = s.replace(new RegExp('\\\\', 'g'), '\\\\');\r
+       s = s.replace(new RegExp('"', 'g'), '\\"');\r
+       s = s.replace(new RegExp("'", 'g'), "\\'");\r
+\r
+       return s;\r
+}\r
+\r
+function generatePreview(c) {\r
+       var f = document.forms[0], p = document.getElementById('prev'), h = '', cls, pl, n, type, codebase, wp, hp, nw, nh;\r
+\r
+       p.innerHTML = '<!-- x --->';\r
+\r
+       nw = parseInt(f.width.value);\r
+       nh = parseInt(f.height.value);\r
+\r
+       if (f.width.value != "" && f.height.value != "") {\r
+               if (f.constrain.checked) {\r
+                       if (c == 'width' && oldWidth != 0) {\r
+                               wp = nw / oldWidth;\r
+                               nh = Math.round(wp * nh);\r
+                               f.height.value = nh;\r
+                       } else if (c == 'height' && oldHeight != 0) {\r
+                               hp = nh / oldHeight;\r
+                               nw = Math.round(hp * nw);\r
+                               f.width.value = nw;\r
+                       }\r
+               }\r
+       }\r
+\r
+       if (f.width.value != "")\r
+               oldWidth = nw;\r
+\r
+       if (f.height.value != "")\r
+               oldHeight = nh;\r
+\r
+       // After constrain\r
+       pl = serializeParameters();\r
+\r
+       switch (f.media_type.options[f.media_type.selectedIndex].value) {\r
+               case "flash":\r
+                       cls = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';\r
+                       codebase = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0';\r
+                       type = 'application/x-shockwave-flash';\r
+                       break;\r
+\r
+               case "shockwave":\r
+                       cls = 'clsid:166B1BCA-3F9C-11CF-8075-444553540000';\r
+                       codebase = 'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0';\r
+                       type = 'application/x-director';\r
+                       break;\r
+\r
+               case "qt":\r
+                       cls = 'clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B';\r
+                       codebase = 'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0';\r
+                       type = 'video/quicktime';\r
+                       break;\r
+\r
+               case "wmp":\r
+                       cls = ed.getParam('media_wmp6_compatible') ? 'clsid:05589FA1-C356-11CE-BF01-00AA0055595A' : 'clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6';\r
+                       codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
+                       type = 'application/x-mplayer2';\r
+                       break;\r
+\r
+               case "rmp":\r
+                       cls = 'clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA';\r
+                       codebase = 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701';\r
+                       type = 'audio/x-pn-realaudio-plugin';\r
+                       break;\r
+       }\r
+\r
+       if (pl == '') {\r
+               p.innerHTML = '';\r
+               return;\r
+       }\r
+\r
+       pl = tinyMCEPopup.editor.plugins.media._parse(pl);\r
+\r
+       if (!pl.src) {\r
+               p.innerHTML = '';\r
+               return;\r
+       }\r
+\r
+       pl.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(pl.src);\r
+       pl.width = !pl.width ? 100 : pl.width;\r
+       pl.height = !pl.height ? 100 : pl.height;\r
+       pl.id = !pl.id ? 'obj' : pl.id;\r
+       pl.name = !pl.name ? 'eobj' : pl.name;\r
+       pl.align = !pl.align ? '' : pl.align;\r
+\r
+       // Avoid annoying warning about insecure items\r
+       if (!tinymce.isIE || document.location.protocol != 'https:') {\r
+               h += '<object classid="' + cls + '" codebase="' + codebase + '" width="' + pl.width + '" height="' + pl.height + '" id="' + pl.id + '" name="' + pl.name + '" align="' + pl.align + '">';\r
+\r
+               for (n in pl) {\r
+                       h += '<param name="' + n + '" value="' + pl[n] + '">';\r
+\r
+                       // Add extra url parameter if it's an absolute URL\r
+                       if (n == 'src' && pl[n].indexOf('://') != -1)\r
+                               h += '<param name="url" value="' + pl[n] + '" />';\r
+               }\r
+       }\r
+\r
+       h += '<embed type="' + type + '" ';\r
+\r
+       for (n in pl)\r
+               h += n + '="' + pl[n] + '" ';\r
+\r
+       h += '></embed>';\r
+\r
+       // Avoid annoying warning about insecure items\r
+       if (!tinymce.isIE || document.location.protocol != 'https:')\r
+               h += '</object>';\r
+\r
+       p.innerHTML = "<!-- x --->" + h;\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/media/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/media/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..6d0a996
--- /dev/null
@@ -0,0 +1,103 @@
+tinyMCE.addI18n('en.media_dlg',{\r
+title:"Insert / edit embedded media",\r
+general:"General",\r
+advanced:"Advanced",\r
+file:"File/URL",\r
+list:"List",\r
+size:"Dimensions",\r
+preview:"Preview",\r
+constrain_proportions:"Constrain proportions",\r
+type:"Type",\r
+id:"Id",\r
+name:"Name",\r
+class_name:"Class",\r
+vspace:"V-Space",\r
+hspace:"H-Space",\r
+play:"Auto play",\r
+loop:"Loop",\r
+menu:"Show menu",\r
+quality:"Quality",\r
+scale:"Scale",\r
+align:"Align",\r
+salign:"SAlign",\r
+wmode:"WMode",\r
+bgcolor:"Background",\r
+base:"Base",\r
+flashvars:"Flashvars",\r
+liveconnect:"SWLiveConnect",\r
+autohref:"AutoHREF",\r
+cache:"Cache",\r
+hidden:"Hidden",\r
+controller:"Controller",\r
+kioskmode:"Kiosk mode",\r
+playeveryframe:"Play every frame",\r
+targetcache:"Target cache",\r
+correction:"No correction",\r
+enablejavascript:"Enable JavaScript",\r
+starttime:"Start time",\r
+endtime:"End time",\r
+href:"Href",\r
+qtsrcchokespeed:"Choke speed",\r
+target:"Target",\r
+volume:"Volume",\r
+autostart:"Auto start",\r
+enabled:"Enabled",\r
+fullscreen:"Fullscreen",\r
+invokeurls:"Invoke URLs",\r
+mute:"Mute",\r
+stretchtofit:"Stretch to fit",\r
+windowlessvideo:"Windowless video",\r
+balance:"Balance",\r
+baseurl:"Base URL",\r
+captioningid:"Captioning id",\r
+currentmarker:"Current marker",\r
+currentposition:"Current position",\r
+defaultframe:"Default frame",\r
+playcount:"Play count",\r
+rate:"Rate",\r
+uimode:"UI Mode",\r
+flash_options:"Flash options",\r
+qt_options:"Quicktime options",\r
+wmp_options:"Windows media player options",\r
+rmp_options:"Real media player options",\r
+shockwave_options:"Shockwave options",\r
+autogotourl:"Auto goto URL",\r
+center:"Center",\r
+imagestatus:"Image status",\r
+maintainaspect:"Maintain aspect",\r
+nojava:"No java",\r
+prefetch:"Prefetch",\r
+shuffle:"Shuffle",\r
+console:"Console",\r
+numloop:"Num loops",\r
+controls:"Controls",\r
+scriptcallbacks:"Script callbacks",\r
+swstretchstyle:"Stretch style",\r
+swstretchhalign:"Stretch H-Align",\r
+swstretchvalign:"Stretch V-Align",\r
+sound:"Sound",\r
+progress:"Progress",\r
+qtsrc:"QT Src",\r
+qt_stream_warn:"Streamed rtsp resources should be added to the QT Src field under the advanced tab.\nYou should also add a non streamed version to the Src field..",\r
+align_top:"Top",\r
+align_right:"Right",\r
+align_bottom:"Bottom",\r
+align_left:"Left",\r
+align_center:"Center",\r
+align_top_left:"Top left",\r
+align_top_right:"Top right",\r
+align_bottom_left:"Bottom left",\r
+align_bottom_right:"Bottom right",\r
+flv_options:"Flash video options",\r
+flv_scalemode:"Scale mode",\r
+flv_buffer:"Buffer",\r
+flv_startimage:"Start image",\r
+flv_starttime:"Start time",\r
+flv_defaultvolume:"Default volumne",\r
+flv_hiddengui:"Hidden GUI",\r
+flv_autostart:"Auto start",\r
+flv_loop:"Loop",\r
+flv_showscalemodes:"Show scale modes",\r
+flv_smoothvideo:"Smooth video",\r
+flv_jscallback:"JS Callback"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/media/media.htm b/plugins/TinyMCE/js/plugins/media/media.htm
new file mode 100644 (file)
index 0000000..73a903f
--- /dev/null
@@ -0,0 +1,817 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#media_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/media.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/validate.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <link href="css/media.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body style="display: none">\r
+    <form onsubmit="insertMedia();return false;" action="#">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');generatePreview();" onmousedown="return false;">{#media_dlg.general}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#media_dlg.advanced}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <fieldset>\r
+                                       <legend>{#media_dlg.general}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                                       <tr>\r
+                                                               <td><label for="media_type">{#media_dlg.type}</label></td>\r
+                                                               <td>\r
+                                                                       <select id="media_type" name="media_type" onchange="changedType(this.value);generatePreview();">\r
+                                                                               <option value="flash">Flash</option>\r
+                                                                               <!-- <option value="flv">Flash video (FLV)</option> -->\r
+                                                                               <option value="qt">Quicktime</option>\r
+                                                                               <option value="shockwave">Shockwave</option>\r
+                                                                               <option value="wmp">Windows Media</option>\r
+                                                                               <option value="rmp">Real Media</option>\r
+                                                                       </select>\r
+                                                               </td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                       <td><label for="src">{#media_dlg.file}</label></td>\r
+                                                         <td>\r
+                                                                       <table border="0" cellspacing="0" cellpadding="0">\r
+                                                                         <tr>\r
+                                                                               <td><input id="src" name="src" type="text" value="" class="mceFocus" onchange="switchType(this.value);generatePreview();" /></td>\r
+                                                                               <td id="filebrowsercontainer">&nbsp;</td>\r
+                                                                         </tr>\r
+                                                                       </table>\r
+                                                               </td>\r
+                                                       </tr>\r
+                                                       <tr id="linklistrow">\r
+                                                               <td><label for="linklist">{#media_dlg.list}</label></td>\r
+                                                               <td id="linklistcontainer"><select id="linklist"><option value=""></option></select></td>\r
+                                                       </tr>\r
+                                                       <tr>\r
+                                                               <td><label for="width">{#media_dlg.size}</label></td>\r
+                                                               <td>\r
+                                                                       <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                               <tr>\r
+                                                                                       <td><input type="text" id="width" name="width" value="" class="size" onchange="generatePreview('width');" /> x <input type="text" id="height" name="height" value="" class="size"  onchange="generatePreview('height');" /></td>\r
+                                                                                       <td>&nbsp;&nbsp;<input id="constrain" type="checkbox" name="constrain" class="checkbox" /></td>\r
+                                                                                       <td><label id="constrainlabel" for="constrain">{#media_dlg.constrain_proportions}</label></td>\r
+                                                                               </tr>\r
+                                                                       </table>\r
+                                                               </td>\r
+                                                       </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset>\r
+                                       <legend>{#media_dlg.preview}</legend>\r
+                                       <div id="prev"></div>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#media_dlg.advanced}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0" width="100%">\r
+                                               <tr>\r
+                                                       <td><label for="id">{#media_dlg.id}</label></td>\r
+                                                       <td><input type="text" id="id" name="id" onchange="generatePreview();" /></td>\r
+                                                       <td><label for="name">{#media_dlg.name}</label></td>\r
+                                                       <td><input type="text" id="name" name="name" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="align">{#media_dlg.align}</label></td>\r
+                                                       <td>\r
+                                                               <select id="align" name="align" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="top">{#media_dlg.align_top}</option>\r
+                                                                       <option value="right">{#media_dlg.align_right}</option>\r
+                                                                       <option value="bottom">{#media_dlg.align_bottom}</option>\r
+                                                                       <option value="left">{#media_dlg.align_left}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="bgcolor">{#media_dlg.bgcolor}</label></td>\r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');generatePreview();" /></td>\r
+                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="vspace">{#media_dlg.vspace}</label></td>\r
+                                                       <td><input type="text" id="vspace" name="vspace" class="number" onchange="generatePreview();" /></td>\r
+                                                       <td><label for="hspace">{#media_dlg.hspace}</label></td>\r
+                                                       <td><input type="text" id="hspace" name="hspace" class="number" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="flash_options">\r
+                                       <legend>{#media_dlg.flash_options}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td><label for="flash_quality">{#media_dlg.quality}</label></td>\r
+                                                       <td>\r
+                                                               <select id="flash_quality" name="flash_quality" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="high">high</option>\r
+                                                                       <option value="low">low</option>\r
+                                                                       <option value="autolow">autolow</option>\r
+                                                                       <option value="autohigh">autohigh</option>\r
+                                                                       <option value="best">best</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="flash_scale">{#media_dlg.scale}</label></td>\r
+                                                       <td>\r
+                                                               <select id="flash_scale" name="flash_scale" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="showall">showall</option>\r
+                                                                       <option value="noborder">noborder</option>\r
+                                                                       <option value="exactfit">exactfit</option>\r
+                                                                       <option value="noscale">noscale</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="flash_wmode">{#media_dlg.wmode}</label></td>\r
+                                                       <td>\r
+                                                               <select id="flash_wmode" name="flash_wmode" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="window">window</option>\r
+                                                                       <option value="opaque">opaque</option>\r
+                                                                       <option value="transparent">transparent</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="flash_salign">{#media_dlg.salign}</label></td>\r
+                                                       <td>\r
+                                                               <select id="flash_salign" name="flash_salign" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="l">{#media_dlg.align_left}</option>\r
+                                                                       <option value="t">{#media_dlg.align_top}</option>\r
+                                                                       <option value="r">{#media_dlg.align_right}</option>\r
+                                                                       <option value="b">{#media_dlg.align_bottom}</option>\r
+                                                                       <option value="tl">{#media_dlg.align_top_left}</option>\r
+                                                                       <option value="tr">{#media_dlg.align_top_right}</option>\r
+                                                                       <option value="bl">{#media_dlg.align_bottom_left}</option>\r
+                                                                       <option value="br">{#media_dlg.align_bottom_right}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flash_play" name="flash_play" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flash_play">{#media_dlg.play}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flash_loop" name="flash_loop" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flash_loop">{#media_dlg.loop}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flash_menu" name="flash_menu" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flash_menu">{#media_dlg.menu}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flash_swliveconnect" name="flash_swliveconnect" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flash_swliveconnect">{#media_dlg.liveconnect}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+\r
+                                       <table>\r
+                                               <tr>\r
+                                                       <td><label for="flash_base">{#media_dlg.base}</label></td>\r
+                                                       <td><input type="text" id="flash_base" name="flash_base" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="flash_flashvars">{#media_dlg.flashvars}</label></td>\r
+                                                       <td><input type="text" id="flash_flashvars" name="flash_flashvars" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="flv_options">\r
+                                       <legend>{#media_dlg.flv_options}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td><label for="flv_scalemode">{#media_dlg.flv_scalemode}</label></td>\r
+                                                       <td>\r
+                                                               <select id="flv_scalemode" name="flv_scalemode" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="none">none</option>\r
+                                                                       <option value="double">double</option>\r
+                                                                       <option value="full">full</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="flv_buffer">{#media_dlg.flv_buffer}</label></td>\r
+                                                       <td><input type="text" id="flv_buffer" name="flv_buffer" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="flv_startimage">{#media_dlg.flv_startimage}</label></td>\r
+                                                       <td><input type="text" id="flv_startimage" name="flv_startimage" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="flv_starttime">{#media_dlg.flv_starttime}</label></td>\r
+                                                       <td><input type="text" id="flv_starttime" name="flv_starttime" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="flv_defaultvolume">{#media_dlg.flv_defaultvolume}</label></td>\r
+                                                       <td><input type="text" id="flv_defaultvolume" name="flv_defaultvolume" onchange="generatePreview();" /></td>\r
+\r
+\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flv_hiddengui" name="flv_hiddengui" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flv_hiddengui">{#media_dlg.flv_hiddengui}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flv_autostart" name="flv_autostart" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flv_autostart">{#media_dlg.flv_autostart}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flv_loop" name="flv_loop" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flv_loop">{#media_dlg.flv_loop}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flv_showscalemodes" name="flv_showscalemodes" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flv_showscalemodes">{#media_dlg.flv_showscalemodes}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flv_smoothvideo" name="flash_flv_flv_smoothvideosmoothvideo" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flv_smoothvideo">{#media_dlg.flv_smoothvideo}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="flv_jscallback" name="flv_jscallback" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="flv_jscallback">{#media_dlg.flv_jscallback}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="qt_options">\r
+                                       <legend>{#media_dlg.qt_options}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_loop" name="qt_loop" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_loop">{#media_dlg.loop}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_autoplay" name="qt_autoplay" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_autoplay">{#media_dlg.play}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_cache" name="qt_cache" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_cache">{#media_dlg.cache}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_controller" name="qt_controller" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_controller">{#media_dlg.controller}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_correction" name="qt_correction" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_correction">{#media_dlg.correction}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_enablejavascript" name="qt_enablejavascript" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_enablejavascript">{#media_dlg.enablejavascript}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_kioskmode" name="qt_kioskmode" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_kioskmode">{#media_dlg.kioskmode}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_autohref" name="qt_autohref" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_autohref">{#media_dlg.autohref}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_playeveryframe" name="qt_playeveryframe" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_playeveryframe">{#media_dlg.playeveryframe}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="qt_targetcache" name="qt_targetcache" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="qt_targetcache">{#media_dlg.targetcache}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="qt_scale">{#media_dlg.scale}</label></td>\r
+                                                       <td><select id="qt_scale" name="qt_scale" class="mceEditableSelect" onchange="generatePreview();">\r
+                                                                       <option value="">{#not_set}</option> \r
+                                                                       <option value="tofit">tofit</option>\r
+                                                                       <option value="aspect">aspect</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">&nbsp;</td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="qt_starttime">{#media_dlg.starttime}</label></td>\r
+                                                       <td><input type="text" id="qt_starttime" name="qt_starttime" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="qt_endtime">{#media_dlg.endtime}</label></td>\r
+                                                       <td><input type="text" id="qt_endtime" name="qt_endtime" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="qt_target">{#media_dlg.target}</label></td>\r
+                                                       <td><input type="text" id="qt_target" name="qt_target" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="qt_href">{#media_dlg.href}</label></td>\r
+                                                       <td><input type="text" id="qt_href" name="qt_href" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="qt_qtsrcchokespeed">{#media_dlg.qtsrcchokespeed}</label></td>\r
+                                                       <td><input type="text" id="qt_qtsrcchokespeed" name="qt_qtsrcchokespeed" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="qt_volume">{#media_dlg.volume}</label></td>\r
+                                                       <td><input type="text" id="qt_volume" name="qt_volume" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="qt_qtsrc">{#media_dlg.qtsrc}</label></td>\r
+                                                       <td colspan="4">\r
+                                                       <table border="0" cellspacing="0" cellpadding="0">\r
+                                                                 <tr>\r
+                                                                       <td><input type="text" id="qt_qtsrc" name="qt_qtsrc" onchange="generatePreview();" /></td>\r
+                                                                       <td id="qtsrcfilebrowsercontainer">&nbsp;</td>\r
+                                                                 </tr>\r
+                                                       </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="wmp_options">\r
+                                       <legend>{#media_dlg.wmp_options}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_autostart" name="wmp_autostart" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_autostart">{#media_dlg.autostart}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_enabled" name="wmp_enabled" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_enabled">{#media_dlg.enabled}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_enablecontextmenu" name="wmp_enablecontextmenu" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_enablecontextmenu">{#media_dlg.menu}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_fullscreen" name="wmp_fullscreen" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_fullscreen">{#media_dlg.fullscreen}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_invokeurls" name="wmp_invokeurls" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_invokeurls">{#media_dlg.invokeurls}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_mute" name="wmp_mute" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_mute">{#media_dlg.mute}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_stretchtofit" name="wmp_stretchtofit" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_stretchtofit">{#media_dlg.stretchtofit}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="wmp_windowlessvideo" name="wmp_windowlessvideo" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="wmp_windowlessvideo">{#media_dlg.windowlessvideo}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="wmp_balance">{#media_dlg.balance}</label></td>\r
+                                                       <td><input type="text" id="wmp_balance" name="wmp_balance" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="wmp_baseurl">{#media_dlg.baseurl}</label></td>\r
+                                                       <td><input type="text" id="wmp_baseurl" name="wmp_baseurl" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="wmp_captioningid">{#media_dlg.captioningid}</label></td>\r
+                                                       <td><input type="text" id="wmp_captioningid" name="wmp_captioningid" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="wmp_currentmarker">{#media_dlg.currentmarker}</label></td>\r
+                                                       <td><input type="text" id="wmp_currentmarker" name="wmp_currentmarker" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="wmp_currentposition">{#media_dlg.currentposition}</label></td>\r
+                                                       <td><input type="text" id="wmp_currentposition" name="wmp_currentposition" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="wmp_defaultframe">{#media_dlg.defaultframe}</label></td>\r
+                                                       <td><input type="text" id="wmp_defaultframe" name="wmp_defaultframe" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="wmp_playcount">{#media_dlg.playcount}</label></td>\r
+                                                       <td><input type="text" id="wmp_playcount" name="wmp_playcount" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="wmp_rate">{#media_dlg.rate}</label></td>\r
+                                                       <td><input type="text" id="wmp_rate" name="wmp_rate" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="wmp_uimode">{#media_dlg.uimode}</label></td>\r
+                                                       <td><input type="text" id="wmp_uimode" name="wmp_uimode" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="wmp_volume">{#media_dlg.volume}</label></td>\r
+                                                       <td><input type="text" id="wmp_volume" name="wmp_volume" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="rmp_options">\r
+                                       <legend>{#media_dlg.rmp_options}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_autostart" name="rmp_autostart" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_autostart">{#media_dlg.autostart}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_loop" name="rmp_loop" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_loop">{#media_dlg.loop}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_autogotourl" name="rmp_autogotourl" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_autogotourl">{#media_dlg.autogotourl}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_center" name="rmp_center" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_center">{#media_dlg.center}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_imagestatus" name="rmp_imagestatus" checked="checked" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_imagestatus">{#media_dlg.imagestatus}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_maintainaspect" name="rmp_maintainaspect" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_maintainaspect">{#media_dlg.maintainaspect}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_nojava" name="rmp_nojava" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_nojava">{#media_dlg.nojava}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_prefetch" name="rmp_prefetch" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_prefetch">{#media_dlg.prefetch}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="rmp_shuffle" name="rmp_shuffle" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="rmp_shuffle">{#media_dlg.shuffle}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               &nbsp;\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="rmp_console">{#media_dlg.console}</label></td>\r
+                                                       <td><input type="text" id="rmp_console" name="rmp_console" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="rmp_controls">{#media_dlg.controls}</label></td>\r
+                                                       <td><input type="text" id="rmp_controls" name="rmp_controls" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="rmp_numloop">{#media_dlg.numloop}</label></td>\r
+                                                       <td><input type="text" id="rmp_numloop" name="rmp_numloop" onchange="generatePreview();" /></td>\r
+\r
+                                                       <td><label for="rmp_scriptcallbacks">{#media_dlg.scriptcallbacks}</label></td>\r
+                                                       <td><input type="text" id="rmp_scriptcallbacks" name="rmp_scriptcallbacks" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+\r
+                               <fieldset id="shockwave_options">\r
+                                       <legend>{#media_dlg.shockwave_options}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td><label for="shockwave_swstretchstyle">{#media_dlg.swstretchstyle}</label></td>\r
+                                                       <td>\r
+                                                               <select id="shockwave_swstretchstyle" name="shockwave_swstretchstyle" onchange="generatePreview();">\r
+                                                                       <option value="none">{#not_set}</option>\r
+                                                                       <option value="meet">Meet</option>\r
+                                                                       <option value="fill">Fill</option>\r
+                                                                       <option value="stage">Stage</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="shockwave_swvolume">{#media_dlg.volume}</label></td>\r
+                                                       <td><input type="text" id="shockwave_swvolume" name="shockwave_swvolume" onchange="generatePreview();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="shockwave_swstretchhalign">{#media_dlg.swstretchhalign}</label></td>\r
+                                                       <td>\r
+                                                               <select id="shockwave_swstretchhalign" name="shockwave_swstretchhalign" onchange="generatePreview();">\r
+                                                                       <option value="none">{#not_set}</option>\r
+                                                                       <option value="left">{#media_dlg.align_left}</option>\r
+                                                                       <option value="center">{#media_dlg.align_center}</option>\r
+                                                                       <option value="right">{#media_dlg.align_right}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="shockwave_swstretchvalign">{#media_dlg.swstretchvalign}</label></td>\r
+                                                       <td>\r
+                                                               <select id="shockwave_swstretchvalign" name="shockwave_swstretchvalign" onchange="generatePreview();">\r
+                                                                       <option value="none">{#not_set}</option>\r
+                                                                       <option value="meet">Meet</option>\r
+                                                                       <option value="fill">Fill</option>\r
+                                                                       <option value="stage">Stage</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_autostart" name="shockwave_autostart" onchange="generatePreview();" checked="checked" /></td>\r
+                                                                               <td><label for="shockwave_autostart">{#media_dlg.autostart}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_sound" name="shockwave_sound" onchange="generatePreview();" checked="checked" /></td>\r
+                                                                               <td><label for="shockwave_sound">{#media_dlg.sound}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+\r
+                                               <tr>\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_swliveconnect" name="shockwave_swliveconnect" onchange="generatePreview();" /></td>\r
+                                                                               <td><label for="shockwave_swliveconnect">{#media_dlg.liveconnect}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+\r
+                                                       <td colspan="2">\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input type="checkbox" class="checkbox" id="shockwave_progress" name="shockwave_progress" onchange="generatePreview();" checked="checked" /></td>\r
+                                                                               <td><label for="shockwave_progress">{#media_dlg.progress}</label></td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+       </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin.js b/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin.js
new file mode 100644 (file)
index 0000000..eb40a6a
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.Nonbreaking",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceNonBreaking",function(){a.execCommand("mceInsertContent",false,(a.plugins.visualchars&&a.plugins.visualchars.state)?'<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>':"&nbsp;")});a.addButton("nonbreaking",{title:"nonbreaking.nonbreaking_desc",cmd:"mceNonBreaking"});if(a.getParam("nonbreaking_force_tab")){a.onKeyDown.add(function(d,f){if(tinymce.isIE&&f.keyCode==9){d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");d.execCommand("mceNonBreaking");tinymce.dom.Event.cancel(f)}})}},getInfo:function(){return{longname:"Nonbreaking space",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("nonbreaking",tinymce.plugins.Nonbreaking)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/nonbreaking/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..ca83ee2
--- /dev/null
@@ -0,0 +1,53 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.Nonbreaking', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceNonBreaking', function() {\r
+                               ed.execCommand('mceInsertContent', false, (ed.plugins.visualchars && ed.plugins.visualchars.state) ? '<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">&nbsp;</span>' : '&nbsp;');\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('nonbreaking', {title : 'nonbreaking.nonbreaking_desc', cmd : 'mceNonBreaking'});\r
+\r
+                       if (ed.getParam('nonbreaking_force_tab')) {\r
+                               ed.onKeyDown.add(function(ed, e) {\r
+                                       if (tinymce.isIE && e.keyCode == 9) {\r
+                                               ed.execCommand('mceNonBreaking');\r
+                                               ed.execCommand('mceNonBreaking');\r
+                                               ed.execCommand('mceNonBreaking');\r
+                                               tinymce.dom.Event.cancel(e);\r
+                                       }\r
+                               });\r
+                       }\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Nonbreaking space',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/nonbreaking',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+\r
+               // Private methods\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('nonbreaking', tinymce.plugins.Nonbreaking);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/noneditable/editor_plugin.js b/plugins/TinyMCE/js/plugins/noneditable/editor_plugin.js
new file mode 100644 (file)
index 0000000..9945cd8
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.dom.Event;tinymce.create("tinymce.plugins.NonEditablePlugin",{init:function(d,e){var f=this,c,b;f.editor=d;c=d.getParam("noneditable_editable_class","mceEditable");b=d.getParam("noneditable_noneditable_class","mceNonEditable");d.onNodeChange.addToTop(function(h,g,k){var j,i;j=h.dom.getParent(h.selection.getStart(),function(l){return h.dom.hasClass(l,b)});i=h.dom.getParent(h.selection.getEnd(),function(l){return h.dom.hasClass(l,b)});if(j||i){f._setDisabled(1);return false}else{f._setDisabled(0)}})},getInfo:function(){return{longname:"Non editable elements",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_block:function(c,d){var b=d.keyCode;if((b>32&&b<41)||(b>111&&b<124)){return}return a.cancel(d)},_setDisabled:function(d){var c=this,b=c.editor;tinymce.each(b.controlManager.controls,function(e){e.setDisabled(d)});if(d!==c.disabled){if(d){b.onKeyDown.addToTop(c._block);b.onKeyPress.addToTop(c._block);b.onKeyUp.addToTop(c._block);b.onPaste.addToTop(c._block)}else{b.onKeyDown.remove(c._block);b.onKeyPress.remove(c._block);b.onKeyUp.remove(c._block);b.onPaste.remove(c._block)}c.disabled=d}}});tinymce.PluginManager.add("noneditable",tinymce.plugins.NonEditablePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/noneditable/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/noneditable/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..656c971
--- /dev/null
@@ -0,0 +1,90 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var Event = tinymce.dom.Event;\r
+\r
+       tinymce.create('tinymce.plugins.NonEditablePlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this, editClass, nonEditClass;\r
+\r
+                       t.editor = ed;\r
+                       editClass = ed.getParam("noneditable_editable_class", "mceEditable");\r
+                       nonEditClass = ed.getParam("noneditable_noneditable_class", "mceNonEditable");\r
+\r
+                       ed.onNodeChange.addToTop(function(ed, cm, n) {\r
+                               var sc, ec;\r
+\r
+                               // Block if start or end is inside a non editable element\r
+                               sc = ed.dom.getParent(ed.selection.getStart(), function(n) {\r
+                                       return ed.dom.hasClass(n, nonEditClass);\r
+                               });\r
+\r
+                               ec = ed.dom.getParent(ed.selection.getEnd(), function(n) {\r
+                                       return ed.dom.hasClass(n, nonEditClass);\r
+                               });\r
+\r
+                               // Block or unblock\r
+                               if (sc || ec) {\r
+                                       t._setDisabled(1);\r
+                                       return false;\r
+                               } else\r
+                                       t._setDisabled(0);\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Non editable elements',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/noneditable',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               _block : function(ed, e) {\r
+                       var k = e.keyCode;\r
+\r
+                       // Don't block arrow keys, pg up/down, and F1-F12\r
+                       if ((k > 32 && k < 41) || (k > 111 && k < 124))\r
+                               return;\r
+\r
+                       return Event.cancel(e);\r
+               },\r
+\r
+               _setDisabled : function(s) {\r
+                       var t = this, ed = t.editor;\r
+\r
+                       tinymce.each(ed.controlManager.controls, function(c) {\r
+                               c.setDisabled(s);\r
+                       });\r
+\r
+                       if (s !== t.disabled) {\r
+                               if (s) {\r
+                                       ed.onKeyDown.addToTop(t._block);\r
+                                       ed.onKeyPress.addToTop(t._block);\r
+                                       ed.onKeyUp.addToTop(t._block);\r
+                                       ed.onPaste.addToTop(t._block);\r
+                               } else {\r
+                                       ed.onKeyDown.remove(t._block);\r
+                                       ed.onKeyPress.remove(t._block);\r
+                                       ed.onKeyUp.remove(t._block);\r
+                                       ed.onPaste.remove(t._block);\r
+                               }\r
+\r
+                               t.disabled = s;\r
+                       }\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('noneditable', tinymce.plugins.NonEditablePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/css/content.css b/plugins/TinyMCE/js/plugins/pagebreak/css/content.css
new file mode 100644 (file)
index 0000000..c949d58
--- /dev/null
@@ -0,0 +1 @@
+.mcePageBreak {display:block;border:0;width:100%;height:12px;border-top:1px dotted #ccc;margin-top:15px;background:#fff url(../img/pagebreak.gif) no-repeat center top;}
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin.js b/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin.js
new file mode 100644 (file)
index 0000000..a212f69
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.PageBreakPlugin",{init:function(b,d){var f='<img src="'+d+'/img/trans.gif" class="mcePageBreak mceItemNoResize" />',a="mcePageBreak",c=b.getParam("pagebreak_separator","<!-- pagebreak -->"),e;e=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(g){return"\\"+g}),"g");b.addCommand("mcePageBreak",function(){b.execCommand("mceInsertContent",0,f)});b.addButton("pagebreak",{title:"pagebreak.desc",cmd:a});b.onInit.add(function(){if(b.settings.content_css!==false){b.dom.loadCSS(d+"/css/content.css")}if(b.theme.onResolveName){b.theme.onResolveName.add(function(g,h){if(h.node.nodeName=="IMG"&&b.dom.hasClass(h.node,a)){h.name="pagebreak"}})}});b.onClick.add(function(g,h){h=h.target;if(h.nodeName==="IMG"&&g.dom.hasClass(h,a)){g.selection.select(h)}});b.onNodeChange.add(function(h,g,i){g.setActive("pagebreak",i.nodeName==="IMG"&&h.dom.hasClass(i,a))});b.onBeforeSetContent.add(function(g,h){h.content=h.content.replace(e,f)});b.onPostProcess.add(function(g,h){if(h.get){h.content=h.content.replace(/<img[^>]+>/g,function(i){if(i.indexOf('class="mcePageBreak')!==-1){i=c}return i})}})},getInfo:function(){return{longname:"PageBreak",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("pagebreak",tinymce.plugins.PageBreakPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/pagebreak/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..4e1eb0a
--- /dev/null
@@ -0,0 +1,77 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.PageBreakPlugin', {\r
+               init : function(ed, url) {\r
+                       var pb = '<img src="' + url + '/img/trans.gif" class="mcePageBreak mceItemNoResize" />', cls = 'mcePageBreak', sep = ed.getParam('pagebreak_separator', '<!-- pagebreak -->'), pbRE;\r
+\r
+                       pbRE = new RegExp(sep.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g, function(a) {return '\\' + a;}), 'g');\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mcePageBreak', function() {\r
+                               ed.execCommand('mceInsertContent', 0, pb);\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('pagebreak', {title : 'pagebreak.desc', cmd : cls});\r
+\r
+                       ed.onInit.add(function() {\r
+                               if (ed.settings.content_css !== false)\r
+                                       ed.dom.loadCSS(url + "/css/content.css");\r
+\r
+                               if (ed.theme.onResolveName) {\r
+                                       ed.theme.onResolveName.add(function(th, o) {\r
+                                               if (o.node.nodeName == 'IMG' && ed.dom.hasClass(o.node, cls))\r
+                                                       o.name = 'pagebreak';\r
+                                       });\r
+                               }\r
+                       });\r
+\r
+                       ed.onClick.add(function(ed, e) {\r
+                               e = e.target;\r
+\r
+                               if (e.nodeName === 'IMG' && ed.dom.hasClass(e, cls))\r
+                                       ed.selection.select(e);\r
+                       });\r
+\r
+                       ed.onNodeChange.add(function(ed, cm, n) {\r
+                               cm.setActive('pagebreak', n.nodeName === 'IMG' && ed.dom.hasClass(n, cls));\r
+                       });\r
+\r
+                       ed.onBeforeSetContent.add(function(ed, o) {\r
+                               o.content = o.content.replace(pbRE, pb);\r
+                       });\r
+\r
+                       ed.onPostProcess.add(function(ed, o) {\r
+                               if (o.get)\r
+                                       o.content = o.content.replace(/<img[^>]+>/g, function(im) {\r
+                                               if (im.indexOf('class="mcePageBreak') !== -1)\r
+                                                       im = sep;\r
+\r
+                                               return im;\r
+                                       });\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'PageBreak',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/pagebreak',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('pagebreak', tinymce.plugins.PageBreakPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/img/pagebreak.gif b/plugins/TinyMCE/js/plugins/pagebreak/img/pagebreak.gif
new file mode 100644 (file)
index 0000000..acdf408
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/pagebreak/img/pagebreak.gif differ
diff --git a/plugins/TinyMCE/js/plugins/pagebreak/img/trans.gif b/plugins/TinyMCE/js/plugins/pagebreak/img/trans.gif
new file mode 100644 (file)
index 0000000..3884865
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/pagebreak/img/trans.gif differ
diff --git a/plugins/TinyMCE/js/plugins/paste/editor_plugin.js b/plugins/TinyMCE/js/plugins/paste/editor_plugin.js
new file mode 100644 (file)
index 0000000..3785ab2
--- /dev/null
@@ -0,0 +1 @@
+(function(){var c=tinymce.each,d=null,a={paste_auto_cleanup_on_paste:true,paste_block_drop:false,paste_retain_style_properties:"none",paste_strip_class_attributes:"mso",paste_remove_spans:false,paste_remove_styles:false,paste_remove_styles_if_webkit:true,paste_convert_middot_lists:true,paste_convert_headers_to_strong:false,paste_dialog_width:"450",paste_dialog_height:"400",paste_text_use_dialog:false,paste_text_sticky:false,paste_text_notifyalways:false,paste_text_linebreaktype:"p",paste_text_replacements:[[/\u2026/g,"..."],[/[\x93\x94\u201c\u201d]/g,'"'],[/[\x60\x91\x92\u2018\u2019]/g,"'"]]};function b(e,f){return e.getParam(f,a[f])}tinymce.create("tinymce.plugins.PastePlugin",{init:function(e,f){var g=this;g.editor=e;g.url=f;g.onPreProcess=new tinymce.util.Dispatcher(g);g.onPostProcess=new tinymce.util.Dispatcher(g);g.onPreProcess.add(g._preProcess);g.onPostProcess.add(g._postProcess);g.onPreProcess.add(function(j,k){e.execCallback("paste_preprocess",j,k)});g.onPostProcess.add(function(j,k){e.execCallback("paste_postprocess",j,k)});e.pasteAsPlainText=false;function i(l,j){var k=e.dom;g.onPreProcess.dispatch(g,l);l.node=k.create("div",0,l.content);g.onPostProcess.dispatch(g,l);l.content=e.serializer.serialize(l.node,{getInner:1});if((!j)&&(e.pasteAsPlainText)){g._insertPlainText(e,k,l.content);if(!b(e,"paste_text_sticky")){e.pasteAsPlainText=false;e.controlManager.setActive("pastetext",false)}}else{if(/<(p|h[1-6]|ul|ol)/.test(l.content)){g._insertBlockContent(e,k,l.content)}else{g._insert(l.content)}}}e.addCommand("mceInsertClipboardContent",function(j,k){i(k,true)});if(!b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(k,j){var l=tinymce.util.Cookie;e.pasteAsPlainText=!e.pasteAsPlainText;e.controlManager.setActive("pastetext",e.pasteAsPlainText);if((e.pasteAsPlainText)&&(!l.get("tinymcePasteText"))){if(b(e,"paste_text_sticky")){e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}else{e.windowManager.alert(e.translate("paste.plaintext_mode_sticky"))}if(!b(e,"paste_text_notifyalways")){l.set("tinymcePasteText","1",new Date(new Date().getFullYear()+1,12,31))}}})}e.addButton("pastetext",{title:"paste.paste_text_desc",cmd:"mcePasteText"});e.addButton("selectall",{title:"paste.selectall_desc",cmd:"selectall"});function h(s){var m,q,k,l=e.selection,p=e.dom,r=e.getBody(),j;if(e.pasteAsPlainText&&(s.clipboardData||p.doc.dataTransfer)){s.preventDefault();i({content:(s.clipboardData||p.doc.dataTransfer).getData("Text")},true);return}if(p.get("_mcePaste")){return}m=p.add(r,"div",{id:"_mcePaste","class":"mcePaste"},'\uFEFF<br _mce_bogus="1">');if(r!=e.getDoc().body){j=p.getPos(e.selection.getStart(),r).y}else{j=r.scrollTop}p.setStyles(m,{position:"absolute",left:-10000,top:j,width:1,height:1,overflow:"hidden"});if(tinymce.isIE){k=p.doc.body.createTextRange();k.moveToElementText(m);k.execCommand("Paste");p.remove(m);if(m.innerHTML==="\uFEFF"){e.execCommand("mcePasteWord");s.preventDefault();return}i({content:m.innerHTML});return tinymce.dom.Event.cancel(s)}else{function o(n){n.preventDefault()}p.bind(e.getDoc(),"mousedown",o);p.bind(e.getDoc(),"keydown",o);q=e.selection.getRng();m=m.firstChild;k=e.getDoc().createRange();k.setStart(m,0);k.setEnd(m,1);l.setRng(k);window.setTimeout(function(){var t="",n=p.select("div.mcePaste");c(n,function(v){var u=v.firstChild;if(u&&u.nodeName=="DIV"&&u.style.marginTop&&u.style.backgroundColor){p.remove(u,1)}c(p.select("div.mcePaste",v),function(w){p.remove(w,1)});c(p.select("span.Apple-style-span",v),function(w){p.remove(w,1)});c(p.select("br[_mce_bogus]",v),function(w){p.remove(w)});t+=v.innerHTML});c(n,function(u){p.remove(u)});if(q){l.setRng(q)}i({content:t});p.unbind(e.getDoc(),"mousedown",o);p.unbind(e.getDoc(),"keydown",o)},0)}}if(b(e,"paste_auto_cleanup_on_paste")){if(tinymce.isOpera||/Firefox\/2/.test(navigator.userAgent)){e.onKeyDown.add(function(j,k){if(((tinymce.isMac?k.metaKey:k.ctrlKey)&&k.keyCode==86)||(k.shiftKey&&k.keyCode==45)){h(k)}})}else{e.onPaste.addToTop(function(j,k){return h(k)})}}if(b(e,"paste_block_drop")){e.onInit.add(function(){e.dom.bind(e.getBody(),["dragend","dragover","draggesture","dragdrop","drop","drag"],function(j){j.preventDefault();j.stopPropagation();return false})})}g._legacySupport()},getInfo:function(){return{longname:"Paste text/word",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_preProcess:function(i,f){var l=this.editor,k=f.content,q=tinymce.grep,p=tinymce.explode,g=tinymce.trim,m,j;function e(h){c(h,function(o){if(o.constructor==RegExp){k=k.replace(o,"")}else{k=k.replace(o[0],o[1])}})}if(/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(k)||f.wordContent){f.wordContent=true;e([/^\s*(&nbsp;)+/gi,/(&nbsp;|<br[^>]*>)+\s*$/gi]);if(b(l,"paste_convert_headers_to_strong")){k=k.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>")}if(b(l,"paste_convert_middot_lists")){e([[/<!--\[if !supportLists\]-->/gi,"$&__MCE_ITEM__"],[/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi,"$1__MCE_ITEM__"]])}e([/<!--[\s\S]+?-->/gi,/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,[/<(\/?)s>/gi,"<$1strike>"],[/&nbsp;/gi,"\u00a0"]]);do{m=k.length;k=k.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi,"$1")}while(m!=k.length);if(b(l,"paste_retain_style_properties").replace(/^none$/i,"").length==0){k=k.replace(/<\/?span[^>]*>/gi,"")}else{e([[/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,function(o,h){return(h.length>0)?h.replace(/./," ").slice(Math.floor(h.length/2)).split("").join("\u00a0"):""}],[/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,function(u,h,t){var v=[],o=0,r=p(g(t).replace(/&quot;/gi,"'"),";");c(r,function(s){var w,y,z=p(s,":");function x(A){return A+((A!=="0")&&(/\d$/.test(A)))?"px":""}if(z.length==2){w=z[0].toLowerCase();y=z[1].toLowerCase();switch(w){case"mso-padding-alt":case"mso-padding-top-alt":case"mso-padding-right-alt":case"mso-padding-bottom-alt":case"mso-padding-left-alt":case"mso-margin-alt":case"mso-margin-top-alt":case"mso-margin-right-alt":case"mso-margin-bottom-alt":case"mso-margin-left-alt":case"mso-table-layout-alt":case"mso-height":case"mso-width":case"mso-vertical-align-alt":v[o++]=w.replace(/^mso-|-alt$/g,"")+":"+x(y);return;case"horiz-align":v[o++]="text-align:"+y;return;case"vert-align":v[o++]="vertical-align:"+y;return;case"font-color":case"mso-foreground":v[o++]="color:"+y;return;case"mso-background":case"mso-highlight":v[o++]="background:"+y;return;case"mso-default-height":v[o++]="min-height:"+x(y);return;case"mso-default-width":v[o++]="min-width:"+x(y);return;case"mso-padding-between-alt":v[o++]="border-collapse:separate;border-spacing:"+x(y);return;case"text-line-through":if((y=="single")||(y=="double")){v[o++]="text-decoration:line-through"}return;case"mso-zero-height":if(y=="yes"){v[o++]="display:none"}return}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(w)){return}v[o++]=w+":"+z[1]}});if(o>0){return h+' style="'+v.join(";")+'"'}else{return h}}]])}}if(b(l,"paste_convert_headers_to_strong")){e([[/<h[1-6][^>]*>/gi,"<p><strong>"],[/<\/h[1-6][^>]*>/gi,"</strong></p>"]])}j=b(l,"paste_strip_class_attributes");if(j!=="none"){function n(r,o){if(j==="all"){return""}var h=q(p(o.replace(/^(["'])(.*)\1$/,"$2")," "),function(s){return(/^(?!mso)/i.test(s))});return h.length?' class="'+h.join(" ")+'"':""}k=k.replace(/ class="([^"]+)"/gi,n);k=k.replace(/ class=(\w+)/gi,n)}if(b(l,"paste_remove_spans")){k=k.replace(/<\/?span[^>]*>/gi,"")}f.content=k},_postProcess:function(h,j){var g=this,f=g.editor,i=f.dom,e;if(j.wordContent){c(i.select("a",j.node),function(k){if(!k.href||k.href.indexOf("#_Toc")!=-1){i.remove(k,1)}});if(b(f,"paste_convert_middot_lists")){g._convertLists(h,j)}e=b(f,"paste_retain_style_properties");if((tinymce.is(e,"string"))&&(e!=="all")&&(e!=="*")){e=tinymce.explode(e.replace(/^none$/i,""));c(i.select("*",j.node),function(n){var o={},l=0,m,p,k;if(e){for(m=0;m<e.length;m++){p=e[m];k=i.getStyle(n,p);if(k){o[p]=k;l++}}}i.setAttrib(n,"style","");if(e&&l>0){i.setStyles(n,o)}else{if(n.nodeName=="SPAN"&&!n.className){i.remove(n,true)}}})}}if(b(f,"paste_remove_styles")||(b(f,"paste_remove_styles_if_webkit")&&tinymce.isWebKit)){c(i.select("*[style]",j.node),function(k){k.removeAttribute("style");k.removeAttribute("_mce_style")})}else{if(tinymce.isWebKit){c(i.select("*",j.node),function(k){k.removeAttribute("_mce_style")})}}},_convertLists:function(h,f){var j=h.editor.dom,i,m,e=-1,g,n=[],l,k;c(j.select("p",f.node),function(u){var r,v="",t,s,o,q;for(r=u.firstChild;r&&r.nodeType==3;r=r.nextSibling){v+=r.nodeValue}v=u.innerHTML.replace(/<\/?\w+[^>]*>/gi,"").replace(/&nbsp;/g,"\u00a0");if(/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(v)){t="ul"}if(/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(v)){t="ol"}if(t){g=parseFloat(u.style.marginLeft||0);if(g>e){n.push(g)}if(!i||t!=l){i=j.create(t);j.insertAfter(i,u)}else{if(g>e){i=m.appendChild(j.create(t))}else{if(g<e){o=tinymce.inArray(n,g);q=j.getParents(i.parentNode,t);i=q[q.length-1-o]||i}}}c(j.select("span",u),function(w){var p=w.innerHTML.replace(/<\/?\w+[^>]*>/gi,"");if(t=="ul"&&/^[\u2022\u00b7\u00a7\u00d8o]/.test(p)){j.remove(w)}else{if(/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(p)){j.remove(w)}}});s=u.innerHTML;if(t=="ul"){s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/,"")}else{s=u.innerHTML.replace(/__MCE_ITEM__/g,"").replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/,"")}m=i.appendChild(j.create("li",0,s));j.remove(u);e=g;l=t}else{i=e=0}});k=f.node.innerHTML;if(k.indexOf("__MCE_ITEM__")!=-1){f.node.innerHTML=k.replace(/__MCE_ITEM__/g,"")}},_insertBlockContent:function(l,h,m){var f,j,g=l.selection,q,n,e,o,i,k="mce_marker";function p(t){var s;if(tinymce.isIE){s=l.getDoc().body.createTextRange();s.moveToElementText(t);s.collapse(false);s.select()}else{g.select(t,1);g.collapse(false)}}this._insert('<span id="'+k+'"></span>',1);j=h.get(k);f=h.getParent(j,"p,h1,h2,h3,h4,h5,h6,ul,ol,th,td");if(f&&!/TD|TH/.test(f.nodeName)){j=h.split(f,j);c(h.create("div",0,m).childNodes,function(r){q=j.parentNode.insertBefore(r.cloneNode(true),j)});p(q)}else{h.setOuterHTML(j,m);g.select(l.getBody(),1);g.collapse(0)}while(n=h.get(k)){h.remove(n)}n=g.getStart();e=h.getViewPort(l.getWin());o=l.dom.getPos(n).y;i=n.clientHeight;if(o<e.y||o+i>e.y+e.h){l.getDoc().body.scrollTop=o<e.y?o:o-e.h+25}},_insert:function(g,e){var f=this.editor,i=f.selection.getRng();if(!f.selection.isCollapsed()&&i.startContainer!=i.endContainer){f.getDoc().execCommand("Delete",false,null)}f.execCommand(tinymce.isGecko?"insertHTML":"mceInsertContent",false,g,{skip_undo:e})},_insertPlainText:function(j,x,v){var t,u,l,k,r,e,p,f,n=j.getWin(),z=j.getDoc(),s=j.selection,m=tinymce.is,y=tinymce.inArray,g=b(j,"paste_text_linebreaktype"),o=b(j,"paste_text_replacements");function q(h){c(h,function(i){if(i.constructor==RegExp){v=v.replace(i,"")}else{v=v.replace(i[0],i[1])}})}if((typeof(v)==="string")&&(v.length>0)){if(!d){d=("34,quot,38,amp,39,apos,60,lt,62,gt,"+j.serializer.settings.entities).split(",")}if(/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(v)){q([/[\n\r]+/g])}else{q([/\r+/g])}q([[/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi,"\n\n"],[/<br[^>]*>|<\/tr>/gi,"\n"],[/<\/t[dh]>\s*<t[dh][^>]*>/gi,"\t"],/<[a-z!\/?][^>]*>/gi,[/&nbsp;/gi," "],[/&(#\d+|[a-z0-9]{1,10});/gi,function(i,h){if(h.charAt(0)==="#"){return String.fromCharCode(h.slice(1))}else{return((i=y(d,h))>0)?String.fromCharCode(d[i-1]):" "}}],[/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi,"$1"],[/\n{3,}/g,"\n\n"],/^\s+|\s+$/g]);v=x.encode(v);if(!s.isCollapsed()){z.execCommand("Delete",false,null)}if(m(o,"array")||(m(o,"array"))){q(o)}else{if(m(o,"string")){q(new RegExp(o,"gi"))}}if(g=="none"){q([[/\n+/g," "]])}else{if(g=="br"){q([[/\n/g,"<br />"]])}else{q([/^\s+|\s+$/g,[/\n\n/g,"</p><p>"],[/\n/g,"<br />"]])}}if((l=v.indexOf("</p><p>"))!=-1){k=v.lastIndexOf("</p><p>");r=s.getNode();e=[];do{if(r.nodeType==1){if(r.nodeName=="TD"||r.nodeName=="BODY"){break}e[e.length]=r}}while(r=r.parentNode);if(e.length>0){p=v.substring(0,l);f="";for(t=0,u=e.length;t<u;t++){p+="</"+e[t].nodeName.toLowerCase()+">";f+="<"+e[e.length-t-1].nodeName.toLowerCase()+">"}if(l==k){v=p+f+v.substring(l+7)}else{v=p+v.substring(l+4,k+4)+f+v.substring(k+7)}}}j.execCommand("mceInsertRawHTML",false,v+'<span id="_plain_text_marker">&nbsp;</span>');window.setTimeout(function(){var h=x.get("_plain_text_marker"),B,i,A,w;s.select(h,false);z.execCommand("Delete",false,null);h=null;B=s.getStart();i=x.getViewPort(n);A=x.getPos(B).y;w=B.clientHeight;if((A<i.y)||(A+w>i.y+i.h)){z.body.scrollTop=A<i.y?A:A-i.h+25}},0)}},_legacySupport:function(){var f=this,e=f.editor;e.addCommand("mcePasteWord",function(){e.windowManager.open({file:f.url+"/pasteword.htm",width:parseInt(b(e,"paste_dialog_width")),height:parseInt(b(e,"paste_dialog_height")),inline:1})});if(b(e,"paste_text_use_dialog")){e.addCommand("mcePasteText",function(){e.windowManager.open({file:f.url+"/pastetext.htm",width:parseInt(b(e,"paste_dialog_width")),height:parseInt(b(e,"paste_dialog_height")),inline:1})})}e.addButton("pasteword",{title:"paste.paste_word_desc",cmd:"mcePasteWord"})}});tinymce.PluginManager.add("paste",tinymce.plugins.PastePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/paste/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..ad9740f
--- /dev/null
@@ -0,0 +1,952 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var each = tinymce.each,\r
+               entities = null,\r
+               defs = {\r
+                       paste_auto_cleanup_on_paste : true,\r
+                       paste_block_drop : false,\r
+                       paste_retain_style_properties : "none",\r
+                       paste_strip_class_attributes : "mso",\r
+                       paste_remove_spans : false,\r
+                       paste_remove_styles : false,\r
+                       paste_remove_styles_if_webkit : true,\r
+                       paste_convert_middot_lists : true,\r
+                       paste_convert_headers_to_strong : false,\r
+                       paste_dialog_width : "450",\r
+                       paste_dialog_height : "400",\r
+                       paste_text_use_dialog : false,\r
+                       paste_text_sticky : false,\r
+                       paste_text_notifyalways : false,\r
+                       paste_text_linebreaktype : "p",\r
+                       paste_text_replacements : [\r
+                               [/\u2026/g, "..."],\r
+                               [/[\x93\x94\u201c\u201d]/g, '"'],\r
+                               [/[\x60\x91\x92\u2018\u2019]/g, "'"]\r
+                       ]\r
+               };\r
+\r
+       function getParam(ed, name) {\r
+               return ed.getParam(name, defs[name]);\r
+       }\r
+\r
+       tinymce.create('tinymce.plugins.PastePlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+                       t.url = url;\r
+\r
+                       // Setup plugin events\r
+                       t.onPreProcess = new tinymce.util.Dispatcher(t);\r
+                       t.onPostProcess = new tinymce.util.Dispatcher(t);\r
+\r
+                       // Register default handlers\r
+                       t.onPreProcess.add(t._preProcess);\r
+                       t.onPostProcess.add(t._postProcess);\r
+\r
+                       // Register optional preprocess handler\r
+                       t.onPreProcess.add(function(pl, o) {\r
+                               ed.execCallback('paste_preprocess', pl, o);\r
+                       });\r
+\r
+                       // Register optional postprocess\r
+                       t.onPostProcess.add(function(pl, o) {\r
+                               ed.execCallback('paste_postprocess', pl, o);\r
+                       });\r
+\r
+                       // Initialize plain text flag\r
+                       ed.pasteAsPlainText = false;\r
+\r
+                       // This function executes the process handlers and inserts the contents\r
+                       // force_rich overrides plain text mode set by user, important for pasting with execCommand\r
+                       function process(o, force_rich) {\r
+                               var dom = ed.dom;\r
+\r
+                               // Execute pre process handlers\r
+                               t.onPreProcess.dispatch(t, o);\r
+\r
+                               // Create DOM structure\r
+                               o.node = dom.create('div', 0, o.content);\r
+\r
+                               // Execute post process handlers\r
+                               t.onPostProcess.dispatch(t, o);\r
+\r
+                               // Serialize content\r
+                               o.content = ed.serializer.serialize(o.node, {getInner : 1});\r
+\r
+                               // Plain text option active?\r
+                               if ((!force_rich) && (ed.pasteAsPlainText)) {\r
+                                       t._insertPlainText(ed, dom, o.content);\r
+\r
+                                       if (!getParam(ed, "paste_text_sticky")) {\r
+                                               ed.pasteAsPlainText = false;\r
+                                               ed.controlManager.setActive("pastetext", false);\r
+                                       }\r
+                               } else if (/<(p|h[1-6]|ul|ol)/.test(o.content)) {\r
+                                       // Handle insertion of contents containing block elements separately\r
+                                       t._insertBlockContent(ed, dom, o.content);\r
+                               } else {\r
+                                       t._insert(o.content);\r
+                               }\r
+                       }\r
+\r
+                       // Add command for external usage\r
+                       ed.addCommand('mceInsertClipboardContent', function(u, o) {\r
+                               process(o, true);\r
+                       });\r
+\r
+                       if (!getParam(ed, "paste_text_use_dialog")) {\r
+                               ed.addCommand('mcePasteText', function(u, v) {\r
+                                       var cookie = tinymce.util.Cookie;\r
+\r
+                                       ed.pasteAsPlainText = !ed.pasteAsPlainText;\r
+                                       ed.controlManager.setActive('pastetext', ed.pasteAsPlainText);\r
+\r
+                                       if ((ed.pasteAsPlainText) && (!cookie.get("tinymcePasteText"))) {\r
+                                               if (getParam(ed, "paste_text_sticky")) {\r
+                                                       ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));\r
+                                               } else {\r
+                                                       ed.windowManager.alert(ed.translate('paste.plaintext_mode_sticky'));\r
+                                               }\r
+\r
+                                               if (!getParam(ed, "paste_text_notifyalways")) {\r
+                                                       cookie.set("tinymcePasteText", "1", new Date(new Date().getFullYear() + 1, 12, 31))\r
+                                               }\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       ed.addButton('pastetext', {title: 'paste.paste_text_desc', cmd: 'mcePasteText'});\r
+                       ed.addButton('selectall', {title: 'paste.selectall_desc', cmd: 'selectall'});\r
+\r
+                       // This function grabs the contents from the clipboard by adding a\r
+                       // hidden div and placing the caret inside it and after the browser paste\r
+                       // is done it grabs that contents and processes that\r
+                       function grabContent(e) {\r
+                               var n, or, rng, sel = ed.selection, dom = ed.dom, body = ed.getBody(), posY;\r
+\r
+                               // Check if browser supports direct plaintext access\r
+                               if (ed.pasteAsPlainText && (e.clipboardData || dom.doc.dataTransfer)) {\r
+                                       e.preventDefault();\r
+                                       process({content : (e.clipboardData || dom.doc.dataTransfer).getData('Text')}, true);\r
+                                       return;\r
+                               }\r
+\r
+                               if (dom.get('_mcePaste'))\r
+                                       return;\r
+\r
+                               // Create container to paste into\r
+                               n = dom.add(body, 'div', {id : '_mcePaste', 'class' : 'mcePaste'}, '\uFEFF<br _mce_bogus="1">');\r
+\r
+                               // If contentEditable mode we need to find out the position of the closest element\r
+                               if (body != ed.getDoc().body)\r
+                                       posY = dom.getPos(ed.selection.getStart(), body).y;\r
+                               else\r
+                                       posY = body.scrollTop;\r
+\r
+                               // Styles needs to be applied after the element is added to the document since WebKit will otherwise remove all styles\r
+                               dom.setStyles(n, {\r
+                                       position : 'absolute',\r
+                                       left : -10000,\r
+                                       top : posY,\r
+                                       width : 1,\r
+                                       height : 1,\r
+                                       overflow : 'hidden'\r
+                               });\r
+\r
+                               if (tinymce.isIE) {\r
+                                       // Select the container\r
+                                       rng = dom.doc.body.createTextRange();\r
+                                       rng.moveToElementText(n);\r
+                                       rng.execCommand('Paste');\r
+\r
+                                       // Remove container\r
+                                       dom.remove(n);\r
+\r
+                                       // Check if the contents was changed, if it wasn't then clipboard extraction failed probably due\r
+                                       // to IE security settings so we pass the junk though better than nothing right\r
+                                       if (n.innerHTML === '\uFEFF') {\r
+                                               ed.execCommand('mcePasteWord');\r
+                                               e.preventDefault();\r
+                                               return;\r
+                                       }\r
+\r
+                                       // Process contents\r
+                                       process({content : n.innerHTML});\r
+\r
+                                       // Block the real paste event\r
+                                       return tinymce.dom.Event.cancel(e);\r
+                               } else {\r
+                                       function block(e) {\r
+                                               e.preventDefault();\r
+                                       };\r
+\r
+                                       // Block mousedown and click to prevent selection change\r
+                                       dom.bind(ed.getDoc(), 'mousedown', block);\r
+                                       dom.bind(ed.getDoc(), 'keydown', block);\r
+\r
+                                       or = ed.selection.getRng();\r
+\r
+                                       // Move caret into hidden div\r
+                                       n = n.firstChild;\r
+                                       rng = ed.getDoc().createRange();\r
+                                       rng.setStart(n, 0);\r
+                                       rng.setEnd(n, 1);\r
+                                       sel.setRng(rng);\r
+\r
+                                       // Wait a while and grab the pasted contents\r
+                                       window.setTimeout(function() {\r
+                                               var h = '', nl = dom.select('div.mcePaste');\r
+\r
+                                               // WebKit will split the div into multiple ones so this will loop through then all and join them to get the whole HTML string\r
+                                               each(nl, function(n) {\r
+                                                       var child = n.firstChild;\r
+\r
+                                                       // WebKit inserts a DIV container with lots of odd styles\r
+                                                       if (child && child.nodeName == 'DIV' && child.style.marginTop && child.style.backgroundColor) {\r
+                                                               dom.remove(child, 1);\r
+                                                       }\r
+\r
+                                                       // WebKit duplicates the divs so we need to remove them\r
+                                                       each(dom.select('div.mcePaste', n), function(n) {\r
+                                                               dom.remove(n, 1);\r
+                                                       });\r
+\r
+                                                       // Remove apply style spans\r
+                                                       each(dom.select('span.Apple-style-span', n), function(n) {\r
+                                                               dom.remove(n, 1);\r
+                                                       });\r
+\r
+                                                       // Remove bogus br elements\r
+                                                       each(dom.select('br[_mce_bogus]', n), function(n) {\r
+                                                               dom.remove(n);\r
+                                                       });\r
+\r
+                                                       h += n.innerHTML;\r
+                                               });\r
+\r
+                                               // Remove the nodes\r
+                                               each(nl, function(n) {\r
+                                                       dom.remove(n);\r
+                                               });\r
+\r
+                                               // Restore the old selection\r
+                                               if (or)\r
+                                                       sel.setRng(or);\r
+\r
+                                               process({content : h});\r
+\r
+                                               // Unblock events ones we got the contents\r
+                                               dom.unbind(ed.getDoc(), 'mousedown', block);\r
+                                               dom.unbind(ed.getDoc(), 'keydown', block);\r
+                                       }, 0);\r
+                               }\r
+                       }\r
+\r
+                       // Check if we should use the new auto process method                   \r
+                       if (getParam(ed, "paste_auto_cleanup_on_paste")) {\r
+                               // Is it's Opera or older FF use key handler\r
+                               if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {\r
+                                       ed.onKeyDown.add(function(ed, e) {\r
+                                               if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))\r
+                                                       grabContent(e);\r
+                                       });\r
+                               } else {\r
+                                       // Grab contents on paste event on Gecko and WebKit\r
+                                       ed.onPaste.addToTop(function(ed, e) {\r
+                                               return grabContent(e);\r
+                                       });\r
+                               }\r
+                       }\r
+\r
+                       // Block all drag/drop events\r
+                       if (getParam(ed, "paste_block_drop")) {\r
+                               ed.onInit.add(function() {\r
+                                       ed.dom.bind(ed.getBody(), ['dragend', 'dragover', 'draggesture', 'dragdrop', 'drop', 'drag'], function(e) {\r
+                                               e.preventDefault();\r
+                                               e.stopPropagation();\r
+\r
+                                               return false;\r
+                                       });\r
+                               });\r
+                       }\r
+\r
+                       // Add legacy support\r
+                       t._legacySupport();\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Paste text/word',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               _preProcess : function(pl, o) {\r
+                       //console.log('Before preprocess:' + o.content);\r
+\r
+                       var ed = this.editor,\r
+                               h = o.content,\r
+                               grep = tinymce.grep,\r
+                               explode = tinymce.explode,\r
+                               trim = tinymce.trim,\r
+                               len, stripClass;\r
+\r
+                       function process(items) {\r
+                               each(items, function(v) {\r
+                                       // Remove or replace\r
+                                       if (v.constructor == RegExp)\r
+                                               h = h.replace(v, '');\r
+                                       else\r
+                                               h = h.replace(v[0], v[1]);\r
+                               });\r
+                       }\r
+\r
+                       // Detect Word content and process it more aggressive\r
+                       if (/class="?Mso|style="[^"]*\bmso-|w:WordDocument/i.test(h) || o.wordContent) {\r
+                               o.wordContent = true;                   // Mark the pasted contents as word specific content\r
+                               //console.log('Word contents detected.');\r
+\r
+                               // Process away some basic content\r
+                               process([\r
+                                       /^\s*(&nbsp;)+/gi,                              // &nbsp; entities at the start of contents\r
+                                       /(&nbsp;|<br[^>]*>)+\s*$/gi             // &nbsp; entities at the end of contents\r
+                               ]);\r
+\r
+                               if (getParam(ed, "paste_convert_headers_to_strong")) {\r
+                                       h = h.replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>");\r
+                               }\r
+\r
+                               if (getParam(ed, "paste_convert_middot_lists")) {\r
+                                       process([\r
+                                               [/<!--\[if !supportLists\]-->/gi, '$&__MCE_ITEM__'],                                    // Convert supportLists to a list item marker\r
+                                               [/(<span[^>]+(?:mso-list:|:\s*symbol)[^>]+>)/gi, '$1__MCE_ITEM__']              // Convert mso-list and symbol spans to item markers\r
+                                       ]);\r
+                               }\r
+\r
+                               process([\r
+                                       // Word comments like conditional comments etc\r
+                                       /<!--[\s\S]+?-->/gi,\r
+\r
+                                       // Remove comments, scripts (e.g., msoShowComment), XML tag, VML content, MS Office namespaced tags, and a few other tags\r
+                                       /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|img|meta|link|style|\w:\w+)(?=[\s\/>]))[^>]*>/gi,\r
+\r
+                                       // Convert <s> into <strike> for line-though\r
+                                       [/<(\/?)s>/gi, "<$1strike>"],\r
+\r
+                                       // Replace nsbp entites to char since it's easier to handle\r
+                                       [/&nbsp;/gi, "\u00a0"]\r
+                               ]);\r
+\r
+                               // Remove bad attributes, with or without quotes, ensuring that attribute text is really inside a tag.\r
+                               // If JavaScript had a RegExp look-behind, we could have integrated this with the last process() array and got rid of the loop. But alas, it does not, so we cannot.\r
+                               do {\r
+                                       len = h.length;\r
+                                       h = h.replace(/(<[a-z][^>]*\s)(?:id|name|language|type|on\w+|\w+:\w+)=(?:"[^"]*"|\w+)\s?/gi, "$1");\r
+                               } while (len != h.length);\r
+\r
+                               // Remove all spans if no styles is to be retained\r
+                               if (getParam(ed, "paste_retain_style_properties").replace(/^none$/i, "").length == 0) {\r
+                                       h = h.replace(/<\/?span[^>]*>/gi, "");\r
+                               } else {\r
+                                       // We're keeping styles, so at least clean them up.\r
+                                       // CSS Reference: http://msdn.microsoft.com/en-us/library/aa155477.aspx\r
+\r
+                                       process([\r
+                                               // Convert <span style="mso-spacerun:yes">___</span> to string of alternating breaking/non-breaking spaces of same length\r
+                                               [/<span\s+style\s*=\s*"\s*mso-spacerun\s*:\s*yes\s*;?\s*"\s*>([\s\u00a0]*)<\/span>/gi,\r
+                                                       function(str, spaces) {\r
+                                                               return (spaces.length > 0)? spaces.replace(/./, " ").slice(Math.floor(spaces.length/2)).split("").join("\u00a0") : "";\r
+                                                       }\r
+                                               ],\r
+\r
+                                               // Examine all styles: delete junk, transform some, and keep the rest\r
+                                               [/(<[a-z][^>]*)\sstyle="([^"]*)"/gi,\r
+                                                       function(str, tag, style) {\r
+                                                               var n = [],\r
+                                                                       i = 0,\r
+                                                                       s = explode(trim(style).replace(/&quot;/gi, "'"), ";");\r
+\r
+                                                               // Examine each style definition within the tag's style attribute\r
+                                                               each(s, function(v) {\r
+                                                                       var name, value,\r
+                                                                               parts = explode(v, ":");\r
+\r
+                                                                       function ensureUnits(v) {\r
+                                                                               return v + ((v !== "0") && (/\d$/.test(v)))? "px" : "";\r
+                                                                       }\r
+\r
+                                                                       if (parts.length == 2) {\r
+                                                                               name = parts[0].toLowerCase();\r
+                                                                               value = parts[1].toLowerCase();\r
+\r
+                                                                               // Translate certain MS Office styles into their CSS equivalents\r
+                                                                               switch (name) {\r
+                                                                                       case "mso-padding-alt":\r
+                                                                                       case "mso-padding-top-alt":\r
+                                                                                       case "mso-padding-right-alt":\r
+                                                                                       case "mso-padding-bottom-alt":\r
+                                                                                       case "mso-padding-left-alt":\r
+                                                                                       case "mso-margin-alt":\r
+                                                                                       case "mso-margin-top-alt":\r
+                                                                                       case "mso-margin-right-alt":\r
+                                                                                       case "mso-margin-bottom-alt":\r
+                                                                                       case "mso-margin-left-alt":\r
+                                                                                       case "mso-table-layout-alt":\r
+                                                                                       case "mso-height":\r
+                                                                                       case "mso-width":\r
+                                                                                       case "mso-vertical-align-alt":\r
+                                                                                               n[i++] = name.replace(/^mso-|-alt$/g, "") + ":" + ensureUnits(value);\r
+                                                                                               return;\r
+\r
+                                                                                       case "horiz-align":\r
+                                                                                               n[i++] = "text-align:" + value;\r
+                                                                                               return;\r
+\r
+                                                                                       case "vert-align":\r
+                                                                                               n[i++] = "vertical-align:" + value;\r
+                                                                                               return;\r
+\r
+                                                                                       case "font-color":\r
+                                                                                       case "mso-foreground":\r
+                                                                                               n[i++] = "color:" + value;\r
+                                                                                               return;\r
+\r
+                                                                                       case "mso-background":\r
+                                                                                       case "mso-highlight":\r
+                                                                                               n[i++] = "background:" + value;\r
+                                                                                               return;\r
+\r
+                                                                                       case "mso-default-height":\r
+                                                                                               n[i++] = "min-height:" + ensureUnits(value);\r
+                                                                                               return;\r
+\r
+                                                                                       case "mso-default-width":\r
+                                                                                               n[i++] = "min-width:" + ensureUnits(value);\r
+                                                                                               return;\r
+\r
+                                                                                       case "mso-padding-between-alt":\r
+                                                                                               n[i++] = "border-collapse:separate;border-spacing:" + ensureUnits(value);\r
+                                                                                               return;\r
+\r
+                                                                                       case "text-line-through":\r
+                                                                                               if ((value == "single") || (value == "double")) {\r
+                                                                                                       n[i++] = "text-decoration:line-through";\r
+                                                                                               }\r
+                                                                                               return;\r
+\r
+                                                                                       case "mso-zero-height":\r
+                                                                                               if (value == "yes") {\r
+                                                                                                       n[i++] = "display:none";\r
+                                                                                               }\r
+                                                                                               return;\r
+                                                                               }\r
+\r
+                                                                               // Eliminate all MS Office style definitions that have no CSS equivalent by examining the first characters in the name\r
+                                                                               if (/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?!align|decor|indent|trans)|top-bar|version|vnd|word-break)/.test(name)) {\r
+                                                                                       return;\r
+                                                                               }\r
+\r
+                                                                               // If it reached this point, it must be a valid CSS style\r
+                                                                               n[i++] = name + ":" + parts[1];         // Lower-case name, but keep value case\r
+                                                                       }\r
+                                                               });\r
+\r
+                                                               // If style attribute contained any valid styles the re-write it; otherwise delete style attribute.\r
+                                                               if (i > 0) {\r
+                                                                       return tag + ' style="' + n.join(';') + '"';\r
+                                                               } else {\r
+                                                                       return tag;\r
+                                                               }\r
+                                                       }\r
+                                               ]\r
+                                       ]);\r
+                               }\r
+                       }\r
+\r
+                       // Replace headers with <strong>\r
+                       if (getParam(ed, "paste_convert_headers_to_strong")) {\r
+                               process([\r
+                                       [/<h[1-6][^>]*>/gi, "<p><strong>"],\r
+                                       [/<\/h[1-6][^>]*>/gi, "</strong></p>"]\r
+                               ]);\r
+                       }\r
+\r
+                       // Class attribute options are: leave all as-is ("none"), remove all ("all"), or remove only those starting with mso ("mso").\r
+                       // Note:-  paste_strip_class_attributes: "none", verify_css_classes: true is also a good variation.\r
+                       stripClass = getParam(ed, "paste_strip_class_attributes");\r
+\r
+                       if (stripClass !== "none") {\r
+                               function removeClasses(match, g1) {\r
+                                               if (stripClass === "all")\r
+                                                       return '';\r
+\r
+                                               var cls = grep(explode(g1.replace(/^(["'])(.*)\1$/, "$2"), " "),\r
+                                                       function(v) {\r
+                                                               return (/^(?!mso)/i.test(v));\r
+                                                       }\r
+                                               );\r
+\r
+                                               return cls.length ? ' class="' + cls.join(" ") + '"' : '';\r
+                               };\r
+\r
+                               h = h.replace(/ class="([^"]+)"/gi, removeClasses);\r
+                               h = h.replace(/ class=(\w+)/gi, removeClasses);\r
+                       }\r
+\r
+                       // Remove spans option\r
+                       if (getParam(ed, "paste_remove_spans")) {\r
+                               h = h.replace(/<\/?span[^>]*>/gi, "");\r
+                       }\r
+\r
+                       //console.log('After preprocess:' + h);\r
+\r
+                       o.content = h;\r
+               },\r
+\r
+               /**\r
+                * Various post process items.\r
+                */\r
+               _postProcess : function(pl, o) {\r
+                       var t = this, ed = t.editor, dom = ed.dom, styleProps;\r
+\r
+                       if (o.wordContent) {\r
+                               // Remove named anchors or TOC links\r
+                               each(dom.select('a', o.node), function(a) {\r
+                                       if (!a.href || a.href.indexOf('#_Toc') != -1)\r
+                                               dom.remove(a, 1);\r
+                               });\r
+\r
+                               if (getParam(ed, "paste_convert_middot_lists")) {\r
+                                       t._convertLists(pl, o);\r
+                               }\r
+\r
+                               // Process styles\r
+                               styleProps = getParam(ed, "paste_retain_style_properties"); // retained properties\r
+\r
+                               // Process only if a string was specified and not equal to "all" or "*"\r
+                               if ((tinymce.is(styleProps, "string")) && (styleProps !== "all") && (styleProps !== "*")) {\r
+                                       styleProps = tinymce.explode(styleProps.replace(/^none$/i, ""));\r
+\r
+                                       // Retains some style properties\r
+                                       each(dom.select('*', o.node), function(el) {\r
+                                               var newStyle = {}, npc = 0, i, sp, sv;\r
+\r
+                                               // Store a subset of the existing styles\r
+                                               if (styleProps) {\r
+                                                       for (i = 0; i < styleProps.length; i++) {\r
+                                                               sp = styleProps[i];\r
+                                                               sv = dom.getStyle(el, sp);\r
+\r
+                                                               if (sv) {\r
+                                                                       newStyle[sp] = sv;\r
+                                                                       npc++;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               // Remove all of the existing styles\r
+                                               dom.setAttrib(el, 'style', '');\r
+\r
+                                               if (styleProps && npc > 0)\r
+                                                       dom.setStyles(el, newStyle); // Add back the stored subset of styles\r
+                                               else // Remove empty span tags that do not have class attributes\r
+                                                       if (el.nodeName == 'SPAN' && !el.className)\r
+                                                               dom.remove(el, true);\r
+                                       });\r
+                               }\r
+                       }\r
+\r
+                       // Remove all style information or only specifically on WebKit to avoid the style bug on that browser\r
+                       if (getParam(ed, "paste_remove_styles") || (getParam(ed, "paste_remove_styles_if_webkit") && tinymce.isWebKit)) {\r
+                               each(dom.select('*[style]', o.node), function(el) {\r
+                                       el.removeAttribute('style');\r
+                                       el.removeAttribute('_mce_style');\r
+                               });\r
+                       } else {\r
+                               if (tinymce.isWebKit) {\r
+                                       // We need to compress the styles on WebKit since if you paste <img border="0" /> it will become <img border="0" style="... lots of junk ..." />\r
+                                       // Removing the mce_style that contains the real value will force the Serializer engine to compress the styles\r
+                                       each(dom.select('*', o.node), function(el) {\r
+                                               el.removeAttribute('_mce_style');\r
+                                       });\r
+                               }\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * Converts the most common bullet and number formats in Office into a real semantic UL/LI list.\r
+                */\r
+               _convertLists : function(pl, o) {\r
+                       var dom = pl.editor.dom, listElm, li, lastMargin = -1, margin, levels = [], lastType, html;\r
+\r
+                       // Convert middot lists into real semantic lists\r
+                       each(dom.select('p', o.node), function(p) {\r
+                               var sib, val = '', type, html, idx, parents;\r
+\r
+                               // Get text node value at beginning of paragraph\r
+                               for (sib = p.firstChild; sib && sib.nodeType == 3; sib = sib.nextSibling)\r
+                                       val += sib.nodeValue;\r
+\r
+                               val = p.innerHTML.replace(/<\/?\w+[^>]*>/gi, '').replace(/&nbsp;/g, '\u00a0');\r
+\r
+                               // Detect unordered lists look for bullets\r
+                               if (/^(__MCE_ITEM__)+[\u2022\u00b7\u00a7\u00d8o]\s*\u00a0*/.test(val))\r
+                                       type = 'ul';\r
+\r
+                               // Detect ordered lists 1., a. or ixv.\r
+                               if (/^__MCE_ITEM__\s*\w+\.\s*\u00a0{2,}/.test(val))\r
+                                       type = 'ol';\r
+\r
+                               // Check if node value matches the list pattern: o&nbsp;&nbsp;\r
+                               if (type) {\r
+                                       margin = parseFloat(p.style.marginLeft || 0);\r
+\r
+                                       if (margin > lastMargin)\r
+                                               levels.push(margin);\r
+\r
+                                       if (!listElm || type != lastType) {\r
+                                               listElm = dom.create(type);\r
+                                               dom.insertAfter(listElm, p);\r
+                                       } else {\r
+                                               // Nested list element\r
+                                               if (margin > lastMargin) {\r
+                                                       listElm = li.appendChild(dom.create(type));\r
+                                               } else if (margin < lastMargin) {\r
+                                                       // Find parent level based on margin value\r
+                                                       idx = tinymce.inArray(levels, margin);\r
+                                                       parents = dom.getParents(listElm.parentNode, type);\r
+                                                       listElm = parents[parents.length - 1 - idx] || listElm;\r
+                                               }\r
+                                       }\r
+\r
+                                       // Remove middot or number spans if they exists\r
+                                       each(dom.select('span', p), function(span) {\r
+                                               var html = span.innerHTML.replace(/<\/?\w+[^>]*>/gi, '');\r
+\r
+                                               // Remove span with the middot or the number\r
+                                               if (type == 'ul' && /^[\u2022\u00b7\u00a7\u00d8o]/.test(html))\r
+                                                       dom.remove(span);\r
+                                               else if (/^[\s\S]*\w+\.(&nbsp;|\u00a0)*\s*/.test(html))\r
+                                                       dom.remove(span);\r
+                                       });\r
+\r
+                                       html = p.innerHTML;\r
+\r
+                                       // Remove middot/list items\r
+                                       if (type == 'ul')\r
+                                               html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^[\u2022\u00b7\u00a7\u00d8o]\s*(&nbsp;|\u00a0)+\s*/, '');\r
+                                       else\r
+                                               html = p.innerHTML.replace(/__MCE_ITEM__/g, '').replace(/^\s*\w+\.(&nbsp;|\u00a0)+\s*/, '');\r
+\r
+                                       // Create li and add paragraph data into the new li\r
+                                       li = listElm.appendChild(dom.create('li', 0, html));\r
+                                       dom.remove(p);\r
+\r
+                                       lastMargin = margin;\r
+                                       lastType = type;\r
+                               } else\r
+                                       listElm = lastMargin = 0; // End list element\r
+                       });\r
+\r
+                       // Remove any left over makers\r
+                       html = o.node.innerHTML;\r
+                       if (html.indexOf('__MCE_ITEM__') != -1)\r
+                               o.node.innerHTML = html.replace(/__MCE_ITEM__/g, '');\r
+               },\r
+\r
+               /**\r
+                * This method will split the current block parent and insert the contents inside the split position.\r
+                * This logic can be improved so text nodes at the start/end remain in the start/end block elements\r
+                */\r
+               _insertBlockContent : function(ed, dom, content) {\r
+                       var parentBlock, marker, sel = ed.selection, last, elm, vp, y, elmHeight, markerId = 'mce_marker';\r
+\r
+                       function select(n) {\r
+                               var r;\r
+\r
+                               if (tinymce.isIE) {\r
+                                       r = ed.getDoc().body.createTextRange();\r
+                                       r.moveToElementText(n);\r
+                                       r.collapse(false);\r
+                                       r.select();\r
+                               } else {\r
+                                       sel.select(n, 1);\r
+                                       sel.collapse(false);\r
+                               }\r
+                       }\r
+\r
+                       // Insert a marker for the caret position\r
+                       this._insert('<span id="' + markerId + '"></span>', 1);\r
+                       marker = dom.get(markerId);\r
+                       parentBlock = dom.getParent(marker, 'p,h1,h2,h3,h4,h5,h6,ul,ol,th,td');\r
+\r
+                       // If it's a parent block but not a table cell\r
+                       if (parentBlock && !/TD|TH/.test(parentBlock.nodeName)) {\r
+                               // Split parent block\r
+                               marker = dom.split(parentBlock, marker);\r
+\r
+                               // Insert nodes before the marker\r
+                               each(dom.create('div', 0, content).childNodes, function(n) {\r
+                                       last = marker.parentNode.insertBefore(n.cloneNode(true), marker);\r
+                               });\r
+\r
+                               // Move caret after marker\r
+                               select(last);\r
+                       } else {\r
+                               dom.setOuterHTML(marker, content);\r
+                               sel.select(ed.getBody(), 1);\r
+                               sel.collapse(0);\r
+                       }\r
+\r
+                       // Remove marker if it's left\r
+                       while (elm = dom.get(markerId))\r
+                               dom.remove(elm);\r
+\r
+                       // Get element, position and height\r
+                       elm = sel.getStart();\r
+                       vp = dom.getViewPort(ed.getWin());\r
+                       y = ed.dom.getPos(elm).y;\r
+                       elmHeight = elm.clientHeight;\r
+\r
+                       // Is element within viewport if not then scroll it into view\r
+                       if (y < vp.y || y + elmHeight > vp.y + vp.h)\r
+                               ed.getDoc().body.scrollTop = y < vp.y ? y : y - vp.h + 25;\r
+               },\r
+\r
+               /**\r
+                * Inserts the specified contents at the caret position.\r
+                */\r
+               _insert : function(h, skip_undo) {\r
+                       var ed = this.editor, r = ed.selection.getRng();\r
+\r
+                       // First delete the contents seems to work better on WebKit when the selection spans multiple list items or multiple table cells.\r
+                       if (!ed.selection.isCollapsed() && r.startContainer != r.endContainer)\r
+                               ed.getDoc().execCommand('Delete', false, null);\r
+\r
+                       // It's better to use the insertHTML method on Gecko since it will combine paragraphs correctly before inserting the contents\r
+                       ed.execCommand(tinymce.isGecko ? 'insertHTML' : 'mceInsertContent', false, h, {skip_undo : skip_undo});\r
+               },\r
+\r
+               /**\r
+                * Instead of the old plain text method which tried to re-create a paste operation, the\r
+                * new approach adds a plain text mode toggle switch that changes the behavior of paste.\r
+                * This function is passed the same input that the regular paste plugin produces.\r
+                * It performs additional scrubbing and produces (and inserts) the plain text.\r
+                * This approach leverages all of the great existing functionality in the paste\r
+                * plugin, and requires minimal changes to add the new functionality.\r
+                * Speednet - June 2009\r
+                */\r
+               _insertPlainText : function(ed, dom, h) {\r
+                       var i, len, pos, rpos, node, breakElms, before, after,\r
+                               w = ed.getWin(),\r
+                               d = ed.getDoc(),\r
+                               sel = ed.selection,\r
+                               is = tinymce.is,\r
+                               inArray = tinymce.inArray,\r
+                               linebr = getParam(ed, "paste_text_linebreaktype"),\r
+                               rl = getParam(ed, "paste_text_replacements");\r
+\r
+                       function process(items) {\r
+                               each(items, function(v) {\r
+                                       if (v.constructor == RegExp)\r
+                                               h = h.replace(v, "");\r
+                                       else\r
+                                               h = h.replace(v[0], v[1]);\r
+                               });\r
+                       };\r
+\r
+                       if ((typeof(h) === "string") && (h.length > 0)) {\r
+                               if (!entities)\r
+                                       entities = ("34,quot,38,amp,39,apos,60,lt,62,gt," + ed.serializer.settings.entities).split(",");\r
+\r
+                               // If HTML content with line-breaking tags, then remove all cr/lf chars because only tags will break a line\r
+                               if (/<(?:p|br|h[1-6]|ul|ol|dl|table|t[rdh]|div|blockquote|fieldset|pre|address|center)[^>]*>/i.test(h)) {\r
+                                       process([\r
+                                               /[\n\r]+/g\r
+                                       ]);\r
+                               } else {\r
+                                       // Otherwise just get rid of carriage returns (only need linefeeds)\r
+                                       process([\r
+                                               /\r+/g\r
+                                       ]);\r
+                               }\r
+\r
+                               process([\r
+                                       [/<\/(?:p|h[1-6]|ul|ol|dl|table|div|blockquote|fieldset|pre|address|center)>/gi, "\n\n"],               // Block tags get a blank line after them\r
+                                       [/<br[^>]*>|<\/tr>/gi, "\n"],                           // Single linebreak for <br /> tags and table rows\r
+                                       [/<\/t[dh]>\s*<t[dh][^>]*>/gi, "\t"],           // Table cells get tabs betweem them\r
+                                       /<[a-z!\/?][^>]*>/gi,                                           // Delete all remaining tags\r
+                                       [/&nbsp;/gi, " "],                                                      // Convert non-break spaces to regular spaces (remember, *plain text*)\r
+                                       [\r
+                                               // HTML entity\r
+                                               /&(#\d+|[a-z0-9]{1,10});/gi,\r
+\r
+                                               // Replace with actual character\r
+                                               function(e, s) {\r
+                                                       if (s.charAt(0) === "#") {\r
+                                                               return String.fromCharCode(s.slice(1));\r
+                                                       }\r
+                                                       else {\r
+                                                               return ((e = inArray(entities, s)) > 0)? String.fromCharCode(entities[e-1]) : " ";\r
+                                                       }\r
+                                               }\r
+                                       ],\r
+                                       [/(?:(?!\n)\s)*(\n+)(?:(?!\n)\s)*/gi, "$1"],    // Cool little RegExp deletes whitespace around linebreak chars.\r
+                                       [/\n{3,}/g, "\n\n"],                                                    // Max. 2 consecutive linebreaks\r
+                                       /^\s+|\s+$/g                                                                    // Trim the front & back\r
+                               ]);\r
+\r
+                               h = dom.encode(h);\r
+\r
+                               // Delete any highlighted text before pasting\r
+                               if (!sel.isCollapsed()) {\r
+                                       d.execCommand("Delete", false, null);\r
+                               }\r
+\r
+                               // Perform default or custom replacements\r
+                               if (is(rl, "array") || (is(rl, "array"))) {\r
+                                       process(rl);\r
+                               }\r
+                               else if (is(rl, "string")) {\r
+                                       process(new RegExp(rl, "gi"));\r
+                               }\r
+\r
+                               // Treat paragraphs as specified in the config\r
+                               if (linebr == "none") {\r
+                                       process([\r
+                                               [/\n+/g, " "]\r
+                                       ]);\r
+                               }\r
+                               else if (linebr == "br") {\r
+                                       process([\r
+                                               [/\n/g, "<br />"]\r
+                                       ]);\r
+                               }\r
+                               else {\r
+                                       process([\r
+                                               /^\s+|\s+$/g,\r
+                                               [/\n\n/g, "</p><p>"],\r
+                                               [/\n/g, "<br />"]\r
+                                       ]);\r
+                               }\r
+\r
+                               // This next piece of code handles the situation where we're pasting more than one paragraph of plain\r
+                               // text, and we are pasting the content into the middle of a block node in the editor.  The block\r
+                               // node gets split at the selection point into "Para A" and "Para B" (for the purposes of explaining).\r
+                               // The first paragraph of the pasted text is appended to "Para A", and the last paragraph of the\r
+                               // pasted text is prepended to "Para B".  Any other paragraphs of pasted text are placed between\r
+                               // "Para A" and "Para B".  This code solves a host of problems with the original plain text plugin and\r
+                               // now handles styles correctly.  (Pasting plain text into a styled paragraph is supposed to make the\r
+                               // plain text take the same style as the existing paragraph.)\r
+                               if ((pos = h.indexOf("</p><p>")) != -1) {\r
+                                       rpos = h.lastIndexOf("</p><p>");\r
+                                       node = sel.getNode(); \r
+                                       breakElms = [];         // Get list of elements to break \r
+\r
+                                       do {\r
+                                               if (node.nodeType == 1) {\r
+                                                       // Don't break tables and break at body\r
+                                                       if (node.nodeName == "TD" || node.nodeName == "BODY") {\r
+                                                               break;\r
+                                                       }\r
+\r
+                                                       breakElms[breakElms.length] = node;\r
+                                               }\r
+                                       } while (node = node.parentNode);\r
+\r
+                                       // Are we in the middle of a block node?\r
+                                       if (breakElms.length > 0) {\r
+                                               before = h.substring(0, pos);\r
+                                               after = "";\r
+\r
+                                               for (i=0, len=breakElms.length; i<len; i++) {\r
+                                                       before += "</" + breakElms[i].nodeName.toLowerCase() + ">";\r
+                                                       after += "<" + breakElms[breakElms.length-i-1].nodeName.toLowerCase() + ">";\r
+                                               }\r
+\r
+                                               if (pos == rpos) {\r
+                                                       h = before + after + h.substring(pos+7);\r
+                                               }\r
+                                               else {\r
+                                                       h = before + h.substring(pos+4, rpos+4) + after + h.substring(rpos+7);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               // Insert content at the caret, plus add a marker for repositioning the caret\r
+                               ed.execCommand("mceInsertRawHTML", false, h + '<span id="_plain_text_marker">&nbsp;</span>');\r
+\r
+                               // Reposition the caret to the marker, which was placed immediately after the inserted content.\r
+                               // Needs to be done asynchronously (in window.setTimeout) or else it doesn't work in all browsers.\r
+                               // The second part of the code scrolls the content up if the caret is positioned off-screen.\r
+                               // This is only necessary for WebKit browsers, but it doesn't hurt to use for all.\r
+                               window.setTimeout(function() {\r
+                                       var marker = dom.get('_plain_text_marker'),\r
+                                               elm, vp, y, elmHeight;\r
+\r
+                                       sel.select(marker, false);\r
+                                       d.execCommand("Delete", false, null);\r
+                                       marker = null;\r
+\r
+                                       // Get element, position and height\r
+                                       elm = sel.getStart();\r
+                                       vp = dom.getViewPort(w);\r
+                                       y = dom.getPos(elm).y;\r
+                                       elmHeight = elm.clientHeight;\r
+\r
+                                       // Is element within viewport if not then scroll it into view\r
+                                       if ((y < vp.y) || (y + elmHeight > vp.y + vp.h)) {\r
+                                               d.body.scrollTop = y < vp.y ? y : y - vp.h + 25;\r
+                                       }\r
+                               }, 0);\r
+                       }\r
+               },\r
+\r
+               /**\r
+                * This method will open the old style paste dialogs. Some users might want the old behavior but still use the new cleanup engine.\r
+                */\r
+               _legacySupport : function() {\r
+                       var t = this, ed = t.editor;\r
+\r
+                       // Register command(s) for backwards compatibility\r
+                       ed.addCommand("mcePasteWord", function() {\r
+                               ed.windowManager.open({\r
+                                       file: t.url + "/pasteword.htm",\r
+                                       width: parseInt(getParam(ed, "paste_dialog_width")),\r
+                                       height: parseInt(getParam(ed, "paste_dialog_height")),\r
+                                       inline: 1\r
+                               });\r
+                       });\r
+\r
+                       if (getParam(ed, "paste_text_use_dialog")) {\r
+                               ed.addCommand("mcePasteText", function() {\r
+                                       ed.windowManager.open({\r
+                                               file : t.url + "/pastetext.htm",\r
+                                               width: parseInt(getParam(ed, "paste_dialog_width")),\r
+                                               height: parseInt(getParam(ed, "paste_dialog_height")),\r
+                                               inline : 1\r
+                                       });\r
+                               });\r
+                       }\r
+\r
+                       // Register button for backwards compatibility\r
+                       ed.addButton("pasteword", {title : "paste.paste_word_desc", cmd : "mcePasteWord"});\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add("paste", tinymce.plugins.PastePlugin);\r
+})();\r
diff --git a/plugins/TinyMCE/js/plugins/paste/js/pastetext.js b/plugins/TinyMCE/js/plugins/paste/js/pastetext.js
new file mode 100644 (file)
index 0000000..c524f9e
--- /dev/null
@@ -0,0 +1,36 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var PasteTextDialog = {\r
+       init : function() {\r
+               this.resize();\r
+       },\r
+\r
+       insert : function() {\r
+               var h = tinyMCEPopup.dom.encode(document.getElementById('content').value), lines;\r
+\r
+               // Convert linebreaks into paragraphs\r
+               if (document.getElementById('linebreaks').checked) {\r
+                       lines = h.split(/\r?\n/);\r
+                       if (lines.length > 1) {\r
+                               h = '';\r
+                               tinymce.each(lines, function(row) {\r
+                                       h += '<p>' + row + '</p>';\r
+                               });\r
+                       }\r
+               }\r
+\r
+               tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h});\r
+               tinyMCEPopup.close();\r
+       },\r
+\r
+       resize : function() {\r
+               var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
+\r
+               el = document.getElementById('content');\r
+\r
+               el.style.width  = (vp.w - 20) + 'px';\r
+               el.style.height = (vp.h - 90) + 'px';\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(PasteTextDialog.init, PasteTextDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/paste/js/pasteword.js b/plugins/TinyMCE/js/plugins/paste/js/pasteword.js
new file mode 100644 (file)
index 0000000..a52731c
--- /dev/null
@@ -0,0 +1,51 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var PasteWordDialog = {\r
+       init : function() {\r
+               var ed = tinyMCEPopup.editor, el = document.getElementById('iframecontainer'), ifr, doc, css, cssHTML = '';\r
+\r
+               // Create iframe\r
+               el.innerHTML = '<iframe id="iframe" src="javascript:\'\';" frameBorder="0" style="border: 1px solid gray"></iframe>';\r
+               ifr = document.getElementById('iframe');\r
+               doc = ifr.contentWindow.document;\r
+\r
+               // Force absolute CSS urls\r
+               css = [ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css")];\r
+               css = css.concat(tinymce.explode(ed.settings.content_css) || []);\r
+               tinymce.each(css, function(u) {\r
+                       cssHTML += '<link href="' + ed.documentBaseURI.toAbsolute('' + u) + '" rel="stylesheet" type="text/css" />';\r
+               });\r
+\r
+               // Write content into iframe\r
+               doc.open();\r
+               doc.write('<html><head>' + cssHTML + '</head><body class="mceContentBody" spellcheck="false"></body></html>');\r
+               doc.close();\r
+\r
+               doc.designMode = 'on';\r
+               this.resize();\r
+\r
+               window.setTimeout(function() {\r
+                       ifr.contentWindow.focus();\r
+               }, 10);\r
+       },\r
+\r
+       insert : function() {\r
+               var h = document.getElementById('iframe').contentWindow.document.body.innerHTML;\r
+\r
+               tinyMCEPopup.editor.execCommand('mceInsertClipboardContent', false, {content : h, wordContent : true});\r
+               tinyMCEPopup.close();\r
+       },\r
+\r
+       resize : function() {\r
+               var vp = tinyMCEPopup.dom.getViewPort(window), el;\r
+\r
+               el = document.getElementById('iframe');\r
+\r
+               if (el) {\r
+                       el.style.width  = (vp.w - 20) + 'px';\r
+                       el.style.height = (vp.h - 90) + 'px';\r
+               }\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(PasteWordDialog.init, PasteWordDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/paste/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/paste/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..eeac778
--- /dev/null
@@ -0,0 +1,5 @@
+tinyMCE.addI18n('en.paste_dlg',{\r
+text_title:"Use CTRL+V on your keyboard to paste the text into the window.",\r
+text_linebreaks:"Keep linebreaks",\r
+word_title:"Use CTRL+V on your keyboard to paste the text into the window."\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/pastetext.htm b/plugins/TinyMCE/js/plugins/paste/pastetext.htm
new file mode 100644 (file)
index 0000000..b655945
--- /dev/null
@@ -0,0 +1,27 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#paste.paste_text_desc}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/pastetext.js"></script>\r
+</head>\r
+<body onresize="PasteTextDialog.resize();" style="display:none; overflow:hidden;">\r
+       <form name="source" onsubmit="return PasteTextDialog.insert();" action="#">\r
+               <div style="float: left" class="title">{#paste.paste_text_desc}</div>\r
+\r
+               <div style="float: right">\r
+                       <input type="checkbox" name="linebreaks" id="linebreaks" class="wordWrapCode" checked="checked" /><label for="linebreaks">{#paste_dlg.text_linebreaks}</label>\r
+               </div>\r
+\r
+               <br style="clear: both" />\r
+\r
+               <div>{#paste_dlg.text_title}</div>\r
+\r
+               <textarea id="content" name="content" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,mono; font-size: 12px;" dir="ltr" wrap="soft" class="mceFocus"></textarea>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" name="insert" value="{#insert}" id="insert" />\r
+                       <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
+               </div>\r
+       </form>\r
+</body> \r
+</html>
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/paste/pasteword.htm b/plugins/TinyMCE/js/plugins/paste/pasteword.htm
new file mode 100644 (file)
index 0000000..0f6bb41
--- /dev/null
@@ -0,0 +1,21 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#paste.paste_word_desc}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/pasteword.js"></script>\r
+</head>\r
+<body onresize="PasteWordDialog.resize();" style="display:none; overflow:hidden;">\r
+       <form name="source" onsubmit="return PasteWordDialog.insert();" action="#">\r
+               <div class="title">{#paste.paste_word_desc}</div>\r
+\r
+               <div>{#paste_dlg.word_title}</div>\r
+\r
+               <div id="iframecontainer"></div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+       </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/preview/editor_plugin.js b/plugins/TinyMCE/js/plugins/preview/editor_plugin.js
new file mode 100644 (file)
index 0000000..507909c
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.Preview",{init:function(a,b){var d=this,c=tinymce.explode(a.settings.content_css);d.editor=a;tinymce.each(c,function(f,e){c[e]=a.documentBaseURI.toAbsolute(f)});a.addCommand("mcePreview",function(){a.windowManager.open({file:a.getParam("plugin_preview_pageurl",b+"/preview.html"),width:parseInt(a.getParam("plugin_preview_width","550")),height:parseInt(a.getParam("plugin_preview_height","600")),resizable:"yes",scrollbars:"yes",popup_css:c?c.join(","):a.baseURI.toAbsolute("themes/"+a.settings.theme+"/skins/"+a.settings.skin+"/content.css"),inline:a.getParam("plugin_preview_inline",1)},{base:a.documentBaseURI.getURI()})});a.addButton("preview",{title:"preview.preview_desc",cmd:"mcePreview"})},getInfo:function(){return{longname:"Preview",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("preview",tinymce.plugins.Preview)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/preview/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/preview/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..80f00f0
--- /dev/null
@@ -0,0 +1,53 @@
+/**
+ * editor_plugin_src.js
+ *
+ * Copyright 2009, Moxiecode Systems AB
+ * Released under LGPL License.
+ *
+ * License: http://tinymce.moxiecode.com/license
+ * Contributing: http://tinymce.moxiecode.com/contributing
+ */
+
+(function() {
+       tinymce.create('tinymce.plugins.Preview', {
+               init : function(ed, url) {
+                       var t = this, css = tinymce.explode(ed.settings.content_css);
+
+                       t.editor = ed;
+
+                       // Force absolute CSS urls      
+                       tinymce.each(css, function(u, k) {
+                               css[k] = ed.documentBaseURI.toAbsolute(u);
+                       });
+
+                       ed.addCommand('mcePreview', function() {
+                               ed.windowManager.open({
+                                       file : ed.getParam("plugin_preview_pageurl", url + "/preview.html"),
+                                       width : parseInt(ed.getParam("plugin_preview_width", "550")),
+                                       height : parseInt(ed.getParam("plugin_preview_height", "600")),
+                                       resizable : "yes",
+                                       scrollbars : "yes",
+                                       popup_css : css ? css.join(',') : ed.baseURI.toAbsolute("themes/" + ed.settings.theme + "/skins/" + ed.settings.skin + "/content.css"),
+                                       inline : ed.getParam("plugin_preview_inline", 1)
+                               }, {
+                                       base : ed.documentBaseURI.getURI()
+                               });
+                       });
+
+                       ed.addButton('preview', {title : 'preview.preview_desc', cmd : 'mcePreview'});
+               },
+
+               getInfo : function() {
+                       return {
+                               longname : 'Preview',
+                               author : 'Moxiecode Systems AB',
+                               authorurl : 'http://tinymce.moxiecode.com',
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/preview',
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion
+                       };
+               }
+       });
+
+       // Register plugin
+       tinymce.PluginManager.add('preview', tinymce.plugins.Preview);
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/preview/example.html b/plugins/TinyMCE/js/plugins/preview/example.html
new file mode 100644 (file)
index 0000000..b2c3d90
--- /dev/null
@@ -0,0 +1,28 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+<script language="javascript" src="../../tiny_mce_popup.js"></script>\r
+<script type="text/javascript" src="jscripts/embed.js"></script>\r
+<script type="text/javascript">\r
+tinyMCEPopup.onInit.add(function(ed) {\r
+       var dom = tinyMCEPopup.dom;\r
+\r
+       // Load editor content_css\r
+       tinymce.each(ed.settings.content_css.split(','), function(u) {\r
+               dom.loadCSS(ed.documentBaseURI.toAbsolute(u));\r
+       });\r
+\r
+       // Place contents inside div container\r
+       dom.setHTML('content', ed.getContent());\r
+});\r
+</script>\r
+<title>Example of a custom preview page</title>\r
+</head>\r
+<body>\r
+\r
+Editor contents: <br />\r
+<div id="content">\r
+<!-- Gets filled with editor contents -->\r
+</div>\r
+\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/preview/jscripts/embed.js b/plugins/TinyMCE/js/plugins/preview/jscripts/embed.js
new file mode 100644 (file)
index 0000000..f8dc810
--- /dev/null
@@ -0,0 +1,73 @@
+/**\r
+ * This script contains embed functions for common plugins. This scripts are complety free to use for any purpose.\r
+ */\r
+\r
+function writeFlash(p) {\r
+       writeEmbed(\r
+               'D27CDB6E-AE6D-11cf-96B8-444553540000',\r
+               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
+               'application/x-shockwave-flash',\r
+               p\r
+       );\r
+}\r
+\r
+function writeShockWave(p) {\r
+       writeEmbed(\r
+       '166B1BCA-3F9C-11CF-8075-444553540000',\r
+       'http://download.macromedia.com/pub/shockwave/cabs/director/sw.cab#version=8,5,1,0',\r
+       'application/x-director',\r
+               p\r
+       );\r
+}\r
+\r
+function writeQuickTime(p) {\r
+       writeEmbed(\r
+               '02BF25D5-8C17-4B23-BC80-D3488ABDDC6B',\r
+               'http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0',\r
+               'video/quicktime',\r
+               p\r
+       );\r
+}\r
+\r
+function writeRealMedia(p) {\r
+       writeEmbed(\r
+               'CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA',\r
+               'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0',\r
+               'audio/x-pn-realaudio-plugin',\r
+               p\r
+       );\r
+}\r
+\r
+function writeWindowsMedia(p) {\r
+       p.url = p.src;\r
+       writeEmbed(\r
+               '6BF52A52-394A-11D3-B153-00C04F79FAA6',\r
+               'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',\r
+               'application/x-mplayer2',\r
+               p\r
+       );\r
+}\r
+\r
+function writeEmbed(cls, cb, mt, p) {\r
+       var h = '', n;\r
+\r
+       h += '<object classid="clsid:' + cls + '" codebase="' + cb + '"';\r
+       h += typeof(p.id) != "undefined" ? 'id="' + p.id + '"' : '';\r
+       h += typeof(p.name) != "undefined" ? 'name="' + p.name + '"' : '';\r
+       h += typeof(p.width) != "undefined" ? 'width="' + p.width + '"' : '';\r
+       h += typeof(p.height) != "undefined" ? 'height="' + p.height + '"' : '';\r
+       h += typeof(p.align) != "undefined" ? 'align="' + p.align + '"' : '';\r
+       h += '>';\r
+\r
+       for (n in p)\r
+               h += '<param name="' + n + '" value="' + p[n] + '">';\r
+\r
+       h += '<embed type="' + mt + '"';\r
+\r
+       for (n in p)\r
+               h += n + '="' + p[n] + '" ';\r
+\r
+       h += '></embed></object>';\r
+\r
+       document.write(h);\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/preview/preview.html b/plugins/TinyMCE/js/plugins/preview/preview.html
new file mode 100644 (file)
index 0000000..67e7b14
--- /dev/null
@@ -0,0 +1,17 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+<script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+<script type="text/javascript" src="jscripts/embed.js"></script>\r
+<script type="text/javascript"><!--\r
+document.write('<base href="' + tinyMCEPopup.getWindowArg("base") + '">');\r
+// -->\r
+</script>\r
+<title>{#preview.preview_desc}</title>\r
+</head>\r
+<body id="content">\r
+<script type="text/javascript">\r
+       document.write(tinyMCEPopup.editor.getContent());\r
+</script>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/print/editor_plugin.js b/plugins/TinyMCE/js/plugins/print/editor_plugin.js
new file mode 100644 (file)
index 0000000..b5b3a55
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.Print",{init:function(a,b){a.addCommand("mcePrint",function(){a.getWin().print()});a.addButton("print",{title:"print.print_desc",cmd:"mcePrint"})},getInfo:function(){return{longname:"Print",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("print",tinymce.plugins.Print)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/print/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/print/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..3933fe6
--- /dev/null
@@ -0,0 +1,34 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.Print', {\r
+               init : function(ed, url) {\r
+                       ed.addCommand('mcePrint', function() {\r
+                               ed.getWin().print();\r
+                       });\r
+\r
+                       ed.addButton('print', {title : 'print.print_desc', cmd : 'mcePrint'});\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Print',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/print',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('print', tinymce.plugins.Print);\r
+})();\r
diff --git a/plugins/TinyMCE/js/plugins/save/editor_plugin.js b/plugins/TinyMCE/js/plugins/save/editor_plugin.js
new file mode 100644 (file)
index 0000000..8e93996
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.Save",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceSave",c._save,c);a.addCommand("mceCancel",c._cancel,c);a.addButton("save",{title:"save.save_desc",cmd:"mceSave"});a.addButton("cancel",{title:"save.cancel_desc",cmd:"mceCancel"});a.onNodeChange.add(c._nodeChange,c);a.addShortcut("ctrl+s",a.getLang("save.save_desc"),"mceSave")},getInfo:function(){return{longname:"Save",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_nodeChange:function(b,a,c){var b=this.editor;if(b.getParam("save_enablewhendirty")){a.setDisabled("save",!b.isDirty());a.setDisabled("cancel",!b.isDirty())}},_save:function(){var c=this.editor,a,e,d,b;a=tinymce.DOM.get(c.id).form||tinymce.DOM.getParent(c.id,"form");if(c.getParam("save_enablewhendirty")&&!c.isDirty()){return}tinyMCE.triggerSave();if(e=c.getParam("save_onsavecallback")){if(c.execCallback("save_onsavecallback",c)){c.startContent=tinymce.trim(c.getContent({format:"raw"}));c.nodeChanged()}return}if(a){c.isNotDirty=true;if(a.onsubmit==null||a.onsubmit()!=false){a.submit()}c.nodeChanged()}else{c.windowManager.alert("Error: No form element found.")}},_cancel:function(){var a=this.editor,c,b=tinymce.trim(a.startContent);if(c=a.getParam("save_oncancelcallback")){a.execCallback("save_oncancelcallback",a);return}a.setContent(b);a.undoManager.clear();a.nodeChanged()}});tinymce.PluginManager.add("save",tinymce.plugins.Save)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/save/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/save/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..f5a3de8
--- /dev/null
@@ -0,0 +1,101 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.Save', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceSave', t._save, t);\r
+                       ed.addCommand('mceCancel', t._cancel, t);\r
+\r
+                       // Register buttons\r
+                       ed.addButton('save', {title : 'save.save_desc', cmd : 'mceSave'});\r
+                       ed.addButton('cancel', {title : 'save.cancel_desc', cmd : 'mceCancel'});\r
+\r
+                       ed.onNodeChange.add(t._nodeChange, t);\r
+                       ed.addShortcut('ctrl+s', ed.getLang('save.save_desc'), 'mceSave');\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Save',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/save',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _nodeChange : function(ed, cm, n) {\r
+                       var ed = this.editor;\r
+\r
+                       if (ed.getParam('save_enablewhendirty')) {\r
+                               cm.setDisabled('save', !ed.isDirty());\r
+                               cm.setDisabled('cancel', !ed.isDirty());\r
+                       }\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _save : function() {\r
+                       var ed = this.editor, formObj, os, i, elementId;\r
+\r
+                       formObj = tinymce.DOM.get(ed.id).form || tinymce.DOM.getParent(ed.id, 'form');\r
+\r
+                       if (ed.getParam("save_enablewhendirty") && !ed.isDirty())\r
+                               return;\r
+\r
+                       tinyMCE.triggerSave();\r
+\r
+                       // Use callback instead\r
+                       if (os = ed.getParam("save_onsavecallback")) {\r
+                               if (ed.execCallback('save_onsavecallback', ed)) {\r
+                                       ed.startContent = tinymce.trim(ed.getContent({format : 'raw'}));\r
+                                       ed.nodeChanged();\r
+                               }\r
+\r
+                               return;\r
+                       }\r
+\r
+                       if (formObj) {\r
+                               ed.isNotDirty = true;\r
+\r
+                               if (formObj.onsubmit == null || formObj.onsubmit() != false)\r
+                                       formObj.submit();\r
+\r
+                               ed.nodeChanged();\r
+                       } else\r
+                               ed.windowManager.alert("Error: No form element found.");\r
+               },\r
+\r
+               _cancel : function() {\r
+                       var ed = this.editor, os, h = tinymce.trim(ed.startContent);\r
+\r
+                       // Use callback instead\r
+                       if (os = ed.getParam("save_oncancelcallback")) {\r
+                               ed.execCallback('save_oncancelcallback', ed);\r
+                               return;\r
+                       }\r
+\r
+                       ed.setContent(h);\r
+                       ed.undoManager.clear();\r
+                       ed.nodeChanged();\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('save', tinymce.plugins.Save);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/css/searchreplace.css b/plugins/TinyMCE/js/plugins/searchreplace/css/searchreplace.css
new file mode 100644 (file)
index 0000000..ecdf58c
--- /dev/null
@@ -0,0 +1,6 @@
+.panel_wrapper {height:85px;}\r
+.panel_wrapper div.current {height:85px;}\r
+\r
+/* IE */\r
+* html .panel_wrapper {height:100px;}\r
+* html .panel_wrapper div.current {height:100px;}\r
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin.js b/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin.js
new file mode 100644 (file)
index 0000000..cd9c985
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.SearchReplacePlugin",{init:function(a,c){function b(d){a.windowManager.open({file:c+"/searchreplace.htm",width:420+parseInt(a.getLang("searchreplace.delta_width",0)),height:170+parseInt(a.getLang("searchreplace.delta_height",0)),inline:1,auto_focus:0},{mode:d,search_string:a.selection.getContent({format:"text"}),plugin_url:c})}a.addCommand("mceSearch",function(){b("search")});a.addCommand("mceReplace",function(){b("replace")});a.addButton("search",{title:"searchreplace.search_desc",cmd:"mceSearch"});a.addButton("replace",{title:"searchreplace.replace_desc",cmd:"mceReplace"});a.addShortcut("ctrl+f","searchreplace.search_desc","mceSearch")},getInfo:function(){return{longname:"Search/Replace",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("searchreplace",tinymce.plugins.SearchReplacePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/searchreplace/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..1433a06
--- /dev/null
@@ -0,0 +1,57 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.SearchReplacePlugin', {\r
+               init : function(ed, url) {\r
+                       function open(m) {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/searchreplace.htm',\r
+                                       width : 420 + parseInt(ed.getLang('searchreplace.delta_width', 0)),\r
+                                       height : 170 + parseInt(ed.getLang('searchreplace.delta_height', 0)),\r
+                                       inline : 1,\r
+                                       auto_focus : 0\r
+                               }, {\r
+                                       mode : m,\r
+                                       search_string : ed.selection.getContent({format : 'text'}),\r
+                                       plugin_url : url\r
+                               });\r
+                       };\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceSearch', function() {\r
+                               open('search');\r
+                       });\r
+\r
+                       ed.addCommand('mceReplace', function() {\r
+                               open('replace');\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('search', {title : 'searchreplace.search_desc', cmd : 'mceSearch'});\r
+                       ed.addButton('replace', {title : 'searchreplace.replace_desc', cmd : 'mceReplace'});\r
+\r
+                       ed.addShortcut('ctrl+f', 'searchreplace.search_desc', 'mceSearch');\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Search/Replace',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/searchreplace',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('searchreplace', tinymce.plugins.SearchReplacePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/js/searchreplace.js b/plugins/TinyMCE/js/plugins/searchreplace/js/searchreplace.js
new file mode 100644 (file)
index 0000000..c0a6243
--- /dev/null
@@ -0,0 +1,130 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var SearchReplaceDialog = {\r
+       init : function(ed) {\r
+               var f = document.forms[0], m = tinyMCEPopup.getWindowArg("mode");\r
+\r
+               this.switchMode(m);\r
+\r
+               f[m + '_panel_searchstring'].value = tinyMCEPopup.getWindowArg("search_string");\r
+\r
+               // Focus input field\r
+               f[m + '_panel_searchstring'].focus();\r
+       },\r
+\r
+       switchMode : function(m) {\r
+               var f, lm = this.lastMode;\r
+\r
+               if (lm != m) {\r
+                       f = document.forms[0];\r
+\r
+                       if (lm) {\r
+                               f[m + '_panel_searchstring'].value = f[lm + '_panel_searchstring'].value;\r
+                               f[m + '_panel_backwardsu'].checked = f[lm + '_panel_backwardsu'].checked;\r
+                               f[m + '_panel_backwardsd'].checked = f[lm + '_panel_backwardsd'].checked;\r
+                               f[m + '_panel_casesensitivebox'].checked = f[lm + '_panel_casesensitivebox'].checked;\r
+                       }\r
+\r
+                       mcTabs.displayTab(m + '_tab',  m + '_panel');\r
+                       document.getElementById("replaceBtn").style.display = (m == "replace") ? "inline" : "none";\r
+                       document.getElementById("replaceAllBtn").style.display = (m == "replace") ? "inline" : "none";\r
+                       this.lastMode = m;\r
+               }\r
+       },\r
+\r
+       searchNext : function(a) {\r
+               var ed = tinyMCEPopup.editor, se = ed.selection, r = se.getRng(), f, m = this.lastMode, s, b, fl = 0, w = ed.getWin(), wm = ed.windowManager, fo = 0;\r
+\r
+               // Get input\r
+               f = document.forms[0];\r
+               s = f[m + '_panel_searchstring'].value;\r
+               b = f[m + '_panel_backwardsu'].checked;\r
+               ca = f[m + '_panel_casesensitivebox'].checked;\r
+               rs = f['replace_panel_replacestring'].value;\r
+\r
+               if (s == '')\r
+                       return;\r
+\r
+               function fix() {\r
+                       // Correct Firefox graphics glitches\r
+                       r = se.getRng().cloneRange();\r
+                       ed.getDoc().execCommand('SelectAll', false, null);\r
+                       se.setRng(r);\r
+               };\r
+\r
+               function replace() {\r
+                       if (tinymce.isIE)\r
+                               ed.selection.getRng().duplicate().pasteHTML(rs); // Needs to be duplicated due to selection bug in IE\r
+                       else\r
+                               ed.getDoc().execCommand('InsertHTML', false, rs);\r
+               };\r
+\r
+               // IE flags\r
+               if (ca)\r
+                       fl = fl | 4;\r
+\r
+               switch (a) {\r
+                       case 'all':\r
+                               // Move caret to beginning of text\r
+                               ed.execCommand('SelectAll');\r
+                               ed.selection.collapse(true);\r
+\r
+                               if (tinymce.isIE) {\r
+                                       while (r.findText(s, b ? -1 : 1, fl)) {\r
+                                               r.scrollIntoView();\r
+                                               r.select();\r
+                                               replace();\r
+                                               fo = 1;\r
+\r
+                                               if (b) {\r
+                                                       r.moveEnd("character", -(rs.length)); // Otherwise will loop forever\r
+                                               }\r
+                                       }\r
+\r
+                                       tinyMCEPopup.storeSelection();\r
+                               } else {\r
+                                       while (w.find(s, ca, b, false, false, false, false)) {\r
+                                               replace();\r
+                                               fo = 1;\r
+                                       }\r
+                               }\r
+\r
+                               if (fo)\r
+                                       tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.allreplaced'));\r
+                               else\r
+                                       tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+\r
+                               return;\r
+\r
+                       case 'current':\r
+                               if (!ed.selection.isCollapsed())\r
+                                       replace();\r
+\r
+                               break;\r
+               }\r
+\r
+               se.collapse(b);\r
+               r = se.getRng();\r
+\r
+               // Whats the point\r
+               if (!s)\r
+                       return;\r
+\r
+               if (tinymce.isIE) {\r
+                       if (r.findText(s, b ? -1 : 1, fl)) {\r
+                               r.scrollIntoView();\r
+                               r.select();\r
+                       } else\r
+                               tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+\r
+                       tinyMCEPopup.storeSelection();\r
+               } else {\r
+                       if (!w.find(s, ca, b, false, false, false, false))\r
+                               tinyMCEPopup.alert(ed.getLang('searchreplace_dlg.notfound'));\r
+                       else\r
+                               fix();\r
+               }\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(SearchReplaceDialog.init, SearchReplaceDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/searchreplace/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..370959a
--- /dev/null
@@ -0,0 +1,16 @@
+tinyMCE.addI18n('en.searchreplace_dlg',{\r
+searchnext_desc:"Find again",\r
+notfound:"The search has been completed. The search string could not be found.",\r
+search_title:"Find",\r
+replace_title:"Find/Replace",\r
+allreplaced:"All occurrences of the search string were replaced.",\r
+findwhat:"Find what",\r
+replacewith:"Replace with",\r
+direction:"Direction",\r
+up:"Up",\r
+down:"Down",\r
+mcase:"Match case",\r
+findnext:"Find next",\r
+replace:"Replace",\r
+replaceall:"Replace all"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/searchreplace/searchreplace.htm b/plugins/TinyMCE/js/plugins/searchreplace/searchreplace.htm
new file mode 100644 (file)
index 0000000..d0424cf
--- /dev/null
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#searchreplace_dlg.replace_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="js/searchreplace.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/searchreplace.css" />\r
+</head>\r
+<body style="display:none;">\r
+<form onsubmit="SearchReplaceDialog.searchNext('none');return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="search_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('search');" onmousedown="return false;">{#searchreplace.search_desc}</a></span></li>\r
+                       <li id="replace_tab"><span><a href="javascript:SearchReplaceDialog.switchMode('replace');" onmousedown="return false;">{#searchreplace_dlg.replace}</a></span></li>\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="search_panel" class="panel">\r
+                       <table border="0" cellspacing="0" cellpadding="2">\r
+                               <tr>\r
+                                       <td><label for="search_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>\r
+                                       <td><input type="text" id="search_panel_searchstring" name="search_panel_searchstring" style="width: 200px" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2">\r
+                                               <table border="0" cellspacing="0" cellpadding="0" class="direction">\r
+                                                       <tr>\r
+                                                               <td><label>{#searchreplace_dlg.direction}</label></td>\r
+                                                               <td><input id="search_panel_backwardsu" name="search_panel_backwards" class="radio" type="radio" /></td>\r
+                                                               <td><label for="search_panel_backwardsu">{#searchreplace_dlg.up}</label></td>\r
+                                                               <td><input id="search_panel_backwardsd" name="search_panel_backwards" class="radio" type="radio" checked="checked" /></td>\r
+                                                               <td><label for="search_panel_backwardsd">{#searchreplace_dlg.down}</label></td>\r
+                                                       </tr>\r
+                                               </table>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2">\r
+                                               <table border="0" cellspacing="0" cellpadding="0">\r
+                                                       <tr>\r
+                                                               <td><input id="search_panel_casesensitivebox" name="search_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>\r
+                                                               <td><label for="search_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>\r
+                                                       </tr>\r
+                                               </table>\r
+                                       </td>\r
+                               </tr>\r
+                       </table>\r
+               </div>\r
+\r
+               <div id="replace_panel" class="panel">\r
+                       <table border="0" cellspacing="0" cellpadding="2">\r
+                               <tr>\r
+                                       <td><label for="replace_panel_searchstring">{#searchreplace_dlg.findwhat}</label></td>\r
+                                       <td><input type="text" id="replace_panel_searchstring" name="replace_panel_searchstring" style="width: 200px" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td><label for="replace_panel_replacestring">{#searchreplace_dlg.replacewith}</label></td>\r
+                                       <td><input type="text" id="replace_panel_replacestring" name="replace_panel_replacestring" style="width: 200px" /></td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2">\r
+                                               <table border="0" cellspacing="0" cellpadding="0" class="direction">\r
+                                                       <tr>\r
+                                                               <td><label>{#searchreplace_dlg.direction}</label></td>\r
+                                                               <td><input id="replace_panel_backwardsu" name="replace_panel_backwards" class="radio" type="radio" /></td>\r
+                                                               <td><label for="replace_panel_backwardsu">{#searchreplace_dlg.up}</label></td>\r
+                                                               <td><input id="replace_panel_backwardsd" name="replace_panel_backwards" class="radio" type="radio" checked="checked" /></td>\r
+                                                               <td><label for="replace_panel_backwardsd">{#searchreplace_dlg.down}</label></td>\r
+                                                       </tr>\r
+                                               </table>\r
+                                       </td>\r
+                               </tr>\r
+                               <tr>\r
+                                       <td colspan="2">\r
+                                               <table border="0" cellspacing="0" cellpadding="0">\r
+                                                       <tr>\r
+                                                               <td><input id="replace_panel_casesensitivebox" name="replace_panel_casesensitivebox" class="checkbox" type="checkbox" /></td>\r
+                                                               <td><label for="replace_panel_casesensitivebox">{#searchreplace_dlg.mcase}</label></td>\r
+                                                       </tr>\r
+                                               </table>\r
+                                       </td>\r
+                               </tr>\r
+                       </table>\r
+               </div>\r
+\r
+       </div>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#searchreplace_dlg.findnext}" />\r
+               <input type="button" class="button" id="replaceBtn" name="replaceBtn" value="{#searchreplace_dlg.replace}" onclick="SearchReplaceDialog.searchNext('current');" />\r
+               <input type="button" class="button" id="replaceAllBtn" name="replaceAllBtn" value="{#searchreplace_dlg.replaceall}" onclick="SearchReplaceDialog.searchNext('all');" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/css/content.css b/plugins/TinyMCE/js/plugins/spellchecker/css/content.css
new file mode 100644 (file)
index 0000000..24efa02
--- /dev/null
@@ -0,0 +1 @@
+.mceItemHiddenSpellWord {background:url(../img/wline.gif) repeat-x bottom left; cursor:default;}\r
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin.js b/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin.js
new file mode 100644 (file)
index 0000000..a9ec3b9
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.util.JSONRequest,c=tinymce.each,b=tinymce.DOM;tinymce.create("tinymce.plugins.SpellcheckerPlugin",{getInfo:function(){return{longname:"Spellchecker",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker",version:tinymce.majorVersion+"."+tinymce.minorVersion}},init:function(e,f){var g=this,d;g.url=f;g.editor=e;g.rpcUrl=e.getParam("spellchecker_rpc_url","{backend}");if(g.rpcUrl=="{backend}"){if(tinymce.isIE){return}g.hasSupport=true;e.onContextMenu.addToTop(function(h,i){if(g.active){return false}})}e.addCommand("mceSpellCheck",function(){if(g.rpcUrl=="{backend}"){g.editor.getBody().spellcheck=g.active=!g.active;return}if(!g.active){e.setProgressState(1);g._sendRPC("checkWords",[g.selectedLang,g._getWords()],function(h){if(h.length>0){g.active=1;g._markWords(h);e.setProgressState(0);e.nodeChanged()}else{e.setProgressState(0);if(e.getParam("spellchecker_report_no_misspellings",true)){e.windowManager.alert("spellchecker.no_mpell")}}})}else{g._done()}});e.onInit.add(function(){if(e.settings.content_css!==false){e.dom.loadCSS(f+"/css/content.css")}});e.onClick.add(g._showMenu,g);e.onContextMenu.add(g._showMenu,g);e.onBeforeGetContent.add(function(){if(g.active){g._removeWords()}});e.onNodeChange.add(function(i,h){h.setActive("spellchecker",g.active)});e.onSetContent.add(function(){g._done()});e.onBeforeGetContent.add(function(){g._done()});e.onBeforeExecCommand.add(function(h,i){if(i=="mceFullScreen"){g._done()}});g.languages={};c(e.getParam("spellchecker_languages","+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv","hash"),function(i,h){if(h.indexOf("+")===0){h=h.substring(1);g.selectedLang=i}g.languages[h]=i})},createControl:function(h,d){var f=this,g,e=f.editor;if(h=="spellchecker"){if(f.rpcUrl=="{backend}"){if(f.hasSupport){g=d.createButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f})}return g}g=d.createSplitButton(h,{title:"spellchecker.desc",cmd:"mceSpellCheck",scope:f});g.onRenderMenu.add(function(j,i){i.add({title:"spellchecker.langs","class":"mceMenuItemTitle"}).setDisabled(1);c(f.languages,function(n,m){var p={icon:1},l;p.onclick=function(){l.setSelected(1);f.selectedItem.setSelected(0);f.selectedItem=l;f.selectedLang=n};p.title=m;l=i.add(p);l.setSelected(n==f.selectedLang);if(n==f.selectedLang){f.selectedItem=l}})});return g}},_walk:function(i,g){var h=this.editor.getDoc(),e;if(h.createTreeWalker){e=h.createTreeWalker(i,NodeFilter.SHOW_TEXT,null,false);while((i=e.nextNode())!=null){g.call(this,i)}}else{tinymce.walk(i,g,"childNodes")}},_getSeparators:function(){var e="",d,f=this.editor.getParam("spellchecker_word_separator_chars",'\\s!"#$%&()*+,-./:;<=>?@[]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');for(d=0;d<f.length;d++){e+="\\"+f.charAt(d)}return e},_getWords:function(){var e=this.editor,g=[],d="",f={},h=[];this._walk(e.getBody(),function(i){if(i.nodeType==3){d+=i.nodeValue+" "}});if(e.getParam("spellchecker_word_pattern")){h=d.match("("+e.getParam("spellchecker_word_pattern")+")","gi")}else{d=d.replace(new RegExp("([0-9]|["+this._getSeparators()+"])","g")," ");d=tinymce.trim(d.replace(/(\s+)/g," "));h=d.split(" ")}c(h,function(i){if(!f[i]){g.push(i);f[i]=1}});return g},_removeWords:function(e){var f=this.editor,h=f.dom,g=f.selection,d=g.getBookmark();c(h.select("span").reverse(),function(i){if(i&&(h.hasClass(i,"mceItemHiddenSpellWord")||h.hasClass(i,"mceItemHidden"))){if(!e||h.decode(i.innerHTML)==e){h.remove(i,1)}}});g.moveToBookmark(d)},_markWords:function(o){var i,h,g,f,e,n="",k=this.editor,p=this._getSeparators(),j=k.dom,d=[];var l=k.selection,m=l.getBookmark();c(o,function(q){n+=(n?"|":"")+q});i=new RegExp("(["+p+"])("+n+")(["+p+"])","g");h=new RegExp("^("+n+")","g");g=new RegExp("("+n+")(["+p+"]?)$","g");f=new RegExp("^("+n+")(["+p+"]?)$","g");e=new RegExp("("+n+")(["+p+"])","g");this._walk(this.editor.getBody(),function(q){if(q.nodeType==3){d.push(q)}});c(d,function(r){var q;if(r.nodeType==3){q=r.nodeValue;if(i.test(q)||h.test(q)||g.test(q)||f.test(q)){q=j.encode(q);q=q.replace(e,'<span class="mceItemHiddenSpellWord">$1</span>$2');q=q.replace(g,'<span class="mceItemHiddenSpellWord">$1</span>$2');j.replace(j.create("span",{"class":"mceItemHidden"},q),r)}}});l.moveToBookmark(m)},_showMenu:function(h,j){var i=this,h=i.editor,d=i._menu,l,k=h.dom,g=k.getViewPort(h.getWin()),f=j.target;j=0;if(!d){l=b.getPos(h.getContentAreaContainer());d=h.controlManager.createDropMenu("spellcheckermenu",{offset_x:l.x,offset_y:l.y,"class":"mceNoIcons"});i._menu=d}if(k.hasClass(f,"mceItemHiddenSpellWord")){d.removeAll();d.add({title:"spellchecker.wait","class":"mceMenuItemTitle"}).setDisabled(1);i._sendRPC("getSuggestions",[i.selectedLang,k.decode(f.innerHTML)],function(m){var e;d.removeAll();if(m.length>0){d.add({title:"spellchecker.sug","class":"mceMenuItemTitle"}).setDisabled(1);c(m,function(n){d.add({title:n,onclick:function(){k.replace(h.getDoc().createTextNode(n),f);i._checkDone()}})});d.addSeparator()}else{d.add({title:"spellchecker.no_sug","class":"mceMenuItemTitle"}).setDisabled(1)}e=i.editor.getParam("spellchecker_enable_ignore_rpc","");d.add({title:"spellchecker.ignore_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});d.add({title:"spellchecker.ignore_words",onclick:function(){var n=f.innerHTML;i._removeWords(k.decode(n));i._checkDone();if(e){h.setProgressState(1);i._sendRPC("ignoreWords",[i.selectedLang,n],function(o){h.setProgressState(0)})}}});if(i.editor.getParam("spellchecker_enable_learn_rpc")){d.add({title:"spellchecker.learn_word",onclick:function(){var n=f.innerHTML;k.remove(f,1);i._checkDone();h.setProgressState(1);i._sendRPC("learnWord",[i.selectedLang,n],function(o){h.setProgressState(0)})}})}d.update()});h.selection.select(f);l=k.getPos(f);d.showMenu(l.x,l.y+f.offsetHeight-g.y);return tinymce.dom.Event.cancel(j)}else{d.hideMenu()}},_checkDone:function(){var e=this,d=e.editor,g=d.dom,f;c(g.select("span"),function(h){if(h&&g.hasClass(h,"mceItemHiddenSpellWord")){f=true;return false}});if(!f){e._done()}},_done:function(){var d=this,e=d.active;if(d.active){d.active=0;d._removeWords();if(d._menu){d._menu.hideMenu()}if(e){d.editor.nodeChanged()}}},_sendRPC:function(e,g,d){var f=this;a.sendRPC({url:f.rpcUrl,method:e,params:g,success:d,error:function(i,h){f.editor.setProgressState(0);f.editor.windowManager.alert(i.errstr||("Error response: "+h.responseText))}})}});tinymce.PluginManager.add("spellchecker",tinymce.plugins.SpellcheckerPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/spellchecker/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..d8680ba
--- /dev/null
@@ -0,0 +1,417 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM;\r
+\r
+       tinymce.create('tinymce.plugins.SpellcheckerPlugin', {\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Spellchecker',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               init : function(ed, url) {\r
+                       var t = this, cm;\r
+\r
+                       t.url = url;\r
+                       t.editor = ed;\r
+                       t.rpcUrl = ed.getParam("spellchecker_rpc_url", "{backend}");\r
+\r
+                       if (t.rpcUrl == '{backend}') {\r
+                               // Sniff if the browser supports native spellchecking (Don't know of a better way)\r
+                               if (tinymce.isIE)\r
+                                       return;\r
+\r
+                               t.hasSupport = true;\r
+\r
+                               // Disable the context menu when spellchecking is active\r
+                               ed.onContextMenu.addToTop(function(ed, e) {\r
+                                       if (t.active)\r
+                                               return false;\r
+                               });\r
+                       }\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceSpellCheck', function() {\r
+                               if (t.rpcUrl == '{backend}') {\r
+                                       // Enable/disable native spellchecker\r
+                                       t.editor.getBody().spellcheck = t.active = !t.active;\r
+                                       return;\r
+                               }\r
+\r
+                               if (!t.active) {\r
+                                       ed.setProgressState(1);\r
+                                       t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) {\r
+                                               if (r.length > 0) {\r
+                                                       t.active = 1;\r
+                                                       t._markWords(r);\r
+                                                       ed.setProgressState(0);\r
+                                                       ed.nodeChanged();\r
+                                               } else {\r
+                                                       ed.setProgressState(0);\r
+\r
+                                                       if (ed.getParam('spellchecker_report_no_misspellings', true))\r
+                                                               ed.windowManager.alert('spellchecker.no_mpell');\r
+                                               }\r
+                                       });\r
+                               } else\r
+                                       t._done();\r
+                       });\r
+\r
+                       ed.onInit.add(function() {\r
+                               if (ed.settings.content_css !== false)\r
+                                       ed.dom.loadCSS(url + '/css/content.css');\r
+                       });\r
+\r
+                       ed.onClick.add(t._showMenu, t);\r
+                       ed.onContextMenu.add(t._showMenu, t);\r
+                       ed.onBeforeGetContent.add(function() {\r
+                               if (t.active)\r
+                                       t._removeWords();\r
+                       });\r
+\r
+                       ed.onNodeChange.add(function(ed, cm) {\r
+                               cm.setActive('spellchecker', t.active);\r
+                       });\r
+\r
+                       ed.onSetContent.add(function() {\r
+                               t._done();\r
+                       });\r
+\r
+                       ed.onBeforeGetContent.add(function() {\r
+                               t._done();\r
+                       });\r
+\r
+                       ed.onBeforeExecCommand.add(function(ed, cmd) {\r
+                               if (cmd == 'mceFullScreen')\r
+                                       t._done();\r
+                       });\r
+\r
+                       // Find selected language\r
+                       t.languages = {};\r
+                       each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) {\r
+                               if (k.indexOf('+') === 0) {\r
+                                       k = k.substring(1);\r
+                                       t.selectedLang = v;\r
+                               }\r
+\r
+                               t.languages[k] = v;\r
+                       });\r
+               },\r
+\r
+               createControl : function(n, cm) {\r
+                       var t = this, c, ed = t.editor;\r
+\r
+                       if (n == 'spellchecker') {\r
+                               // Use basic button if we use the native spellchecker\r
+                               if (t.rpcUrl == '{backend}') {\r
+                                       // Create simple toggle button if we have native support\r
+                                       if (t.hasSupport)\r
+                                               c = cm.createButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
+\r
+                                       return c;\r
+                               }\r
+\r
+                               c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t});\r
+\r
+                               c.onRenderMenu.add(function(c, m) {\r
+                                       m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+                                       each(t.languages, function(v, k) {\r
+                                               var o = {icon : 1}, mi;\r
+\r
+                                               o.onclick = function() {\r
+                                                       mi.setSelected(1);\r
+                                                       t.selectedItem.setSelected(0);\r
+                                                       t.selectedItem = mi;\r
+                                                       t.selectedLang = v;\r
+                                               };\r
+\r
+                                               o.title = k;\r
+                                               mi = m.add(o);\r
+                                               mi.setSelected(v == t.selectedLang);\r
+\r
+                                               if (v == t.selectedLang)\r
+                                                       t.selectedItem = mi;\r
+                                       })\r
+                               });\r
+\r
+                               return c;\r
+                       }\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _walk : function(n, f) {\r
+                       var d = this.editor.getDoc(), w;\r
+\r
+                       if (d.createTreeWalker) {\r
+                               w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
+\r
+                               while ((n = w.nextNode()) != null)\r
+                                       f.call(this, n);\r
+                       } else\r
+                               tinymce.walk(n, f, 'childNodes');\r
+               },\r
+\r
+               _getSeparators : function() {\r
+                       var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}§©«®±¶·¸»¼½¾¿×÷¤\u201d\u201c');\r
+\r
+                       // Build word separator regexp\r
+                       for (i=0; i<str.length; i++)\r
+                               re += '\\' + str.charAt(i);\r
+\r
+                       return re;\r
+               },\r
+\r
+               _getWords : function() {\r
+                       var ed = this.editor, wl = [], tx = '', lo = {}, rawWords = [];\r
+\r
+                       // Get area text\r
+                       this._walk(ed.getBody(), function(n) {\r
+                               if (n.nodeType == 3)\r
+                                       tx += n.nodeValue + ' ';\r
+                       });\r
+\r
+                       // split the text up into individual words\r
+                       if (ed.getParam('spellchecker_word_pattern')) {\r
+                               // look for words that match the pattern\r
+                               rawWords = tx.match('(' + ed.getParam('spellchecker_word_pattern') + ')', 'gi');\r
+                       } else {\r
+                               // Split words by separator\r
+                               tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' ');\r
+                               tx = tinymce.trim(tx.replace(/(\s+)/g, ' '));\r
+                               rawWords = tx.split(' ');\r
+                       }\r
+\r
+                       // Build word array and remove duplicates\r
+                       each(rawWords, function(v) {\r
+                               if (!lo[v]) {\r
+                                       wl.push(v);\r
+                                       lo[v] = 1;\r
+                               }\r
+                       });\r
+\r
+                       return wl;\r
+               },\r
+\r
+               _removeWords : function(w) {\r
+                       var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark();\r
+\r
+                       each(dom.select('span').reverse(), function(n) {\r
+                               if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) {\r
+                                       if (!w || dom.decode(n.innerHTML) == w)\r
+                                               dom.remove(n, 1);\r
+                               }\r
+                       });\r
+\r
+                       se.moveToBookmark(b);\r
+               },\r
+\r
+               _markWords : function(wl) {\r
+                       var r1, r2, r3, r4, r5, w = '', ed = this.editor, re = this._getSeparators(), dom = ed.dom, nl = [];\r
+                       var se = ed.selection, b = se.getBookmark();\r
+\r
+                       each(wl, function(v) {\r
+                               w += (w ? '|' : '') + v;\r
+                       });\r
+\r
+                       r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g');\r
+                       r2 = new RegExp('^(' + w + ')', 'g');\r
+                       r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g');\r
+                       r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g');\r
+                       r5 = new RegExp('(' + w + ')([' + re + '])', 'g');\r
+\r
+                       // Collect all text nodes\r
+                       this._walk(this.editor.getBody(), function(n) {\r
+                               if (n.nodeType == 3) {\r
+                                       nl.push(n);\r
+                               }\r
+                       });\r
+\r
+                       // Wrap incorrect words in spans\r
+                       each(nl, function(n) {\r
+                               var v;\r
+\r
+                               if (n.nodeType == 3) {\r
+                                       v = n.nodeValue;\r
+\r
+                                       if (r1.test(v) || r2.test(v) || r3.test(v) || r4.test(v)) {\r
+                                               v = dom.encode(v);\r
+                                               v = v.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2');\r
+                                               v = v.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2');\r
+\r
+                                               dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n);\r
+                                       }\r
+                               }\r
+                       });\r
+\r
+                       se.moveToBookmark(b);\r
+               },\r
+\r
+               _showMenu : function(ed, e) {\r
+                       var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()), wordSpan = e.target;\r
+\r
+                       e = 0; // Fixes IE memory leak\r
+\r
+                       if (!m) {\r
+                               p1 = DOM.getPos(ed.getContentAreaContainer());\r
+                               //p2 = DOM.getPos(ed.getContainer());\r
+\r
+                               m = ed.controlManager.createDropMenu('spellcheckermenu', {\r
+                                       offset_x : p1.x,\r
+                                       offset_y : p1.y,\r
+                                       'class' : 'mceNoIcons'\r
+                               });\r
+\r
+                               t._menu = m;\r
+                       }\r
+\r
+                       if (dom.hasClass(wordSpan, 'mceItemHiddenSpellWord')) {\r
+                               m.removeAll();\r
+                               m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+\r
+                               t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(wordSpan.innerHTML)], function(r) {\r
+                                       var ignoreRpc;\r
+\r
+                                       m.removeAll();\r
+\r
+                                       if (r.length > 0) {\r
+                                               m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+                                               each(r, function(v) {\r
+                                                       m.add({title : v, onclick : function() {\r
+                                                               dom.replace(ed.getDoc().createTextNode(v), wordSpan);\r
+                                                               t._checkDone();\r
+                                                       }});\r
+                                               });\r
+\r
+                                               m.addSeparator();\r
+                                       } else\r
+                                               m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1);\r
+\r
+                                       ignoreRpc = t.editor.getParam("spellchecker_enable_ignore_rpc", '');\r
+                                       m.add({\r
+                                               title : 'spellchecker.ignore_word',\r
+                                               onclick : function() {\r
+                                                       var word = wordSpan.innerHTML;\r
+\r
+                                                       dom.remove(wordSpan, 1);\r
+                                                       t._checkDone();\r
+\r
+                                                       // tell the server if we need to\r
+                                                       if (ignoreRpc) {\r
+                                                               ed.setProgressState(1);\r
+                                                               t._sendRPC('ignoreWord', [t.selectedLang, word], function(r) {\r
+                                                                       ed.setProgressState(0);\r
+                                                               });\r
+                                                       }\r
+                                               }\r
+                                       });\r
+\r
+                                       m.add({\r
+                                               title : 'spellchecker.ignore_words',\r
+                                               onclick : function() {\r
+                                                       var word = wordSpan.innerHTML;\r
+\r
+                                                       t._removeWords(dom.decode(word));\r
+                                                       t._checkDone();\r
+\r
+                                                       // tell the server if we need to\r
+                                                       if (ignoreRpc) {\r
+                                                               ed.setProgressState(1);\r
+                                                               t._sendRPC('ignoreWords', [t.selectedLang, word], function(r) {\r
+                                                                       ed.setProgressState(0);\r
+                                                               });\r
+                                                       }\r
+                                               }\r
+                                       });\r
+\r
+\r
+                                       if (t.editor.getParam("spellchecker_enable_learn_rpc")) {\r
+                                               m.add({\r
+                                                       title : 'spellchecker.learn_word',\r
+                                                       onclick : function() {\r
+                                                               var word = wordSpan.innerHTML;\r
+\r
+                                                               dom.remove(wordSpan, 1);\r
+                                                               t._checkDone();\r
+\r
+                                                               ed.setProgressState(1);\r
+                                                               t._sendRPC('learnWord', [t.selectedLang, word], function(r) {\r
+                                                                       ed.setProgressState(0);\r
+                                                               });\r
+                                                       }\r
+                                               });\r
+                                       }\r
+\r
+                                       m.update();\r
+                               });\r
+\r
+                               ed.selection.select(wordSpan);\r
+                               p1 = dom.getPos(wordSpan);\r
+                               m.showMenu(p1.x, p1.y + wordSpan.offsetHeight - vp.y);\r
+\r
+                               return tinymce.dom.Event.cancel(e);\r
+                       } else\r
+                               m.hideMenu();\r
+               },\r
+\r
+               _checkDone : function() {\r
+                       var t = this, ed = t.editor, dom = ed.dom, o;\r
+\r
+                       each(dom.select('span'), function(n) {\r
+                               if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) {\r
+                                       o = true;\r
+                                       return false;\r
+                               }\r
+                       });\r
+\r
+                       if (!o)\r
+                               t._done();\r
+               },\r
+\r
+               _done : function() {\r
+                       var t = this, la = t.active;\r
+\r
+                       if (t.active) {\r
+                               t.active = 0;\r
+                               t._removeWords();\r
+\r
+                               if (t._menu)\r
+                                       t._menu.hideMenu();\r
+\r
+                               if (la)\r
+                                       t.editor.nodeChanged();\r
+                       }\r
+               },\r
+\r
+               _sendRPC : function(m, p, cb) {\r
+                       var t = this;\r
+\r
+                       JSONRequest.sendRPC({\r
+                               url : t.rpcUrl,\r
+                               method : m,\r
+                               params : p,\r
+                               success : cb,\r
+                               error : function(e, x) {\r
+                                       t.editor.setProgressState(0);\r
+                                       t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText));\r
+                               }\r
+                       });\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin);\r
+})();\r
diff --git a/plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif b/plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif
new file mode 100644 (file)
index 0000000..7d0a4db
Binary files /dev/null and b/plugins/TinyMCE/js/plugins/spellchecker/img/wline.gif differ
diff --git a/plugins/TinyMCE/js/plugins/style/css/props.css b/plugins/TinyMCE/js/plugins/style/css/props.css
new file mode 100644 (file)
index 0000000..eb1f264
--- /dev/null
@@ -0,0 +1,13 @@
+#text_font {width:250px;}\r
+#text_size {width:70px;}\r
+.mceAddSelectValue {background:#DDD;}\r
+select, #block_text_indent, #box_width, #box_height, #box_padding_top, #box_padding_right, #box_padding_bottom, #box_padding_left {width:70px;}\r
+#box_margin_top, #box_margin_right, #box_margin_bottom, #box_margin_left, #positioning_width, #positioning_height, #positioning_zindex {width:70px;}\r
+#positioning_placement_top, #positioning_placement_right, #positioning_placement_bottom, #positioning_placement_left {width:70px;}\r
+#positioning_clip_top, #positioning_clip_right, #positioning_clip_bottom, #positioning_clip_left {width:70px;}\r
+.panel_wrapper div.current {padding-top:10px;height:230px;}\r
+.delim {border-left:1px solid gray;}\r
+.tdelim {border-bottom:1px solid gray;}\r
+#block_display {width:145px;}\r
+#list_type {width:115px;}\r
+.disabled {background:#EEE;}\r
diff --git a/plugins/TinyMCE/js/plugins/style/editor_plugin.js b/plugins/TinyMCE/js/plugins/style/editor_plugin.js
new file mode 100644 (file)
index 0000000..cab2153
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.StylePlugin",{init:function(a,b){a.addCommand("mceStyleProps",function(){a.windowManager.open({file:b+"/props.htm",width:480+parseInt(a.getLang("style.delta_width",0)),height:320+parseInt(a.getLang("style.delta_height",0)),inline:1},{plugin_url:b,style_text:a.selection.getNode().style.cssText})});a.addCommand("mceSetElementStyle",function(d,c){if(e=a.selection.getNode()){a.dom.setAttrib(e,"style",c);a.execCommand("mceRepaint")}});a.onNodeChange.add(function(d,c,f){c.setDisabled("styleprops",f.nodeName==="BODY")});a.addButton("styleprops",{title:"style.desc",cmd:"mceStyleProps"})},getInfo:function(){return{longname:"Style",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("style",tinymce.plugins.StylePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/style/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/style/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..5f7755f
--- /dev/null
@@ -0,0 +1,55 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.StylePlugin', {\r
+               init : function(ed, url) {\r
+                       // Register commands\r
+                       ed.addCommand('mceStyleProps', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/props.htm',\r
+                                       width : 480 + parseInt(ed.getLang('style.delta_width', 0)),\r
+                                       height : 320 + parseInt(ed.getLang('style.delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url,\r
+                                       style_text : ed.selection.getNode().style.cssText\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceSetElementStyle', function(ui, v) {\r
+                               if (e = ed.selection.getNode()) {\r
+                                       ed.dom.setAttrib(e, 'style', v);\r
+                                       ed.execCommand('mceRepaint');\r
+                               }\r
+                       });\r
+\r
+                       ed.onNodeChange.add(function(ed, cm, n) {\r
+                               cm.setDisabled('styleprops', n.nodeName === 'BODY');\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('styleprops', {title : 'style.desc', cmd : 'mceStyleProps'});\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Style',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/style',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('style', tinymce.plugins.StylePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/style/js/props.js b/plugins/TinyMCE/js/plugins/style/js/props.js
new file mode 100644 (file)
index 0000000..a8dd93d
--- /dev/null
@@ -0,0 +1,641 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var defaultFonts = "" + \r
+       "Arial, Helvetica, sans-serif=Arial, Helvetica, sans-serif;" + \r
+       "Times New Roman, Times, serif=Times New Roman, Times, serif;" + \r
+       "Courier New, Courier, mono=Courier New, Courier, mono;" + \r
+       "Times New Roman, Times, serif=Times New Roman, Times, serif;" + \r
+       "Georgia, Times New Roman, Times, serif=Georgia, Times New Roman, Times, serif;" + \r
+       "Verdana, Arial, Helvetica, sans-serif=Verdana, Arial, Helvetica, sans-serif;" + \r
+       "Geneva, Arial, Helvetica, sans-serif=Geneva, Arial, Helvetica, sans-serif";\r
+\r
+var defaultSizes = "9;10;12;14;16;18;24;xx-small;x-small;small;medium;large;x-large;xx-large;smaller;larger";\r
+var defaultMeasurement = "+pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
+var defaultSpacingMeasurement = "pixels=px;points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;+ems=em;exs=ex;%";\r
+var defaultIndentMeasurement = "pixels=px;+points=pt;inches=in;centimetres=cm;millimetres=mm;picas=pc;ems=em;exs=ex;%";\r
+var defaultWeight = "normal;bold;bolder;lighter;100;200;300;400;500;600;700;800;900";\r
+var defaultTextStyle = "normal;italic;oblique";\r
+var defaultVariant = "normal;small-caps";\r
+var defaultLineHeight = "normal";\r
+var defaultAttachment = "fixed;scroll";\r
+var defaultRepeat = "no-repeat;repeat;repeat-x;repeat-y";\r
+var defaultPosH = "left;center;right";\r
+var defaultPosV = "top;center;bottom";\r
+var defaultVAlign = "baseline;sub;super;top;text-top;middle;bottom;text-bottom";\r
+var defaultDisplay = "inline;block;list-item;run-in;compact;marker;table;inline-table;table-row-group;table-header-group;table-footer-group;table-row;table-column-group;table-column;table-cell;table-caption;none";\r
+var defaultBorderStyle = "none;solid;dashed;dotted;double;groove;ridge;inset;outset";\r
+var defaultBorderWidth = "thin;medium;thick";\r
+var defaultListType = "disc;circle;square;decimal;lower-roman;upper-roman;lower-alpha;upper-alpha;none";\r
+\r
+function init() {\r
+       var ce = document.getElementById('container'), h;\r
+\r
+       ce.style.cssText = tinyMCEPopup.getWindowArg('style_text');\r
+\r
+       h = getBrowserHTML('background_image_browser','background_image','image','advimage');\r
+       document.getElementById("background_image_browser").innerHTML = h;\r
+\r
+       document.getElementById('text_color_pickcontainer').innerHTML = getColorPickerHTML('text_color_pick','text_color');\r
+       document.getElementById('background_color_pickcontainer').innerHTML = getColorPickerHTML('background_color_pick','background_color');\r
+       document.getElementById('border_color_top_pickcontainer').innerHTML = getColorPickerHTML('border_color_top_pick','border_color_top');\r
+       document.getElementById('border_color_right_pickcontainer').innerHTML = getColorPickerHTML('border_color_right_pick','border_color_right');\r
+       document.getElementById('border_color_bottom_pickcontainer').innerHTML = getColorPickerHTML('border_color_bottom_pick','border_color_bottom');\r
+       document.getElementById('border_color_left_pickcontainer').innerHTML = getColorPickerHTML('border_color_left_pick','border_color_left');\r
+\r
+       fillSelect(0, 'text_font', 'style_font', defaultFonts, ';', true);\r
+       fillSelect(0, 'text_size', 'style_font_size', defaultSizes, ';', true);\r
+       fillSelect(0, 'text_size_measurement', 'style_font_size_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'text_case', 'style_text_case', "capitalize;uppercase;lowercase", ';', true);\r
+       fillSelect(0, 'text_weight', 'style_font_weight', defaultWeight, ';', true);\r
+       fillSelect(0, 'text_style', 'style_font_style', defaultTextStyle, ';', true);\r
+       fillSelect(0, 'text_variant', 'style_font_variant', defaultVariant, ';', true);\r
+       fillSelect(0, 'text_lineheight', 'style_font_line_height', defaultLineHeight, ';', true);\r
+       fillSelect(0, 'text_lineheight_measurement', 'style_font_line_height_measurement', defaultMeasurement, ';', true);\r
+\r
+       fillSelect(0, 'background_attachment', 'style_background_attachment', defaultAttachment, ';', true);\r
+       fillSelect(0, 'background_repeat', 'style_background_repeat', defaultRepeat, ';', true);\r
+\r
+       fillSelect(0, 'background_hpos_measurement', 'style_background_hpos_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'background_vpos_measurement', 'style_background_vpos_measurement', defaultMeasurement, ';', true);\r
+\r
+       fillSelect(0, 'background_hpos', 'style_background_hpos', defaultPosH, ';', true);\r
+       fillSelect(0, 'background_vpos', 'style_background_vpos', defaultPosV, ';', true);\r
+\r
+       fillSelect(0, 'block_wordspacing', 'style_wordspacing', 'normal', ';', true);\r
+       fillSelect(0, 'block_wordspacing_measurement', 'style_wordspacing_measurement', defaultSpacingMeasurement, ';', true);\r
+       fillSelect(0, 'block_letterspacing', 'style_letterspacing', 'normal', ';', true);\r
+       fillSelect(0, 'block_letterspacing_measurement', 'style_letterspacing_measurement', defaultSpacingMeasurement, ';', true);\r
+       fillSelect(0, 'block_vertical_alignment', 'style_vertical_alignment', defaultVAlign, ';', true);\r
+       fillSelect(0, 'block_text_align', 'style_text_align', "left;right;center;justify", ';', true);\r
+       fillSelect(0, 'block_whitespace', 'style_whitespace', "normal;pre;nowrap", ';', true);\r
+       fillSelect(0, 'block_display', 'style_display', defaultDisplay, ';', true);\r
+       fillSelect(0, 'block_text_indent_measurement', 'style_text_indent_measurement', defaultIndentMeasurement, ';', true);\r
+\r
+       fillSelect(0, 'box_width_measurement', 'style_box_width_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_height_measurement', 'style_box_height_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_float', 'style_float', 'left;right;none', ';', true);\r
+       fillSelect(0, 'box_clear', 'style_clear', 'left;right;both;none', ';', true);\r
+       fillSelect(0, 'box_padding_left_measurement', 'style_padding_left_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_padding_top_measurement', 'style_padding_top_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_padding_bottom_measurement', 'style_padding_bottom_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_padding_right_measurement', 'style_padding_right_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_margin_left_measurement', 'style_margin_left_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_margin_top_measurement', 'style_margin_top_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_margin_bottom_measurement', 'style_margin_bottom_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'box_margin_right_measurement', 'style_margin_right_measurement', defaultMeasurement, ';', true);\r
+\r
+       fillSelect(0, 'border_style_top', 'style_border_style_top', defaultBorderStyle, ';', true);\r
+       fillSelect(0, 'border_style_right', 'style_border_style_right', defaultBorderStyle, ';', true);\r
+       fillSelect(0, 'border_style_bottom', 'style_border_style_bottom', defaultBorderStyle, ';', true);\r
+       fillSelect(0, 'border_style_left', 'style_border_style_left', defaultBorderStyle, ';', true);\r
+\r
+       fillSelect(0, 'border_width_top', 'style_border_width_top', defaultBorderWidth, ';', true);\r
+       fillSelect(0, 'border_width_right', 'style_border_width_right', defaultBorderWidth, ';', true);\r
+       fillSelect(0, 'border_width_bottom', 'style_border_width_bottom', defaultBorderWidth, ';', true);\r
+       fillSelect(0, 'border_width_left', 'style_border_width_left', defaultBorderWidth, ';', true);\r
+\r
+       fillSelect(0, 'border_width_top_measurement', 'style_border_width_top_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'border_width_right_measurement', 'style_border_width_right_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'border_width_bottom_measurement', 'style_border_width_bottom_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'border_width_left_measurement', 'style_border_width_left_measurement', defaultMeasurement, ';', true);\r
+\r
+       fillSelect(0, 'list_type', 'style_list_type', defaultListType, ';', true);\r
+       fillSelect(0, 'list_position', 'style_list_position', "inside;outside", ';', true);\r
+\r
+       fillSelect(0, 'positioning_type', 'style_positioning_type', "absolute;relative;static", ';', true);\r
+       fillSelect(0, 'positioning_visibility', 'style_positioning_visibility', "inherit;visible;hidden", ';', true);\r
+\r
+       fillSelect(0, 'positioning_width_measurement', 'style_positioning_width_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_height_measurement', 'style_positioning_height_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_overflow', 'style_positioning_overflow', "visible;hidden;scroll;auto", ';', true);\r
+\r
+       fillSelect(0, 'positioning_placement_top_measurement', 'style_positioning_placement_top_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_placement_right_measurement', 'style_positioning_placement_right_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_placement_bottom_measurement', 'style_positioning_placement_bottom_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_placement_left_measurement', 'style_positioning_placement_left_measurement', defaultMeasurement, ';', true);\r
+\r
+       fillSelect(0, 'positioning_clip_top_measurement', 'style_positioning_clip_top_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_clip_right_measurement', 'style_positioning_clip_right_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_clip_bottom_measurement', 'style_positioning_clip_bottom_measurement', defaultMeasurement, ';', true);\r
+       fillSelect(0, 'positioning_clip_left_measurement', 'style_positioning_clip_left_measurement', defaultMeasurement, ';', true);\r
+\r
+       TinyMCE_EditableSelects.init();\r
+       setupFormData();\r
+       showDisabledControls();\r
+}\r
+\r
+function setupFormData() {\r
+       var ce = document.getElementById('container'), f = document.forms[0], s, b, i;\r
+\r
+       // Setup text fields\r
+\r
+       selectByValue(f, 'text_font', ce.style.fontFamily, true, true);\r
+       selectByValue(f, 'text_size', getNum(ce.style.fontSize), true, true);\r
+       selectByValue(f, 'text_size_measurement', getMeasurement(ce.style.fontSize));\r
+       selectByValue(f, 'text_weight', ce.style.fontWeight, true, true);\r
+       selectByValue(f, 'text_style', ce.style.fontStyle, true, true);\r
+       selectByValue(f, 'text_lineheight', getNum(ce.style.lineHeight), true, true);\r
+       selectByValue(f, 'text_lineheight_measurement', getMeasurement(ce.style.lineHeight));\r
+       selectByValue(f, 'text_case', ce.style.textTransform, true, true);\r
+       selectByValue(f, 'text_variant', ce.style.fontVariant, true, true);\r
+       f.text_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.color);\r
+       updateColor('text_color_pick', 'text_color');\r
+       f.text_underline.checked = inStr(ce.style.textDecoration, 'underline');\r
+       f.text_overline.checked = inStr(ce.style.textDecoration, 'overline');\r
+       f.text_linethrough.checked = inStr(ce.style.textDecoration, 'line-through');\r
+       f.text_blink.checked = inStr(ce.style.textDecoration, 'blink');\r
+\r
+       // Setup background fields\r
+\r
+       f.background_color.value = tinyMCEPopup.editor.dom.toHex(ce.style.backgroundColor);\r
+       updateColor('background_color_pick', 'background_color');\r
+       f.background_image.value = ce.style.backgroundImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+       selectByValue(f, 'background_repeat', ce.style.backgroundRepeat, true, true);\r
+       selectByValue(f, 'background_attachment', ce.style.backgroundAttachment, true, true);\r
+       selectByValue(f, 'background_hpos', getNum(getVal(ce.style.backgroundPosition, 0)), true, true);\r
+       selectByValue(f, 'background_hpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 0)));\r
+       selectByValue(f, 'background_vpos', getNum(getVal(ce.style.backgroundPosition, 1)), true, true);\r
+       selectByValue(f, 'background_vpos_measurement', getMeasurement(getVal(ce.style.backgroundPosition, 1)));\r
+\r
+       // Setup block fields\r
+\r
+       selectByValue(f, 'block_wordspacing', getNum(ce.style.wordSpacing), true, true);\r
+       selectByValue(f, 'block_wordspacing_measurement', getMeasurement(ce.style.wordSpacing));\r
+       selectByValue(f, 'block_letterspacing', getNum(ce.style.letterSpacing), true, true);\r
+       selectByValue(f, 'block_letterspacing_measurement', getMeasurement(ce.style.letterSpacing));\r
+       selectByValue(f, 'block_vertical_alignment', ce.style.verticalAlign, true, true);\r
+       selectByValue(f, 'block_text_align', ce.style.textAlign, true, true);\r
+       f.block_text_indent.value = getNum(ce.style.textIndent);\r
+       selectByValue(f, 'block_text_indent_measurement', getMeasurement(ce.style.textIndent));\r
+       selectByValue(f, 'block_whitespace', ce.style.whiteSpace, true, true);\r
+       selectByValue(f, 'block_display', ce.style.display, true, true);\r
+\r
+       // Setup box fields\r
+\r
+       f.box_width.value = getNum(ce.style.width);\r
+       selectByValue(f, 'box_width_measurement', getMeasurement(ce.style.width));\r
+\r
+       f.box_height.value = getNum(ce.style.height);\r
+       selectByValue(f, 'box_height_measurement', getMeasurement(ce.style.height));\r
+\r
+       if (tinymce.isGecko)\r
+               selectByValue(f, 'box_float', ce.style.cssFloat, true, true);\r
+       else\r
+               selectByValue(f, 'box_float', ce.style.styleFloat, true, true);\r
+\r
+       selectByValue(f, 'box_clear', ce.style.clear, true, true);\r
+\r
+       setupBox(f, ce, 'box_padding', 'padding', '');\r
+       setupBox(f, ce, 'box_margin', 'margin', '');\r
+\r
+       // Setup border fields\r
+\r
+       setupBox(f, ce, 'border_style', 'border', 'Style');\r
+       setupBox(f, ce, 'border_width', 'border', 'Width');\r
+       setupBox(f, ce, 'border_color', 'border', 'Color');\r
+\r
+       updateColor('border_color_top_pick', 'border_color_top');\r
+       updateColor('border_color_right_pick', 'border_color_right');\r
+       updateColor('border_color_bottom_pick', 'border_color_bottom');\r
+       updateColor('border_color_left_pick', 'border_color_left');\r
+\r
+       f.elements.border_color_top.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_top.value);\r
+       f.elements.border_color_right.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_right.value);\r
+       f.elements.border_color_bottom.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_bottom.value);\r
+       f.elements.border_color_left.value = tinyMCEPopup.editor.dom.toHex(f.elements.border_color_left.value);\r
+\r
+       // Setup list fields\r
+\r
+       selectByValue(f, 'list_type', ce.style.listStyleType, true, true);\r
+       selectByValue(f, 'list_position', ce.style.listStylePosition, true, true);\r
+       f.list_bullet_image.value = ce.style.listStyleImage.replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+\r
+       // Setup box fields\r
+\r
+       selectByValue(f, 'positioning_type', ce.style.position, true, true);\r
+       selectByValue(f, 'positioning_visibility', ce.style.visibility, true, true);\r
+       selectByValue(f, 'positioning_overflow', ce.style.overflow, true, true);\r
+       f.positioning_zindex.value = ce.style.zIndex ? ce.style.zIndex : "";\r
+\r
+       f.positioning_width.value = getNum(ce.style.width);\r
+       selectByValue(f, 'positioning_width_measurement', getMeasurement(ce.style.width));\r
+\r
+       f.positioning_height.value = getNum(ce.style.height);\r
+       selectByValue(f, 'positioning_height_measurement', getMeasurement(ce.style.height));\r
+\r
+       setupBox(f, ce, 'positioning_placement', '', '', ['top', 'right', 'bottom', 'left']);\r
+\r
+       s = ce.style.clip.replace(new RegExp("rect\\('?([^']*)'?\\)", 'gi'), "$1");\r
+       s = s.replace(/,/g, ' ');\r
+\r
+       if (!hasEqualValues([getVal(s, 0), getVal(s, 1), getVal(s, 2), getVal(s, 3)])) {\r
+               f.positioning_clip_top.value = getNum(getVal(s, 0));\r
+               selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));\r
+               f.positioning_clip_right.value = getNum(getVal(s, 1));\r
+               selectByValue(f, 'positioning_clip_right_measurement', getMeasurement(getVal(s, 1)));\r
+               f.positioning_clip_bottom.value = getNum(getVal(s, 2));\r
+               selectByValue(f, 'positioning_clip_bottom_measurement', getMeasurement(getVal(s, 2)));\r
+               f.positioning_clip_left.value = getNum(getVal(s, 3));\r
+               selectByValue(f, 'positioning_clip_left_measurement', getMeasurement(getVal(s, 3)));\r
+       } else {\r
+               f.positioning_clip_top.value = getNum(getVal(s, 0));\r
+               selectByValue(f, 'positioning_clip_top_measurement', getMeasurement(getVal(s, 0)));\r
+               f.positioning_clip_right.value = f.positioning_clip_bottom.value = f.positioning_clip_left.value;\r
+       }\r
+\r
+//     setupBox(f, ce, '', 'border', 'Color');\r
+}\r
+\r
+function getMeasurement(s) {\r
+       return s.replace(/^([0-9.]+)(.*)$/, "$2");\r
+}\r
+\r
+function getNum(s) {\r
+       if (new RegExp('^(?:[0-9.]+)(?:[a-z%]+)$', 'gi').test(s))\r
+               return s.replace(/[^0-9.]/g, '');\r
+\r
+       return s;\r
+}\r
+\r
+function inStr(s, n) {\r
+       return new RegExp(n, 'gi').test(s);\r
+}\r
+\r
+function getVal(s, i) {\r
+       var a = s.split(' ');\r
+\r
+       if (a.length > 1)\r
+               return a[i];\r
+\r
+       return "";\r
+}\r
+\r
+function setValue(f, n, v) {\r
+       if (f.elements[n].type == "text")\r
+               f.elements[n].value = v;\r
+       else\r
+               selectByValue(f, n, v, true, true);\r
+}\r
+\r
+function setupBox(f, ce, fp, pr, sf, b) {\r
+       if (typeof(b) == "undefined")\r
+               b = ['Top', 'Right', 'Bottom', 'Left'];\r
+\r
+       if (isSame(ce, pr, sf, b)) {\r
+               f.elements[fp + "_same"].checked = true;\r
+\r
+               setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));\r
+               f.elements[fp + "_top"].disabled = false;\r
+\r
+               f.elements[fp + "_right"].value = "";\r
+               f.elements[fp + "_right"].disabled = true;\r
+               f.elements[fp + "_bottom"].value = "";\r
+               f.elements[fp + "_bottom"].disabled = true;\r
+               f.elements[fp + "_left"].value = "";\r
+               f.elements[fp + "_left"].disabled = true;\r
+\r
+               if (f.elements[fp + "_top_measurement"]) {\r
+                       selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));\r
+                       f.elements[fp + "_left_measurement"].disabled = true;\r
+                       f.elements[fp + "_bottom_measurement"].disabled = true;\r
+                       f.elements[fp + "_right_measurement"].disabled = true;\r
+               }\r
+       } else {\r
+               f.elements[fp + "_same"].checked = false;\r
+\r
+               setValue(f, fp + "_top", getNum(ce.style[pr + b[0] + sf]));\r
+               f.elements[fp + "_top"].disabled = false;\r
+\r
+               setValue(f, fp + "_right", getNum(ce.style[pr + b[1] + sf]));\r
+               f.elements[fp + "_right"].disabled = false;\r
+\r
+               setValue(f, fp + "_bottom", getNum(ce.style[pr + b[2] + sf]));\r
+               f.elements[fp + "_bottom"].disabled = false;\r
+\r
+               setValue(f, fp + "_left", getNum(ce.style[pr + b[3] + sf]));\r
+               f.elements[fp + "_left"].disabled = false;\r
+\r
+               if (f.elements[fp + "_top_measurement"]) {\r
+                       selectByValue(f, fp + '_top_measurement', getMeasurement(ce.style[pr + b[0] + sf]));\r
+                       selectByValue(f, fp + '_right_measurement', getMeasurement(ce.style[pr + b[1] + sf]));\r
+                       selectByValue(f, fp + '_bottom_measurement', getMeasurement(ce.style[pr + b[2] + sf]));\r
+                       selectByValue(f, fp + '_left_measurement', getMeasurement(ce.style[pr + b[3] + sf]));\r
+                       f.elements[fp + "_left_measurement"].disabled = false;\r
+                       f.elements[fp + "_bottom_measurement"].disabled = false;\r
+                       f.elements[fp + "_right_measurement"].disabled = false;\r
+               }\r
+       }\r
+}\r
+\r
+function isSame(e, pr, sf, b) {\r
+       var a = [], i, x;\r
+\r
+       if (typeof(b) == "undefined")\r
+               b = ['Top', 'Right', 'Bottom', 'Left'];\r
+\r
+       if (typeof(sf) == "undefined" || sf == null)\r
+               sf = "";\r
+\r
+       a[0] = e.style[pr + b[0] + sf];\r
+       a[1] = e.style[pr + b[1] + sf];\r
+       a[2] = e.style[pr + b[2] + sf];\r
+       a[3] = e.style[pr + b[3] + sf];\r
+\r
+       for (i=0; i<a.length; i++) {\r
+               if (a[i] == null)\r
+                       return false;\r
+\r
+               for (x=0; x<a.length; x++) {\r
+                       if (a[x] != a[i])\r
+                               return false;\r
+               }\r
+       }\r
+\r
+       return true;\r
+};\r
+\r
+function hasEqualValues(a) {\r
+       var i, x;\r
+\r
+       for (i=0; i<a.length; i++) {\r
+               if (a[i] == null)\r
+                       return false;\r
+\r
+               for (x=0; x<a.length; x++) {\r
+                       if (a[x] != a[i])\r
+                               return false;\r
+               }\r
+       }\r
+\r
+       return true;\r
+}\r
+\r
+function applyAction() {\r
+       var ce = document.getElementById('container'), ed = tinyMCEPopup.editor;\r
+\r
+       generateCSS();\r
+\r
+       tinyMCEPopup.restoreSelection();\r
+       ed.dom.setAttrib(ed.selection.getNode(), 'style', tinyMCEPopup.editor.dom.serializeStyle(tinyMCEPopup.editor.dom.parseStyle(ce.style.cssText)));\r
+}\r
+\r
+function updateAction() {\r
+       applyAction();\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function generateCSS() {\r
+       var ce = document.getElementById('container'), f = document.forms[0], num = new RegExp('[0-9]+', 'g'), s, t;\r
+\r
+       ce.style.cssText = "";\r
+\r
+       // Build text styles\r
+       ce.style.fontFamily = f.text_font.value;\r
+       ce.style.fontSize = f.text_size.value + (isNum(f.text_size.value) ? (f.text_size_measurement.value || 'px') : "");\r
+       ce.style.fontStyle = f.text_style.value;\r
+       ce.style.lineHeight = f.text_lineheight.value + (isNum(f.text_lineheight.value) ? f.text_lineheight_measurement.value : "");\r
+       ce.style.textTransform = f.text_case.value;\r
+       ce.style.fontWeight = f.text_weight.value;\r
+       ce.style.fontVariant = f.text_variant.value;\r
+       ce.style.color = f.text_color.value;\r
+\r
+       s = "";\r
+       s += f.text_underline.checked ? " underline" : "";\r
+       s += f.text_overline.checked ? " overline" : "";\r
+       s += f.text_linethrough.checked ? " line-through" : "";\r
+       s += f.text_blink.checked ? " blink" : "";\r
+       s = s.length > 0 ? s.substring(1) : s;\r
+\r
+       if (f.text_none.checked)\r
+               s = "none";\r
+\r
+       ce.style.textDecoration = s;\r
+\r
+       // Build background styles\r
+\r
+       ce.style.backgroundColor = f.background_color.value;\r
+       ce.style.backgroundImage = f.background_image.value != "" ? "url(" + f.background_image.value + ")" : "";\r
+       ce.style.backgroundRepeat = f.background_repeat.value;\r
+       ce.style.backgroundAttachment = f.background_attachment.value;\r
+\r
+       if (f.background_hpos.value != "") {\r
+               s = "";\r
+               s += f.background_hpos.value + (isNum(f.background_hpos.value) ? f.background_hpos_measurement.value : "") + " ";\r
+               s += f.background_vpos.value + (isNum(f.background_vpos.value) ? f.background_vpos_measurement.value : "");\r
+               ce.style.backgroundPosition = s;\r
+       }\r
+\r
+       // Build block styles\r
+\r
+       ce.style.wordSpacing = f.block_wordspacing.value + (isNum(f.block_wordspacing.value) ? f.block_wordspacing_measurement.value : "");\r
+       ce.style.letterSpacing = f.block_letterspacing.value + (isNum(f.block_letterspacing.value) ? f.block_letterspacing_measurement.value : "");\r
+       ce.style.verticalAlign = f.block_vertical_alignment.value;\r
+       ce.style.textAlign = f.block_text_align.value;\r
+       ce.style.textIndent = f.block_text_indent.value + (isNum(f.block_text_indent.value) ? f.block_text_indent_measurement.value : "");\r
+       ce.style.whiteSpace = f.block_whitespace.value;\r
+       ce.style.display = f.block_display.value;\r
+\r
+       // Build box styles\r
+\r
+       ce.style.width = f.box_width.value + (isNum(f.box_width.value) ? f.box_width_measurement.value : "");\r
+       ce.style.height = f.box_height.value + (isNum(f.box_height.value) ? f.box_height_measurement.value : "");\r
+       ce.style.styleFloat = f.box_float.value;\r
+\r
+       if (tinymce.isGecko)\r
+               ce.style.cssFloat = f.box_float.value;\r
+\r
+       ce.style.clear = f.box_clear.value;\r
+\r
+       if (!f.box_padding_same.checked) {\r
+               ce.style.paddingTop = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");\r
+               ce.style.paddingRight = f.box_padding_right.value + (isNum(f.box_padding_right.value) ? f.box_padding_right_measurement.value : "");\r
+               ce.style.paddingBottom = f.box_padding_bottom.value + (isNum(f.box_padding_bottom.value) ? f.box_padding_bottom_measurement.value : "");\r
+               ce.style.paddingLeft = f.box_padding_left.value + (isNum(f.box_padding_left.value) ? f.box_padding_left_measurement.value : "");\r
+       } else\r
+               ce.style.padding = f.box_padding_top.value + (isNum(f.box_padding_top.value) ? f.box_padding_top_measurement.value : "");               \r
+\r
+       if (!f.box_margin_same.checked) {\r
+               ce.style.marginTop = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");\r
+               ce.style.marginRight = f.box_margin_right.value + (isNum(f.box_margin_right.value) ? f.box_margin_right_measurement.value : "");\r
+               ce.style.marginBottom = f.box_margin_bottom.value + (isNum(f.box_margin_bottom.value) ? f.box_margin_bottom_measurement.value : "");\r
+               ce.style.marginLeft = f.box_margin_left.value + (isNum(f.box_margin_left.value) ? f.box_margin_left_measurement.value : "");\r
+       } else\r
+               ce.style.margin = f.box_margin_top.value + (isNum(f.box_margin_top.value) ? f.box_margin_top_measurement.value : "");           \r
+\r
+       // Build border styles\r
+\r
+       if (!f.border_style_same.checked) {\r
+               ce.style.borderTopStyle = f.border_style_top.value;\r
+               ce.style.borderRightStyle = f.border_style_right.value;\r
+               ce.style.borderBottomStyle = f.border_style_bottom.value;\r
+               ce.style.borderLeftStyle = f.border_style_left.value;\r
+       } else\r
+               ce.style.borderStyle = f.border_style_top.value;\r
+\r
+       if (!f.border_width_same.checked) {\r
+               ce.style.borderTopWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
+               ce.style.borderRightWidth = f.border_width_right.value + (isNum(f.border_width_right.value) ? f.border_width_right_measurement.value : "");\r
+               ce.style.borderBottomWidth = f.border_width_bottom.value + (isNum(f.border_width_bottom.value) ? f.border_width_bottom_measurement.value : "");\r
+               ce.style.borderLeftWidth = f.border_width_left.value + (isNum(f.border_width_left.value) ? f.border_width_left_measurement.value : "");\r
+       } else\r
+               ce.style.borderWidth = f.border_width_top.value + (isNum(f.border_width_top.value) ? f.border_width_top_measurement.value : "");\r
+\r
+       if (!f.border_color_same.checked) {\r
+               ce.style.borderTopColor = f.border_color_top.value;\r
+               ce.style.borderRightColor = f.border_color_right.value;\r
+               ce.style.borderBottomColor = f.border_color_bottom.value;\r
+               ce.style.borderLeftColor = f.border_color_left.value;\r
+       } else\r
+               ce.style.borderColor = f.border_color_top.value;\r
+\r
+       // Build list styles\r
+\r
+       ce.style.listStyleType = f.list_type.value;\r
+       ce.style.listStylePosition = f.list_position.value;\r
+       ce.style.listStyleImage = f.list_bullet_image.value != "" ? "url(" + f.list_bullet_image.value + ")" : "";\r
+\r
+       // Build positioning styles\r
+\r
+       ce.style.position = f.positioning_type.value;\r
+       ce.style.visibility = f.positioning_visibility.value;\r
+\r
+       if (ce.style.width == "")\r
+               ce.style.width = f.positioning_width.value + (isNum(f.positioning_width.value) ? f.positioning_width_measurement.value : "");\r
+\r
+       if (ce.style.height == "")\r
+               ce.style.height = f.positioning_height.value + (isNum(f.positioning_height.value) ? f.positioning_height_measurement.value : "");\r
+\r
+       ce.style.zIndex = f.positioning_zindex.value;\r
+       ce.style.overflow = f.positioning_overflow.value;\r
+\r
+       if (!f.positioning_placement_same.checked) {\r
+               ce.style.top = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");\r
+               ce.style.right = f.positioning_placement_right.value + (isNum(f.positioning_placement_right.value) ? f.positioning_placement_right_measurement.value : "");\r
+               ce.style.bottom = f.positioning_placement_bottom.value + (isNum(f.positioning_placement_bottom.value) ? f.positioning_placement_bottom_measurement.value : "");\r
+               ce.style.left = f.positioning_placement_left.value + (isNum(f.positioning_placement_left.value) ? f.positioning_placement_left_measurement.value : "");\r
+       } else {\r
+               s = f.positioning_placement_top.value + (isNum(f.positioning_placement_top.value) ? f.positioning_placement_top_measurement.value : "");\r
+               ce.style.top = s;\r
+               ce.style.right = s;\r
+               ce.style.bottom = s;\r
+               ce.style.left = s;\r
+       }\r
+\r
+       if (!f.positioning_clip_same.checked) {\r
+               s = "rect(";\r
+               s += (isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto") + " ";\r
+               s += (isNum(f.positioning_clip_right.value) ? f.positioning_clip_right.value + f.positioning_clip_right_measurement.value : "auto") + " ";\r
+               s += (isNum(f.positioning_clip_bottom.value) ? f.positioning_clip_bottom.value + f.positioning_clip_bottom_measurement.value : "auto") + " ";\r
+               s += (isNum(f.positioning_clip_left.value) ? f.positioning_clip_left.value + f.positioning_clip_left_measurement.value : "auto");\r
+               s += ")";\r
+\r
+               if (s != "rect(auto auto auto auto)")\r
+                       ce.style.clip = s;\r
+       } else {\r
+               s = "rect(";\r
+               t = isNum(f.positioning_clip_top.value) ? f.positioning_clip_top.value + f.positioning_clip_top_measurement.value : "auto";\r
+               s += t + " ";\r
+               s += t + " ";\r
+               s += t + " ";\r
+               s += t + ")";\r
+\r
+               if (s != "rect(auto auto auto auto)")\r
+                       ce.style.clip = s;\r
+       }\r
+\r
+       ce.style.cssText = ce.style.cssText;\r
+}\r
+\r
+function isNum(s) {\r
+       return new RegExp('[0-9]+', 'g').test(s);\r
+}\r
+\r
+function showDisabledControls() {\r
+       var f = document.forms, i, a;\r
+\r
+       for (i=0; i<f.length; i++) {\r
+               for (a=0; a<f[i].elements.length; a++) {\r
+                       if (f[i].elements[a].disabled)\r
+                               tinyMCEPopup.editor.dom.addClass(f[i].elements[a], "disabled");\r
+                       else\r
+                               tinyMCEPopup.editor.dom.removeClass(f[i].elements[a], "disabled");\r
+               }\r
+       }\r
+}\r
+\r
+function fillSelect(f, s, param, dval, sep, em) {\r
+       var i, ar, p, se;\r
+\r
+       f = document.forms[f];\r
+       sep = typeof(sep) == "undefined" ? ";" : sep;\r
+\r
+       if (em)\r
+               addSelectValue(f, s, "", "");\r
+\r
+       ar = tinyMCEPopup.getParam(param, dval).split(sep);\r
+       for (i=0; i<ar.length; i++) {\r
+               se = false;\r
+\r
+               if (ar[i].charAt(0) == '+') {\r
+                       ar[i] = ar[i].substring(1);\r
+                       se = true;\r
+               }\r
+\r
+               p = ar[i].split('=');\r
+\r
+               if (p.length > 1) {\r
+                       addSelectValue(f, s, p[0], p[1]);\r
+\r
+                       if (se)\r
+                               selectByValue(f, s, p[1]);\r
+               } else {\r
+                       addSelectValue(f, s, p[0], p[0]);\r
+\r
+                       if (se)\r
+                               selectByValue(f, s, p[0]);\r
+               }\r
+       }\r
+}\r
+\r
+function toggleSame(ce, pre) {\r
+       var el = document.forms[0].elements, i;\r
+\r
+       if (ce.checked) {\r
+               el[pre + "_top"].disabled = false;\r
+               el[pre + "_right"].disabled = true;\r
+               el[pre + "_bottom"].disabled = true;\r
+               el[pre + "_left"].disabled = true;\r
+\r
+               if (el[pre + "_top_measurement"]) {\r
+                       el[pre + "_top_measurement"].disabled = false;\r
+                       el[pre + "_right_measurement"].disabled = true;\r
+                       el[pre + "_bottom_measurement"].disabled = true;\r
+                       el[pre + "_left_measurement"].disabled = true;\r
+               }\r
+       } else {\r
+               el[pre + "_top"].disabled = false;\r
+               el[pre + "_right"].disabled = false;\r
+               el[pre + "_bottom"].disabled = false;\r
+               el[pre + "_left"].disabled = false;\r
+\r
+               if (el[pre + "_top_measurement"]) {\r
+                       el[pre + "_top_measurement"].disabled = false;\r
+                       el[pre + "_right_measurement"].disabled = false;\r
+                       el[pre + "_bottom_measurement"].disabled = false;\r
+                       el[pre + "_left_measurement"].disabled = false;\r
+               }\r
+       }\r
+\r
+       showDisabledControls();\r
+}\r
+\r
+function synch(fr, to) {\r
+       var f = document.forms[0];\r
+\r
+       f.elements[to].value = f.elements[fr].value;\r
+\r
+       if (f.elements[fr + "_measurement"])\r
+               selectByValue(f, to + "_measurement", f.elements[fr + "_measurement"].value);\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/style/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/style/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..5026313
--- /dev/null
@@ -0,0 +1,63 @@
+tinyMCE.addI18n('en.style_dlg',{\r
+title:"Edit CSS Style",\r
+apply:"Apply",\r
+text_tab:"Text",\r
+background_tab:"Background",\r
+block_tab:"Block",\r
+box_tab:"Box",\r
+border_tab:"Border",\r
+list_tab:"List",\r
+positioning_tab:"Positioning",\r
+text_props:"Text",\r
+text_font:"Font",\r
+text_size:"Size",\r
+text_weight:"Weight",\r
+text_style:"Style",\r
+text_variant:"Variant",\r
+text_lineheight:"Line height",\r
+text_case:"Case",\r
+text_color:"Color",\r
+text_decoration:"Decoration",\r
+text_overline:"overline",\r
+text_underline:"underline",\r
+text_striketrough:"strikethrough",\r
+text_blink:"blink",\r
+text_none:"none",\r
+background_color:"Background color",\r
+background_image:"Background image",\r
+background_repeat:"Repeat",\r
+background_attachment:"Attachment",\r
+background_hpos:"Horizontal position",\r
+background_vpos:"Vertical position",\r
+block_wordspacing:"Word spacing",\r
+block_letterspacing:"Letter spacing",\r
+block_vertical_alignment:"Vertical alignment",\r
+block_text_align:"Text align",\r
+block_text_indent:"Text indent",\r
+block_whitespace:"Whitespace",\r
+block_display:"Display",\r
+box_width:"Width",\r
+box_height:"Height",\r
+box_float:"Float",\r
+box_clear:"Clear",\r
+padding:"Padding",\r
+same:"Same for all",\r
+top:"Top",\r
+right:"Right",\r
+bottom:"Bottom",\r
+left:"Left",\r
+margin:"Margin",\r
+style:"Style",\r
+width:"Width",\r
+height:"Height",\r
+color:"Color",\r
+list_type:"Type",\r
+bullet_image:"Bullet image",\r
+position:"Position",\r
+positioning_type:"Type",\r
+visibility:"Visibility",\r
+zindex:"Z-index",\r
+overflow:"Overflow",\r
+placement:"Placement",\r
+clip:"Clip"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/style/props.htm b/plugins/TinyMCE/js/plugins/style/props.htm
new file mode 100644 (file)
index 0000000..549ed04
--- /dev/null
@@ -0,0 +1,723 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+       <title>{#style_dlg.title}</title>
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>
+       <script type="text/javascript" src="js/props.js"></script>
+       <link href="css/props.css" rel="stylesheet" type="text/css" />
+</head>
+
+<body id="styleprops" style="display: none">
+<form onsubmit="updateAction();return false;" action="#">
+<div class="tabs">
+       <ul>
+               <li id="text_tab" class="current"><span><a href="javascript:mcTabs.displayTab('text_tab','text_panel');" onMouseDown="return false;">{#style_dlg.text_tab}</a></span></li>
+               <li id="background_tab"><span><a href="javascript:mcTabs.displayTab('background_tab','background_panel');" onMouseDown="return false;">{#style_dlg.background_tab}</a></span></li>
+               <li id="block_tab"><span><a href="javascript:mcTabs.displayTab('block_tab','block_panel');" onMouseDown="return false;">{#style_dlg.block_tab}</a></span></li>
+               <li id="box_tab"><span><a href="javascript:mcTabs.displayTab('box_tab','box_panel');" onMouseDown="return false;">{#style_dlg.box_tab}</a></span></li>
+               <li id="border_tab"><span><a href="javascript:mcTabs.displayTab('border_tab','border_panel');" onMouseDown="return false;">{#style_dlg.border_tab}</a></span></li>
+               <li id="list_tab"><span><a href="javascript:mcTabs.displayTab('list_tab','list_panel');" onMouseDown="return false;">{#style_dlg.list_tab}</a></span></li>
+               <li id="positioning_tab"><span><a href="javascript:mcTabs.displayTab('positioning_tab','positioning_panel');" onMouseDown="return false;">{#style_dlg.positioning_tab}</a></span></li>
+       </ul>
+</div>
+
+<div class="panel_wrapper">
+<div id="text_panel" class="panel current">
+       <table border="0" width="100%">
+               <tr>
+                       <td><label for="text_font">{#style_dlg.text_font}</label></td>
+                       <td colspan="3">
+                               <select id="text_font" name="text_font" class="mceEditableSelect mceFocus"></select>
+                       </td>
+               </tr>
+               <tr>
+                       <td><label for="text_size">{#style_dlg.text_size}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><select id="text_size" name="text_size" class="mceEditableSelect"></select></td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="text_size_measurement" name="text_size_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+                       <td><label for="text_weight">{#style_dlg.text_weight}</label></td>
+                       <td>
+                               <select id="text_weight" name="text_weight"></select>
+                       </td>
+               </tr>
+               <tr>
+                       <td><label for="text_style">{#style_dlg.text_style}</label></td>
+                       <td>
+                               <select id="text_style" name="text_style" class="mceEditableSelect"></select>
+                       </td>
+                       <td><label for="text_variant">{#style_dlg.text_variant}</label></td>
+                       <td>
+                               <select id="text_variant" name="text_variant"></select>
+                       </td>
+               </tr>
+               <tr>
+                       <td><label for="text_lineheight">{#style_dlg.text_lineheight}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td>
+                                                       <select id="text_lineheight" name="text_lineheight" class="mceEditableSelect"></select>
+                                               </td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="text_lineheight_measurement" name="text_lineheight_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+                       <td><label for="text_case">{#style_dlg.text_case}</label></td>
+                       <td>
+                               <select id="text_case" name="text_case"></select>
+                       </td>
+               </tr>
+               <tr>
+                       <td><label for="text_color">{#style_dlg.text_color}</label></td>
+                       <td colspan="2">
+                               <table border="0" cellpadding="0" cellspacing="0">
+                                       <tr>
+                                               <td><input id="text_color" name="text_color" type="text" value="" size="9" onChange="updateColor('text_color_pick','text_color');" /></td>
+                                               <td id="text_color_pickcontainer">&nbsp;</td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+               <tr>
+                       <td valign="top" style="vertical-align: top; padding-top: 3px;">{#style_dlg.text_decoration}</td>
+                       <td colspan="2">
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><input id="text_underline" name="text_underline" class="checkbox" type="checkbox" /></td>
+                                               <td><label for="text_underline">{#style_dlg.text_underline}</label></td>
+                                       </tr>
+                                       <tr>
+                                               <td><input id="text_overline" name="text_overline" class="checkbox" type="checkbox" /></td>
+                                               <td><label for="text_overline">{#style_dlg.text_overline}</label></td>
+                                       </tr>
+                                       <tr>
+                                               <td><input id="text_linethrough" name="text_linethrough" class="checkbox" type="checkbox" /></td>
+                                               <td><label for="text_linethrough">{#style_dlg.text_striketrough}</label></td>
+                                       </tr>
+                                       <tr>
+                                               <td><input id="text_blink" name="text_blink" class="checkbox" type="checkbox" /></td>
+                                               <td><label for="text_blink">{#style_dlg.text_blink}</label></td>
+                                       </tr>
+                                       <tr>
+                                               <td><input id="text_none" name="text_none" class="checkbox" type="checkbox" /></td>
+                                               <td><label for="text_none">{#style_dlg.text_none}</label></td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+       </table>
+</div>
+
+<div id="background_panel" class="panel">
+       <table border="0">
+               <tr>
+                       <td><label for="background_color">{#style_dlg.background_color}</label></td>
+                       <td>
+                               <table border="0" cellpadding="0" cellspacing="0">
+                                       <tr>
+                                               <td><input id="background_color" name="background_color" type="text" value="" size="9" onChange="updateColor('background_color_pick','background_color');" /></td>
+                                               <td id="background_color_pickcontainer">&nbsp;</td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+
+               <tr>
+                       <td><label for="background_image">{#style_dlg.background_image}</label></td>
+                       <td><table border="0" cellspacing="0" cellpadding="0">
+                               <tr> 
+                                 <td><input id="background_image" name="background_image" type="text" /></td> 
+                                 <td id="background_image_browser">&nbsp;</td>
+                               </tr>
+                               </table>
+                       </td>
+               </tr>
+
+               <tr>
+                       <td><label for="background_repeat">{#style_dlg.background_repeat}</label></td>
+                       <td><select id="background_repeat" name="background_repeat" class="mceEditableSelect"></select></td>
+               </tr>
+
+               <tr>
+                       <td><label for="background_attachment">{#style_dlg.background_attachment}</label></td>
+                       <td><select id="background_attachment" name="background_attachment" class="mceEditableSelect"></select></td>
+               </tr>
+
+               <tr>
+                       <td><label for="background_hpos">{#style_dlg.background_hpos}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><select id="background_hpos" name="background_hpos" class="mceEditableSelect"></select></td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="background_hpos_measurement" name="background_hpos_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+
+               <tr>
+                       <td><label for="background_vpos">{#style_dlg.background_vpos}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><select id="background_vpos" name="background_vpos" class="mceEditableSelect"></select></td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="background_vpos_measurement" name="background_vpos_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+       </table>
+</div>
+
+<div id="block_panel" class="panel">
+       <table border="0">
+               <tr>
+                       <td><label for="block_wordspacing">{#style_dlg.block_wordspacing}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><select id="block_wordspacing" name="block_wordspacing" class="mceEditableSelect"></select></td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="block_wordspacing_measurement" name="block_wordspacing_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+
+               <tr>
+                       <td><label for="block_letterspacing">{#style_dlg.block_letterspacing}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><select id="block_letterspacing" name="block_letterspacing" class="mceEditableSelect"></select></td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="block_letterspacing_measurement" name="block_letterspacing_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+
+               <tr>
+                       <td><label for="block_vertical_alignment">{#style_dlg.block_vertical_alignment}</label></td>
+                       <td><select id="block_vertical_alignment" name="block_vertical_alignment" class="mceEditableSelect"></select></td>
+               </tr>
+
+               <tr>
+                       <td><label for="block_text_align">{#style_dlg.block_text_align}</label></td>
+                       <td><select id="block_text_align" name="block_text_align" class="mceEditableSelect"></select></td>
+               </tr>
+
+               <tr>
+                       <td><label for="block_text_indent">{#style_dlg.block_text_indent}</label></td>
+                       <td>
+                               <table border="0" cellspacing="0" cellpadding="0">
+                                       <tr>
+                                               <td><input type="text" id="block_text_indent" name="block_text_indent" /></td>
+                                               <td>&nbsp;</td>
+                                               <td><select id="block_text_indent_measurement" name="block_text_indent_measurement"></select></td>
+                                       </tr>
+                               </table>
+                       </td>
+               </tr>
+
+               <tr>
+                       <td><label for="block_whitespace">{#style_dlg.block_whitespace}</label></td>
+                       <td><select id="block_whitespace" name="block_whitespace" class="mceEditableSelect"></select></td>
+               </tr>
+
+               <tr>
+                       <td><label for="block_display">{#style_dlg.block_display}</label></td>
+                       <td><select id="block_display" name="block_display" class="mceEditableSelect"></select></td>
+               </tr>
+       </table>
+</div>
+
+<div id="box_panel" class="panel">
+<table border="0">
+       <tr>
+               <td><label for="box_width">{#style_dlg.box_width}</label></td>
+               <td>
+                       <table border="0" cellspacing="0" cellpadding="0">
+                               <tr>
+                                       <td><input type="text" id="box_width" name="box_width" class="mceEditableSelect" onChange="synch('box_width','positioning_width');" /></td>
+                                       <td>&nbsp;</td>
+                                       <td><select id="box_width_measurement" name="box_width_measurement"></select></td>
+                               </tr>
+                       </table>
+               </td>
+               <td>&nbsp;&nbsp;&nbsp;<label for="box_float">{#style_dlg.box_float}</label></td>
+               <td><select id="box_float" name="box_float" class="mceEditableSelect"></select></td>
+       </tr>
+
+       <tr>
+               <td><label for="box_height">{#style_dlg.box_height}</label></td>
+               <td>
+                       <table border="0" cellspacing="0" cellpadding="0">
+                               <tr>
+                                       <td><input type="text" id="box_height" name="box_height" class="mceEditableSelect" onChange="synch('box_height','positioning_height');" /></td>
+                                       <td>&nbsp;</td>
+                                       <td><select id="box_height_measurement" name="box_height_measurement"></select></td>
+                               </tr>
+                       </table>
+               </td>
+               <td>&nbsp;&nbsp;&nbsp;<label for="box_clear">{#style_dlg.box_clear}</label></td>
+               <td><select id="box_clear" name="box_clear" class="mceEditableSelect"></select></td>
+       </tr>
+</table>
+<div style="float: left; width: 49%">
+       <fieldset>
+               <legend>{#style_dlg.padding}</legend>
+
+               <table border="0">
+                       <tr>
+                               <td>&nbsp;</td>
+                               <td><input type="checkbox" id="box_padding_same" name="box_padding_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_padding');" /> <label for="box_padding_same">{#style_dlg.same}</label></td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_padding_top">{#style_dlg.top}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_padding_top" name="box_padding_top" class="mceEditableSelect" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_padding_top_measurement" name="box_padding_top_measurement"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_padding_right">{#style_dlg.right}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_padding_right" name="box_padding_right" class="mceEditableSelect" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_padding_right_measurement" name="box_padding_right_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_padding_bottom">{#style_dlg.bottom}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_padding_bottom" name="box_padding_bottom" class="mceEditableSelect" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_padding_bottom_measurement" name="box_padding_bottom_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_padding_left">{#style_dlg.left}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_padding_left" name="box_padding_left" class="mceEditableSelect" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_padding_left_measurement" name="box_padding_left_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+               </table>
+       </fieldset>
+</div>
+
+<div style="float: right; width: 49%">
+       <fieldset>
+               <legend>{#style_dlg.margin}</legend>
+
+               <table border="0">
+                       <tr>
+                               <td>&nbsp;</td>
+                               <td><input type="checkbox" id="box_margin_same" name="box_margin_same" class="checkbox" checked="checked" onClick="toggleSame(this,'box_margin');" /> <label for="box_margin_same">{#style_dlg.same}</label></td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_margin_top">{#style_dlg.top}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_margin_top" name="box_margin_top" class="mceEditableSelect" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_margin_top_measurement" name="box_margin_top_measurement"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_margin_right">{#style_dlg.right}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_margin_right" name="box_margin_right" class="mceEditableSelect" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_margin_right_measurement" name="box_margin_right_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_margin_bottom">{#style_dlg.bottom}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_margin_bottom" name="box_margin_bottom" class="mceEditableSelect" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_margin_bottom_measurement" name="box_margin_bottom_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td><label for="box_margin_left">{#style_dlg.left}</label></td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="box_margin_left" name="box_margin_left" class="mceEditableSelect" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="box_margin_left_measurement" name="box_margin_left_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+               </table>
+       </fieldset>
+</div>
+<br style="clear: both" />
+</div>
+
+<div id="border_panel" class="panel">
+<table border="0" cellspacing="0" cellpadding="0" width="100%">
+<tr>
+       <td class="tdelim">&nbsp;</td>
+       <td class="tdelim delim">&nbsp;</td>
+       <td class="tdelim">{#style_dlg.style}</td>
+       <td class="tdelim delim">&nbsp;</td>
+       <td class="tdelim">{#style_dlg.width}</td>
+       <td class="tdelim delim">&nbsp;</td>
+       <td class="tdelim">{#style_dlg.color}</td>
+</tr>
+
+<tr>
+       <td>&nbsp;</td>
+       <td class="delim">&nbsp;</td>
+       <td><input type="checkbox" id="border_style_same" name="border_style_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_style');" /> <label for="border_style_same">{#style_dlg.same}</label></td>
+       <td class="delim">&nbsp;</td>
+       <td><input type="checkbox" id="border_width_same" name="border_width_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_width');" /> <label for="border_width_same">{#style_dlg.same}</label></td>
+       <td class="delim">&nbsp;</td>
+       <td><input type="checkbox" id="border_color_same" name="border_color_same" class="checkbox" checked="checked" onClick="toggleSame(this,'border_color');" /> <label for="border_color_same">{#style_dlg.same}</label></td>
+</tr>
+
+<tr>
+       <td>{#style_dlg.top}</td>
+       <td class="delim">&nbsp;</td>
+       <td><select id="border_style_top" name="border_style_top" class="mceEditableSelect"></select></td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellspacing="0" cellpadding="0">
+                       <tr>
+                               <td><select id="border_width_top" name="border_width_top" class="mceEditableSelect"></select></td>
+                               <td>&nbsp;</td>
+                               <td><select id="border_width_top_measurement" name="border_width_top_measurement"></select></td>
+                       </tr>
+               </table>
+       </td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellpadding="0" cellspacing="0">
+                       <tr>
+                               <td><input id="border_color_top" name="border_color_top" type="text" value="" size="9" onChange="updateColor('border_color_top_pick','border_color_top');" /></td>
+                               <td id="border_color_top_pickcontainer">&nbsp;</td>
+                       </tr>
+               </table>
+       </td>
+</tr>
+
+<tr>
+       <td>{#style_dlg.right}</td>
+       <td class="delim">&nbsp;</td>
+       <td><select id="border_style_right" name="border_style_right" class="mceEditableSelect" disabled="disabled"></select></td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellspacing="0" cellpadding="0">
+                       <tr>
+                               <td><select id="border_width_right" name="border_width_right" class="mceEditableSelect" disabled="disabled"></select></td>
+                               <td>&nbsp;</td>
+                               <td><select id="border_width_right_measurement" name="border_width_right_measurement" disabled="disabled"></select></td>
+                       </tr>
+               </table>
+       </td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellpadding="0" cellspacing="0">
+                       <tr>
+                               <td><input id="border_color_right" name="border_color_right" type="text" value="" size="9" onChange="updateColor('border_color_right_pick','border_color_right');" disabled="disabled" /></td>
+                               <td id="border_color_right_pickcontainer">&nbsp;</td>
+                       </tr>
+               </table>
+       </td>
+</tr>
+
+<tr>
+       <td>{#style_dlg.bottom}</td>
+       <td class="delim">&nbsp;</td>
+       <td><select id="border_style_bottom" name="border_style_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellspacing="0" cellpadding="0">
+                       <tr>
+                               <td><select id="border_width_bottom" name="border_width_bottom" class="mceEditableSelect" disabled="disabled"></select></td>
+                               <td>&nbsp;</td>
+                               <td><select id="border_width_bottom_measurement" name="border_width_bottom_measurement" disabled="disabled"></select></td>
+                       </tr>
+               </table>
+       </td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellpadding="0" cellspacing="0">
+                       <tr>
+                               <td><input id="border_color_bottom" name="border_color_bottom" type="text" value="" size="9" onChange="updateColor('border_color_bottom_pick','border_color_bottom');" disabled="disabled" /></td>
+                               <td id="border_color_bottom_pickcontainer">&nbsp;</td>
+                       </tr>
+               </table>
+       </td>
+</tr>
+
+<tr>
+       <td>{#style_dlg.left}</td>
+       <td class="delim">&nbsp;</td>
+       <td><select id="border_style_left" name="border_style_left" class="mceEditableSelect" disabled="disabled"></select></td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellspacing="0" cellpadding="0">
+                       <tr>
+                               <td><select id="border_width_left" name="border_width_left" class="mceEditableSelect" disabled="disabled"></select></td>
+                               <td>&nbsp;</td>
+                               <td><select id="border_width_left_measurement" name="border_width_left_measurement" disabled="disabled"></select></td>
+                       </tr>
+               </table>
+       </td>
+       <td class="delim">&nbsp;</td>
+       <td>
+               <table border="0" cellpadding="0" cellspacing="0">
+                       <tr>
+                               <td><input id="border_color_left" name="border_color_left" type="text" value="" size="9" onChange="updateColor('border_color_left_pick','border_color_left');" disabled="disabled" /></td>
+                               <td id="border_color_left_pickcontainer">&nbsp;</td>
+                       </tr>
+               </table>
+       </td>
+</tr>
+</table>
+</div>
+
+<div id="list_panel" class="panel">
+       <table border="0">
+               <tr>
+                       <td><label for="list_type">{#style_dlg.list_type}</label></td>
+                       <td><select id="list_type" name="list_type" class="mceEditableSelect"></select></td>
+               </tr>
+
+               <tr>
+                       <td><label for="list_bullet_image">{#style_dlg.bullet_image}</label></td>
+                       <td><input id="list_bullet_image" name="list_bullet_image" type="text" /></td>
+               </tr>
+
+               <tr>
+                       <td><label for="list_position">{#style_dlg.position}</label></td>
+                       <td><select id="list_position" name="list_position" class="mceEditableSelect"></select></td>
+               </tr>
+       </table>
+</div>
+
+<div id="positioning_panel" class="panel">
+<table border="0">
+       <tr>
+               <td><label for="positioning_type">{#style_dlg.positioning_type}</label></td>
+               <td><select id="positioning_type" name="positioning_type" class="mceEditableSelect"></select></td>
+               <td>&nbsp;&nbsp;&nbsp;<label for="positioning_visibility">{#style_dlg.visibility}</label></td>
+               <td><select id="positioning_visibility" name="positioning_visibility" class="mceEditableSelect"></select></td>
+       </tr>
+
+       <tr>
+               <td><label for="positioning_width">{#style_dlg.width}</label></td>
+               <td>
+                       <table border="0" cellspacing="0" cellpadding="0">
+                               <tr>
+                                       <td><input type="text" id="positioning_width" name="positioning_width" onChange="synch('positioning_width','box_width');" /></td>
+                                       <td>&nbsp;</td>
+                                       <td><select id="positioning_width_measurement" name="positioning_width_measurement"></select></td>
+                               </tr>
+                       </table>
+               </td>
+               <td>&nbsp;&nbsp;&nbsp;<label for="positioning_zindex">{#style_dlg.zindex}</label></td>
+               <td><input type="text" id="positioning_zindex" name="positioning_zindex" /></td>
+       </tr>
+
+       <tr>
+               <td><label for="positioning_height">{#style_dlg.height}</label></td>
+               <td>
+                       <table border="0" cellspacing="0" cellpadding="0">
+                               <tr>
+                                       <td><input type="text" id="positioning_height" name="positioning_height" onChange="synch('positioning_height','box_height');" /></td>
+                                       <td>&nbsp;</td>
+                                       <td><select id="positioning_height_measurement" name="positioning_height_measurement"></select></td>
+                               </tr>
+                       </table>
+               </td>
+               <td>&nbsp;&nbsp;&nbsp;<label for="positioning_overflow">{#style_dlg.overflow}</label></td>
+               <td><select id="positioning_overflow" name="positioning_overflow" class="mceEditableSelect"></select></td>
+       </tr>
+</table>
+
+<div style="float: left; width: 49%">
+       <fieldset>
+               <legend>{#style_dlg.placement}</legend>
+
+               <table border="0">
+                       <tr>
+                               <td>&nbsp;</td>
+                               <td><input type="checkbox" id="positioning_placement_same" name="positioning_placement_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_placement');" /> <label for="positioning_placement_same">{#style_dlg.same}</label></td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.top}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_placement_top" name="positioning_placement_top" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_placement_top_measurement" name="positioning_placement_top_measurement"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.right}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_placement_right" name="positioning_placement_right" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_placement_right_measurement" name="positioning_placement_right_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.bottom}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_placement_bottom" name="positioning_placement_bottom" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_placement_bottom_measurement" name="positioning_placement_bottom_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.left}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_placement_left" name="positioning_placement_left" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_placement_left_measurement" name="positioning_placement_left_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+               </table>
+       </fieldset>
+</div>
+
+<div style="float: right; width: 49%">
+       <fieldset>
+               <legend>{#style_dlg.clip}</legend>
+
+               <table border="0">
+                       <tr>
+                               <td>&nbsp;</td>
+                               <td><input type="checkbox" id="positioning_clip_same" name="positioning_clip_same" class="checkbox" checked="checked" onClick="toggleSame(this,'positioning_clip');" /> <label for="positioning_clip_same">{#style_dlg.same}</label></td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.top}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_clip_top" name="positioning_clip_top" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_clip_top_measurement" name="positioning_clip_top_measurement"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.right}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_clip_right" name="positioning_clip_right" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_clip_right_measurement" name="positioning_clip_right_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.bottom}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_clip_bottom" name="positioning_clip_bottom" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_clip_bottom_measurement" name="positioning_clip_bottom_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+                       <tr>
+                               <td>{#style_dlg.left}</td>
+                               <td>
+                                       <table border="0" cellspacing="0" cellpadding="0">
+                                               <tr>
+                                                       <td><input type="text" id="positioning_clip_left" name="positioning_clip_left" disabled="disabled" /></td>
+                                                       <td>&nbsp;</td>
+                                                       <td><select id="positioning_clip_left_measurement" name="positioning_clip_left_measurement" disabled="disabled"></select></td>
+                                               </tr>
+                                       </table>
+                               </td>
+                       </tr>
+               </table>
+       </fieldset>
+</div>
+<br style="clear: both" />
+</div>
+</div>
+
+<div class="mceActionPanel">
+       <input type="submit" id="insert" name="insert" value="{#update}" />
+       <input type="button" class="button" id="apply" name="apply" value="{#style_dlg.apply}" onClick="applyAction();" />
+       <input type="button" id="cancel" name="cancel" value="{#cancel}" onClick="tinyMCEPopup.close();" />
+</div>
+</form>
+
+<div style="display: none">
+       <div id="container"></div>
+</div>
+
+</body>
+</html>
diff --git a/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin.js b/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin.js
new file mode 100644 (file)
index 0000000..27d2440
--- /dev/null
@@ -0,0 +1 @@
+(function(){var c=tinymce.DOM,a=tinymce.dom.Event,d=tinymce.each,b=tinymce.explode;tinymce.create("tinymce.plugins.TabFocusPlugin",{init:function(f,g){function e(i,j){if(j.keyCode===9){return a.cancel(j)}}function h(l,p){var j,m,o,n,k;function q(i){o=c.getParent(l.id,"form");n=o.elements;if(o){d(n,function(s,r){if(s.id==l.id){j=r;return false}});if(i>0){for(m=j+1;m<n.length;m++){if(n[m].type!="hidden"){return n[m]}}}else{for(m=j-1;m>=0;m--){if(n[m].type!="hidden"){return n[m]}}}}return null}if(p.keyCode===9){k=b(l.getParam("tab_focus",l.getParam("tabfocus_elements",":prev,:next")));if(k.length==1){k[1]=k[0];k[0]=":prev"}if(p.shiftKey){if(k[0]==":prev"){n=q(-1)}else{n=c.get(k[0])}}else{if(k[1]==":next"){n=q(1)}else{n=c.get(k[1])}}if(n){if(l=tinymce.get(n.id||n.name)){l.focus()}else{window.setTimeout(function(){window.focus();n.focus()},10)}return a.cancel(p)}}}f.onKeyUp.add(e);if(tinymce.isGecko){f.onKeyPress.add(h);f.onKeyDown.add(e)}else{f.onKeyDown.add(h)}f.onInit.add(function(){d(c.select("a:first,a:last",f.getContainer()),function(i){a.add(i,"focus",function(){f.focus()})})})},getInfo:function(){return{longname:"Tabfocus",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("tabfocus",tinymce.plugins.TabFocusPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/tabfocus/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..c2be2f4
--- /dev/null
@@ -0,0 +1,112 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, explode = tinymce.explode;\r
+\r
+       tinymce.create('tinymce.plugins.TabFocusPlugin', {\r
+               init : function(ed, url) {\r
+                       function tabCancel(ed, e) {\r
+                               if (e.keyCode === 9)\r
+                                       return Event.cancel(e);\r
+                       };\r
+\r
+                       function tabHandler(ed, e) {\r
+                               var x, i, f, el, v;\r
+\r
+                               function find(d) {\r
+                                       f = DOM.getParent(ed.id, 'form');\r
+                                       el = f.elements;\r
+\r
+                                       if (f) {\r
+                                               each(el, function(e, i) {\r
+                                                       if (e.id == ed.id) {\r
+                                                               x = i;\r
+                                                               return false;\r
+                                                       }\r
+                                               });\r
+\r
+                                               if (d > 0) {\r
+                                                       for (i = x + 1; i < el.length; i++) {\r
+                                                               if (el[i].type != 'hidden')\r
+                                                                       return el[i];\r
+                                                       }\r
+                                               } else {\r
+                                                       for (i = x - 1; i >= 0; i--) {\r
+                                                               if (el[i].type != 'hidden')\r
+                                                                       return el[i];\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       return null;\r
+                               };\r
+\r
+                               if (e.keyCode === 9) {\r
+                                       v = explode(ed.getParam('tab_focus', ed.getParam('tabfocus_elements', ':prev,:next')));\r
+\r
+                                       if (v.length == 1) {\r
+                                               v[1] = v[0];\r
+                                               v[0] = ':prev';\r
+                                       }\r
+\r
+                                       // Find element to focus\r
+                                       if (e.shiftKey) {\r
+                                               if (v[0] == ':prev')\r
+                                                       el = find(-1);\r
+                                               else\r
+                                                       el = DOM.get(v[0]);\r
+                                       } else {\r
+                                               if (v[1] == ':next')\r
+                                                       el = find(1);\r
+                                               else\r
+                                                       el = DOM.get(v[1]);\r
+                                       }\r
+\r
+                                       if (el) {\r
+                                               if (ed = tinymce.get(el.id || el.name))\r
+                                                       ed.focus();\r
+                                               else\r
+                                                       window.setTimeout(function() {window.focus();el.focus();}, 10);\r
+\r
+                                               return Event.cancel(e);\r
+                                       }\r
+                               }\r
+                       };\r
+\r
+                       ed.onKeyUp.add(tabCancel);\r
+\r
+                       if (tinymce.isGecko) {\r
+                               ed.onKeyPress.add(tabHandler);\r
+                               ed.onKeyDown.add(tabCancel);\r
+                       } else\r
+                               ed.onKeyDown.add(tabHandler);\r
+\r
+                       ed.onInit.add(function() {\r
+                               each(DOM.select('a:first,a:last', ed.getContainer()), function(n) {\r
+                                       Event.add(n, 'focus', function() {ed.focus();});\r
+                               });\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Tabfocus',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/tabfocus',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('tabfocus', tinymce.plugins.TabFocusPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/cell.htm b/plugins/TinyMCE/js/plugins/table/cell.htm
new file mode 100644 (file)
index 0000000..d243e1d
--- /dev/null
@@ -0,0 +1,178 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#table_dlg.cell_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/cell.js"></script>\r
+       <link href="css/cell.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body id="tablecell" style="display: none">\r
+       <form onsubmit="updateAction();return false;" action="#">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <fieldset>\r
+                                       <legend>{#table_dlg.general_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td><label for="align">{#table_dlg.align}</label></td>\r
+                                                       <td>\r
+                                                               <select id="align" name="align" class="mceFocus">\r
+                                                                       <option value="">{#not_set}</option>\r
+                                                                       <option value="center">{#table_dlg.align_middle}</option>\r
+                                                                       <option value="left">{#table_dlg.align_left}</option>\r
+                                                                       <option value="right">{#table_dlg.align_right}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+               \r
+                                                       <td><label for="celltype">{#table_dlg.cell_type}</label></td>\r
+                                                       <td>\r
+                                                               <select id="celltype" name="celltype">\r
+                                                                       <option value="td">{#table_dlg.td}</option>\r
+                                                                       <option value="th">{#table_dlg.th}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="valign">{#table_dlg.valign}</label></td>\r
+                                                       <td>\r
+                                                               <select id="valign" name="valign">\r
+                                                                       <option value="">{#not_set}</option>\r
+                                                                       <option value="top">{#table_dlg.align_top}</option>\r
+                                                                       <option value="middle">{#table_dlg.align_middle}</option>\r
+                                                                       <option value="bottom">{#table_dlg.align_bottom}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                                       <td><label for="scope">{#table_dlg.scope}</label></td>\r
+                                                       <td>\r
+                                                               <select id="scope" name="scope">\r
+                                                                       <option value="">{#not_set}</option>\r
+                                                                       <option value="col">{#table.col}</option>\r
+                                                                       <option value="row">{#table.row}</option>\r
+                                                                       <option value="rowgroup">{#table_dlg.rowgroup}</option>\r
+                                                                       <option value="colgroup">{#table_dlg.colgroup}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="width">{#table_dlg.width}</label></td>\r
+                                                       <td><input id="width" name="width" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>\r
+\r
+                                                       <td><label for="height">{#table_dlg.height}</label></td>\r
+                                                       <td><input id="height" name="height" type="text" value="" size="4" maxlength="4" onchange="changedSize();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr id="styleSelectRow">\r
+                                                       <td><label for="class">{#class_name}</label></td>\r
+                                                       <td colspan="3">\r
+                                                               <select id="class" name="class" class="mceEditableSelect">\r
+                                                                       <option value="" selected="selected">{#not_set}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#table_dlg.advanced_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="0" cellspacing="4">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
+                                                       <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="style">{#table_dlg.style}</label></td>\r
+                                                       <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
+                                                       <td>\r
+                                                               <select id="dir" name="dir" style="width: 200px"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="ltr">{#table_dlg.ltr}</option> \r
+                                                                               <option value="rtl">{#table_dlg.rtl}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> \r
+                                                       <td>\r
+                                                               <input id="lang" name="lang" type="text" value="" style="width: 200px" />\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>\r
+                                                                               <td id="backgroundimagebrowsercontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>\r
+                                                                               <td id="bordercolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>\r
+                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <div>\r
+                               <select id="action" name="action">\r
+                                       <option value="cell">{#table_dlg.cell_cell}</option>\r
+                                       <option value="row">{#table_dlg.cell_row}</option>\r
+                                       <option value="all">{#table_dlg.cell_all}</option>\r
+                               </select>\r
+                       </div>\r
+\r
+                       <input type="submit" id="insert" name="insert" value="{#update}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+       </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/table/css/cell.css b/plugins/TinyMCE/js/plugins/table/css/cell.css
new file mode 100644 (file)
index 0000000..a067ecd
--- /dev/null
@@ -0,0 +1,17 @@
+/* CSS file for cell dialog in the table plugin */\r
+\r
+.panel_wrapper div.current {\r
+       height: 200px;\r
+}\r
+\r
+.advfield {\r
+       width: 200px;\r
+}\r
+\r
+#action {\r
+       margin-bottom: 3px;\r
+}\r
+\r
+#class {\r
+       width: 150px;\r
+}
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/css/row.css b/plugins/TinyMCE/js/plugins/table/css/row.css
new file mode 100644 (file)
index 0000000..1f7755d
--- /dev/null
@@ -0,0 +1,25 @@
+/* CSS file for row dialog in the table plugin */\r
+\r
+.panel_wrapper div.current {\r
+       height: 200px;\r
+}\r
+\r
+.advfield {\r
+       width: 200px;\r
+}\r
+\r
+#action {\r
+       margin-bottom: 3px;\r
+}\r
+\r
+#rowtype,#align,#valign,#class,#height {\r
+       width: 150px;\r
+}\r
+\r
+#height {\r
+       width: 50px;    \r
+}\r
+\r
+.col2 {\r
+       padding-left: 20px;\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/table/css/table.css b/plugins/TinyMCE/js/plugins/table/css/table.css
new file mode 100644 (file)
index 0000000..d11c3f6
--- /dev/null
@@ -0,0 +1,13 @@
+/* CSS file for table dialog in the table plugin */\r
+\r
+.panel_wrapper div.current {\r
+       height: 245px;\r
+}\r
+\r
+.advfield {\r
+       width: 200px;\r
+}\r
+\r
+#class {\r
+       width: 150px;\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/table/editor_plugin.js b/plugins/TinyMCE/js/plugins/table/editor_plugin.js
new file mode 100644 (file)
index 0000000..266d7d5
--- /dev/null
@@ -0,0 +1 @@
+(function(b){var c=b.each;function a(F,E,I){var e,J,B,n;r();n=E.getParent(I.getStart(),"th,td");if(n){J=D(n);B=G();n=v(J.x,J.y)}function w(L,K){L=L.cloneNode(K);L.removeAttribute("id");return L}function r(){var K=0;e=[];c(["thead","tbody","tfoot"],function(L){var M=E.select(L+" tr",F);c(M,function(N,O){O+=K;c(E.select("td,th",N),function(U,P){var Q,R,S,T;if(e[O]){while(e[O][P]){P++}}S=g(U,"rowspan");T=g(U,"colspan");for(R=O;R<O+S;R++){if(!e[R]){e[R]=[]}for(Q=P;Q<P+T;Q++){e[R][Q]={part:L,real:R==O&&Q==P,elm:U,rowspan:S,colspan:T}}}})});K+=M.length})}function v(K,M){var L;L=e[M];if(L){return L[K]}}function g(L,K){return parseInt(L.getAttribute(K)||1)}function h(K){return E.hasClass(K.elm,"mceSelected")||K==n}function j(){var K=[];c(F.rows,function(L){c(L.cells,function(M){if(E.hasClass(M,"mceSelected")||M==n.elm){K.push(L);return false}})});return K}function q(){var K=E.createRng();K.setStartAfter(F);K.setEndAfter(F);I.setRng(K);E.remove(F)}function d(K){var L;b.walk(K,function(N){var M;if(N.nodeType==3){c(E.getParents(N.parentNode,null,K).reverse(),function(O){O=w(O,false);if(!L){L=M=O}else{if(M){M.appendChild(O)}}M=O});if(M){M.innerHTML=b.isIE?"&nbsp;":'<br _mce_bogus="1" />'}return false}},"childNodes");K=w(K,false);K.rowSpan=K.colSpan=1;if(L){K.appendChild(L)}else{if(!b.isIE){K.innerHTML='<br _mce_bogus="1" />'}}return K}function p(){var K=E.createRng();c(E.select("tr",F),function(L){if(L.cells.length==0){E.remove(L)}});if(E.select("tr",F).length==0){K.setStartAfter(F);K.setEndAfter(F);I.setRng(K);E.remove(F);return}c(E.select("thead,tbody,tfoot",F),function(L){if(L.rows.length==0){E.remove(L)}});r();row=e[Math.min(e.length-1,J.y)];if(row){I.select(row[Math.min(row.length-1,J.x)].elm,true);I.collapse(true)}}function s(Q,O,S,P){var N,L,K,M,R;N=e[O][Q].elm.parentNode;for(K=1;K<=S;K++){N=E.getNext(N,"tr");if(N){for(L=Q;L>=0;L--){R=e[O+K][L].elm;if(R.parentNode==N){for(M=1;M<=P;M++){E.insertAfter(d(R),R)}break}}if(L==-1){for(M=1;M<=P;M++){N.insertBefore(d(N.cells[0]),N.cells[0])}}}}}function A(){c(e,function(K,L){c(K,function(N,M){var Q,P,R,O;if(h(N)){N=N.elm;Q=g(N,"colspan");P=g(N,"rowspan");if(Q>1||P>1){N.colSpan=N.rowSpan=1;for(O=0;O<Q-1;O++){E.insertAfter(d(N),N)}s(M,L,P-1,Q)}}})})}function o(S,P,V){var N,M,U,T,R,O,Q,K,S,L;if(S){pos=D(S);N=pos.x;M=pos.y;U=N+(P-1);T=M+(V-1)}else{N=J.x;M=J.y;U=B.x;T=B.y}Q=v(N,M);K=v(U,T);if(Q&&K&&Q.part==K.part){A();r();Q=v(N,M).elm;Q.colSpan=(U-N)+1;Q.rowSpan=(T-M)+1;for(O=M;O<=T;O++){for(R=N;R<=U;R++){S=e[O][R].elm;if(S!=Q){L=b.grep(S.childNodes);c(L,function(X,W){if(X.nodeName!="BR"||W!=L.length-1){Q.appendChild(X)}});E.remove(S)}}}p()}}function k(N){var K,P,M,O,Q,R,L,S;c(e,function(T,U){c(T,function(W,V){if(h(W)){W=W.elm;Q=W.parentNode;R=w(Q,false);K=U;if(N){return false}}});if(N){return !K}});for(O=0;O<e[0].length;O++){P=e[K][O].elm;if(P!=M){if(!N){rowSpan=g(P,"rowspan");if(rowSpan>1){P.rowSpan=rowSpan+1;continue}}else{if(K>0&&e[K-1][O]){S=e[K-1][O].elm;rowSpan=g(S,"rowspan");if(rowSpan>1){S.rowSpan=rowSpan+1;continue}}}L=d(P);L.colSpan=P.colSpan;R.appendChild(L);M=P}}if(R.hasChildNodes()){if(!N){E.insertAfter(R,Q)}else{Q.parentNode.insertBefore(R,Q)}}}function f(L){var M,K;c(e,function(N,O){c(N,function(Q,P){if(h(Q)){M=P;if(L){return false}}});if(L){return !M}});c(e,function(Q,R){var N=Q[M].elm,O,P;if(N!=K){P=g(N,"colspan");O=g(N,"rowspan");if(P==1){if(!L){E.insertAfter(d(N),N);s(M,R,O-1,P)}else{N.parentNode.insertBefore(d(N),N);s(M,R,O-1,P)}}else{N.colSpan++}K=N}})}function m(){var K=[];c(e,function(L,M){c(L,function(O,N){if(h(O)&&b.inArray(K,N)===-1){c(e,function(R){var P=R[N].elm,Q;Q=g(P,"colspan");if(Q>1){P.colSpan=Q-1}else{E.remove(P)}});K.push(N)}})});p()}function l(){var L;function K(O){var N,P,M;N=E.getNext(O,"tr");c(O.cells,function(Q){var R=g(Q,"rowspan");if(R>1){Q.rowSpan=R-1;P=D(Q);s(P.x,P.y,1,1)}});P=D(O.cells[0]);c(e[P.y],function(Q){var R;Q=Q.elm;if(Q!=M){R=g(Q,"rowspan");if(R<=1){E.remove(Q)}else{Q.rowSpan=R-1}M=Q}})}L=j();c(L.reverse(),function(M){K(M)});p()}function C(){var K=j();E.remove(K);p();return K}function H(){var K=j();c(K,function(M,L){K[L]=w(M,true)});return K}function z(M,L){var N=j(),K=N[L?0:N.length-1],O=K.cells.length;c(e,function(Q){var P;O=0;c(Q,function(S,R){if(S.real){O+=S.colspan}if(S.elm.parentNode==K){P=1}});if(P){return false}});if(!L){M.reverse()}c(M,function(R){var Q=R.cells.length,P;for(i=0;i<Q;i++){P=R.cells[i];P.colSpan=P.rowSpan=1}for(i=Q;i<O;i++){R.appendChild(d(R.cells[Q-1]))}for(i=O;i<Q;i++){E.remove(R.cells[i])}if(L){K.parentNode.insertBefore(R,K)}else{E.insertAfter(R,K)}})}function D(K){var L;c(e,function(M,N){c(M,function(P,O){if(P.elm==K){L={x:O,y:N};return false}});return !L});return L}function u(K){J=D(K)}function G(){var M,L,K;L=K=0;c(e,function(N,O){c(N,function(Q,P){var S,R;if(h(Q)){Q=e[O][P];if(P>L){L=P}if(O>K){K=O}if(Q.real){S=Q.colspan-1;R=Q.rowspan-1;if(S){if(P+S>L){L=P+S}}if(R){if(O+R>K){K=O+R}}}}})});return{x:L,y:K}}function t(Q){var N,M,S,R,L,K,O,P;B=D(Q);if(J&&B){N=Math.min(J.x,B.x);M=Math.min(J.y,B.y);S=Math.max(J.x,B.x);R=Math.max(J.y,B.y);L=S;K=R;for(y=M;y<=K;y++){Q=e[y][N];if(!Q.real){if(N-(Q.colspan-1)<N){N-=Q.colspan-1}}}for(x=N;x<=L;x++){Q=e[M][x];if(!Q.real){if(M-(Q.rowspan-1)<M){M-=Q.rowspan-1}}}for(y=M;y<=R;y++){for(x=N;x<=S;x++){Q=e[y][x];if(Q.real){O=Q.colspan-1;P=Q.rowspan-1;if(O){if(x+O>L){L=x+O}}if(P){if(y+P>K){K=y+P}}}}}E.removeClass(E.select("td.mceSelected,th.mceSelected"),"mceSelected");for(y=M;y<=K;y++){for(x=N;x<=L;x++){E.addClass(e[y][x].elm,"mceSelected")}}}}b.extend(this,{deleteTable:q,split:A,merge:o,insertRow:k,insertCol:f,deleteCols:m,deleteRows:l,cutRows:C,copyRows:H,pasteRows:z,getPos:D,setStartCell:u,setEndCell:t})}b.create("tinymce.plugins.TablePlugin",{init:function(e,f){var d,j;function h(m){var l=e.selection,k=e.dom.getParent(m||l.getNode(),"table");if(k){return new a(k,e.dom,l)}}function g(){e.getBody().style.webkitUserSelect="";e.dom.removeClass(e.dom.select("td.mceSelected,th.mceSelected"),"mceSelected")}c([["table","table.desc","mceInsertTable",true],["delete_table","table.del","mceTableDelete"],["delete_col","table.delete_col_desc","mceTableDeleteCol"],["delete_row","table.delete_row_desc","mceTableDeleteRow"],["col_after","table.col_after_desc","mceTableInsertColAfter"],["col_before","table.col_before_desc","mceTableInsertColBefore"],["row_after","table.row_after_desc","mceTableInsertRowAfter"],["row_before","table.row_before_desc","mceTableInsertRowBefore"],["row_props","table.row_desc","mceTableRowProps",true],["cell_props","table.cell_desc","mceTableCellProps",true],["split_cells","table.split_cells_desc","mceTableSplitCells",true],["merge_cells","table.merge_cells_desc","mceTableMergeCells",true]],function(k){e.addButton(k[0],{title:k[1],cmd:k[2],ui:k[3]})});if(!b.isIE){e.onClick.add(function(k,l){l=l.target;if(l.nodeName==="TABLE"){k.selection.select(l)}})}e.onNodeChange.add(function(l,k,o){var m;o=l.selection.getStart();m=l.dom.getParent(o,"td,th,caption");k.setActive("table",o.nodeName==="TABLE"||!!m);if(m&&m.nodeName==="CAPTION"){m=0}k.setDisabled("delete_table",!m);k.setDisabled("delete_col",!m);k.setDisabled("delete_table",!m);k.setDisabled("delete_row",!m);k.setDisabled("col_after",!m);k.setDisabled("col_before",!m);k.setDisabled("row_after",!m);k.setDisabled("row_before",!m);k.setDisabled("row_props",!m);k.setDisabled("cell_props",!m);k.setDisabled("split_cells",!m);k.setDisabled("merge_cells",!m)});e.onInit.add(function(l){var k,o,p=l.dom,m;d=l.windowManager;l.onMouseDown.add(function(q,r){if(r.button!=2){g();o=p.getParent(r.target,"td,th");k=p.getParent(o,"table")}});p.bind(l.getDoc(),"mouseover",function(t){var r,q,s=t.target;if(o&&(m||s!=o)&&(s.nodeName=="TD"||s.nodeName=="TH")){q=p.getParent(s,"table");if(q==k){if(!m){m=h(q);m.setStartCell(o);l.getBody().style.webkitUserSelect="none"}m.setEndCell(s)}r=l.selection.getSel();if(r.removeAllRanges){r.removeAllRanges()}else{r.empty()}t.preventDefault()}});l.onMouseUp.add(function(z,A){var r,t=z.selection,B,C=t.getSel(),q,u,s,w;if(o){if(m){z.getBody().style.webkitUserSelect=""}function v(D,F){var E=new b.dom.TreeWalker(D,D);do{if(D.nodeType==3&&b.trim(D.nodeValue).length!=0){if(F){r.setStart(D,0)}else{r.setEnd(D,D.nodeValue.length)}return}if(D.nodeName=="BR"){if(F){r.setStartBefore(D)}else{r.setEndBefore(D)}return}}while(D=(F?E.next():E.prev()))}B=p.select("td.mceSelected,th.mceSelected");if(B.length>0){r=p.createRng();u=B[0];w=B[B.length-1];v(u,1);q=new b.dom.TreeWalker(u,p.getParent(B[0],"table"));do{if(u.nodeName=="TD"||u.nodeName=="TH"){if(!p.hasClass(u,"mceSelected")){break}s=u}}while(u=q.next());v(s);t.setRng(r)}z.nodeChanged();o=m=k=null}});l.onKeyUp.add(function(q,r){g()});if(l&&l.plugins.contextmenu){l.plugins.contextmenu.onContextMenu.add(function(s,q,u){var v,t=l.selection,r=t.getNode()||l.getBody();if(l.dom.getParent(u,"td")||l.dom.getParent(u,"th")||l.dom.select("td.mceSelected,th.mceSelected").length){q.removeAll();if(r.nodeName=="A"&&!l.dom.getAttrib(r,"name")){q.add({title:"advanced.link_desc",icon:"link",cmd:l.plugins.advlink?"mceAdvLink":"mceLink",ui:true});q.add({title:"advanced.unlink_desc",icon:"unlink",cmd:"UnLink"});q.addSeparator()}if(r.nodeName=="IMG"&&r.className.indexOf("mceItem")==-1){q.add({title:"advanced.image_desc",icon:"image",cmd:l.plugins.advimage?"mceAdvImage":"mceImage",ui:true});q.addSeparator()}q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable",value:{action:"insert"}});q.add({title:"table.props_desc",icon:"table_props",cmd:"mceInsertTable"});q.add({title:"table.del",icon:"delete_table",cmd:"mceTableDelete"});q.addSeparator();v=q.addMenu({title:"table.cell"});v.add({title:"table.cell_desc",icon:"cell_props",cmd:"mceTableCellProps"});v.add({title:"table.split_cells_desc",icon:"split_cells",cmd:"mceTableSplitCells"});v.add({title:"table.merge_cells_desc",icon:"merge_cells",cmd:"mceTableMergeCells"});v=q.addMenu({title:"table.row"});v.add({title:"table.row_desc",icon:"row_props",cmd:"mceTableRowProps"});v.add({title:"table.row_before_desc",icon:"row_before",cmd:"mceTableInsertRowBefore"});v.add({title:"table.row_after_desc",icon:"row_after",cmd:"mceTableInsertRowAfter"});v.add({title:"table.delete_row_desc",icon:"delete_row",cmd:"mceTableDeleteRow"});v.addSeparator();v.add({title:"table.cut_row_desc",icon:"cut",cmd:"mceTableCutRow"});v.add({title:"table.copy_row_desc",icon:"copy",cmd:"mceTableCopyRow"});v.add({title:"table.paste_row_before_desc",icon:"paste",cmd:"mceTablePasteRowBefore"}).setDisabled(!j);v.add({title:"table.paste_row_after_desc",icon:"paste",cmd:"mceTablePasteRowAfter"}).setDisabled(!j);v=q.addMenu({title:"table.col"});v.add({title:"table.col_before_desc",icon:"col_before",cmd:"mceTableInsertColBefore"});v.add({title:"table.col_after_desc",icon:"col_after",cmd:"mceTableInsertColAfter"});v.add({title:"table.delete_col_desc",icon:"delete_col",cmd:"mceTableDeleteCol"})}else{q.add({title:"table.desc",icon:"table",cmd:"mceInsertTable"})}})}if(!b.isIE){function n(){var q;for(q=l.getBody().lastChild;q&&q.nodeType==3&&!q.nodeValue.length;q=q.previousSibling){}if(q&&q.nodeName=="TABLE"){l.dom.add(l.getBody(),"p",null,'<br mce_bogus="1" />')}}if(b.isGecko){l.onKeyDown.add(function(r,t){var q,s,u=r.dom;if(t.keyCode==37||t.keyCode==38){q=r.selection.getRng();s=u.getParent(q.startContainer,"table");if(s&&r.getBody().firstChild==s){if(isAtStart(q,s)){q=u.createRng();q.setStartBefore(s);q.setEndBefore(s);r.selection.setRng(q);t.preventDefault()}}}})}l.onKeyUp.add(n);l.onSetContent.add(n);l.onVisualAid.add(n);l.onPreProcess.add(function(q,s){var r=s.node.lastChild;if(r&&r.childNodes.length==1&&r.firstChild.nodeName=="BR"){q.dom.remove(r)}});n()}});c({mceTableSplitCells:function(k){k.split()},mceTableMergeCells:function(l){var m,n,k;k=e.dom.getParent(e.selection.getNode(),"th,td");if(k){m=k.rowSpan;n=k.colSpan}if(!e.dom.select("td.mceSelected,th.mceSelected").length){d.open({url:f+"/merge_cells.htm",width:240+parseInt(e.getLang("table.merge_cells_delta_width",0)),height:110+parseInt(e.getLang("table.merge_cells_delta_height",0)),inline:1},{rows:m,cols:n,onaction:function(o){l.merge(k,o.cols,o.rows)},plugin_url:f})}else{l.merge()}},mceTableInsertRowBefore:function(k){k.insertRow(true)},mceTableInsertRowAfter:function(k){k.insertRow()},mceTableInsertColBefore:function(k){k.insertCol(true)},mceTableInsertColAfter:function(k){k.insertCol()},mceTableDeleteCol:function(k){k.deleteCols()},mceTableDeleteRow:function(k){k.deleteRows()},mceTableCutRow:function(k){j=k.cutRows()},mceTableCopyRow:function(k){j=k.copyRows()},mceTablePasteRowBefore:function(k){k.pasteRows(j,true)},mceTablePasteRowAfter:function(k){k.pasteRows(j)},mceTableDelete:function(k){k.deleteTable()}},function(l,k){e.addCommand(k,function(){var m=h();if(m){l(m);e.execCommand("mceRepaint");g()}})});c({mceInsertTable:function(k){d.open({url:f+"/table.htm",width:400+parseInt(e.getLang("table.table_delta_width",0)),height:320+parseInt(e.getLang("table.table_delta_height",0)),inline:1},{plugin_url:f,action:k?k.action:0})},mceTableRowProps:function(){d.open({url:f+"/row.htm",width:400+parseInt(e.getLang("table.rowprops_delta_width",0)),height:295+parseInt(e.getLang("table.rowprops_delta_height",0)),inline:1},{plugin_url:f})},mceTableCellProps:function(){d.open({url:f+"/cell.htm",width:400+parseInt(e.getLang("table.cellprops_delta_width",0)),height:295+parseInt(e.getLang("table.cellprops_delta_height",0)),inline:1},{plugin_url:f})}},function(l,k){e.addCommand(k,function(m,n){l(n)})})}});b.PluginManager.add("table",b.plugins.TablePlugin)})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/table/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..c2f307f
--- /dev/null
@@ -0,0 +1,1125 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function(tinymce) {\r
+       var each = tinymce.each;\r
+\r
+       /**\r
+        * Table Grid class.\r
+        */\r
+       function TableGrid(table, dom, selection) {\r
+               var grid, startPos, endPos, selectedCell;\r
+\r
+               buildGrid();\r
+               selectedCell = dom.getParent(selection.getStart(), 'th,td');\r
+               if (selectedCell) {\r
+                       startPos = getPos(selectedCell);\r
+                       endPos = findEndPos();\r
+                       selectedCell = getCell(startPos.x, startPos.y);\r
+               }\r
+\r
+               function cloneNode(node, children) {\r
+                       node = node.cloneNode(children);\r
+                       node.removeAttribute('id');\r
+\r
+                       return node;\r
+               }\r
+\r
+               function buildGrid() {\r
+                       var startY = 0;\r
+\r
+                       grid = [];\r
+\r
+                       each(['thead', 'tbody', 'tfoot'], function(part) {\r
+                               var rows = dom.select(part + ' tr', table);\r
+\r
+                               each(rows, function(tr, y) {\r
+                                       y += startY;\r
+\r
+                                       each(dom.select('td,th', tr), function(td, x) {\r
+                                               var x2, y2, rowspan, colspan;\r
+\r
+                                               // Skip over existing cells produced by rowspan\r
+                                               if (grid[y]) {\r
+                                                       while (grid[y][x])\r
+                                                               x++;\r
+                                               }\r
+\r
+                                               // Get col/rowspan from cell\r
+                                               rowspan = getSpanVal(td, 'rowspan');\r
+                                               colspan = getSpanVal(td, 'colspan');\r
+\r
+                                               // Fill out rowspan/colspan right and down\r
+                                               for (y2 = y; y2 < y + rowspan; y2++) {\r
+                                                       if (!grid[y2])\r
+                                                               grid[y2] = [];\r
+\r
+                                                       for (x2 = x; x2 < x + colspan; x2++) {\r
+                                                               grid[y2][x2] = {\r
+                                                                       part : part,\r
+                                                                       real : y2 == y && x2 == x,\r
+                                                                       elm : td,\r
+                                                                       rowspan : rowspan,\r
+                                                                       colspan : colspan\r
+                                                               };\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                               });\r
+\r
+                               startY += rows.length;\r
+                       });\r
+               };\r
+\r
+               function getCell(x, y) {\r
+                       var row;\r
+\r
+                       row = grid[y];\r
+                       if (row)\r
+                               return row[x];\r
+               };\r
+\r
+               function getSpanVal(td, name) {\r
+                       return parseInt(td.getAttribute(name) || 1);\r
+               };\r
+\r
+               function isCellSelected(cell) {\r
+                       return dom.hasClass(cell.elm, 'mceSelected') || cell == selectedCell;\r
+               };\r
+\r
+               function getSelectedRows() {\r
+                       var rows = [];\r
+\r
+                       each(table.rows, function(row) {\r
+                               each(row.cells, function(cell) {\r
+                                       if (dom.hasClass(cell, 'mceSelected') || cell == selectedCell.elm) {\r
+                                               rows.push(row);\r
+                                               return false;\r
+                                       }\r
+                               });\r
+                       });\r
+\r
+                       return rows;\r
+               };\r
+\r
+               function deleteTable() {\r
+                       var rng = dom.createRng();\r
+\r
+                       rng.setStartAfter(table);\r
+                       rng.setEndAfter(table);\r
+\r
+                       selection.setRng(rng);\r
+\r
+                       dom.remove(table);\r
+               };\r
+\r
+               function cloneCell(cell) {\r
+                       var formatNode;\r
+\r
+                       // Clone formats\r
+                       tinymce.walk(cell, function(node) {\r
+                               var curNode;\r
+\r
+                               if (node.nodeType == 3) {\r
+                                       each(dom.getParents(node.parentNode, null, cell).reverse(), function(node) {\r
+                                               node = cloneNode(node, false);\r
+\r
+                                               if (!formatNode)\r
+                                                       formatNode = curNode = node;\r
+                                               else if (curNode)\r
+                                                       curNode.appendChild(node);\r
+\r
+                                               curNode = node;\r
+                                       });\r
+\r
+                                       // Add something to the inner node\r
+                                       if (curNode)\r
+                                               curNode.innerHTML = tinymce.isIE ? '&nbsp;' : '<br _mce_bogus="1" />';\r
+\r
+                                       return false;\r
+                               }\r
+                       }, 'childNodes');\r
+\r
+                       cell = cloneNode(cell, false);\r
+                       cell.rowSpan = cell.colSpan = 1;\r
+\r
+                       if (formatNode) {\r
+                               cell.appendChild(formatNode);\r
+                       } else {\r
+                               if (!tinymce.isIE)\r
+                                       cell.innerHTML = '<br _mce_bogus="1" />';\r
+                       }\r
+\r
+                       return cell;\r
+               };\r
+\r
+               function cleanup() {\r
+                       var rng = dom.createRng();\r
+\r
+                       // Empty rows\r
+                       each(dom.select('tr', table), function(tr) {\r
+                               if (tr.cells.length == 0)\r
+                                       dom.remove(tr);\r
+                       });\r
+\r
+                       // Empty table\r
+                       if (dom.select('tr', table).length == 0) {\r
+                               rng.setStartAfter(table);\r
+                               rng.setEndAfter(table);\r
+                               selection.setRng(rng);\r
+                               dom.remove(table);\r
+                               return;\r
+                       }\r
+\r
+                       // Empty header/body/footer\r
+                       each(dom.select('thead,tbody,tfoot', table), function(part) {\r
+                               if (part.rows.length == 0)\r
+                                       dom.remove(part);\r
+                       });\r
+\r
+                       // Restore selection to start position if it still exists\r
+                       buildGrid();\r
+\r
+                       // Restore the selection to the closest table position\r
+                       row = grid[Math.min(grid.length - 1, startPos.y)];\r
+                       if (row) {\r
+                               selection.select(row[Math.min(row.length - 1, startPos.x)].elm, true);\r
+                               selection.collapse(true);\r
+                       }\r
+               };\r
+\r
+               function fillLeftDown(x, y, rows, cols) {\r
+                       var tr, x2, r, c, cell;\r
+\r
+                       tr = grid[y][x].elm.parentNode;\r
+                       for (r = 1; r <= rows; r++) {\r
+                               tr = dom.getNext(tr, 'tr');\r
+\r
+                               if (tr) {\r
+                                       // Loop left to find real cell\r
+                                       for (x2 = x; x2 >= 0; x2--) {\r
+                                               cell = grid[y + r][x2].elm;\r
+\r
+                                               if (cell.parentNode == tr) {\r
+                                                       // Append clones after\r
+                                                       for (c = 1; c <= cols; c++)\r
+                                                               dom.insertAfter(cloneCell(cell), cell);\r
+\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+\r
+                                       if (x2 == -1) {\r
+                                               // Insert nodes before first cell\r
+                                               for (c = 1; c <= cols; c++)\r
+                                                       tr.insertBefore(cloneCell(tr.cells[0]), tr.cells[0]);\r
+                                       }\r
+                               }\r
+                       }\r
+               };\r
+\r
+               function split() {\r
+                       each(grid, function(row, y) {\r
+                               each(row, function(cell, x) {\r
+                                       var colSpan, rowSpan, newCell, i;\r
+\r
+                                       if (isCellSelected(cell)) {\r
+                                               cell = cell.elm;\r
+                                               colSpan = getSpanVal(cell, 'colspan');\r
+                                               rowSpan = getSpanVal(cell, 'rowspan');\r
+\r
+                                               if (colSpan > 1 || rowSpan > 1) {\r
+                                                       cell.colSpan = cell.rowSpan = 1;\r
+\r
+                                                       // Insert cells right\r
+                                                       for (i = 0; i < colSpan - 1; i++)\r
+                                                               dom.insertAfter(cloneCell(cell), cell);\r
+\r
+                                                       fillLeftDown(x, y, rowSpan - 1, colSpan);\r
+                                               }\r
+                                       }\r
+                               });\r
+                       });\r
+               };\r
+\r
+               function merge(cell, cols, rows) {\r
+                       var startX, startY, endX, endY, x, y, startCell, endCell, cell, children;\r
+\r
+                       // Use specified cell and cols/rows\r
+                       if (cell) {\r
+                               pos = getPos(cell);\r
+                               startX = pos.x;\r
+                               startY = pos.y;\r
+                               endX = startX + (cols - 1);\r
+                               endY = startY + (rows - 1);\r
+                       } else {\r
+                               // Use selection\r
+                               startX = startPos.x;\r
+                               startY = startPos.y;\r
+                               endX = endPos.x;\r
+                               endY = endPos.y;\r
+                       }\r
+\r
+                       // Find start/end cells\r
+                       startCell = getCell(startX, startY);\r
+                       endCell = getCell(endX, endY);\r
+\r
+                       // Check if the cells exists and if they are of the same part for example tbody = tbody\r
+                       if (startCell && endCell && startCell.part == endCell.part) {\r
+                               // Split and rebuild grid\r
+                               split();\r
+                               buildGrid();\r
+\r
+                               // Set row/col span to start cell\r
+                               startCell = getCell(startX, startY).elm;\r
+                               startCell.colSpan = (endX - startX) + 1;\r
+                               startCell.rowSpan = (endY - startY) + 1;\r
+\r
+                               // Remove other cells and add it's contents to the start cell\r
+                               for (y = startY; y <= endY; y++) {\r
+                                       for (x = startX; x <= endX; x++) {\r
+                                               cell = grid[y][x].elm;\r
+\r
+                                               if (cell != startCell) {\r
+                                                       // Move children to startCell\r
+                                                       children = tinymce.grep(cell.childNodes);\r
+                                                       each(children, function(node, i) {\r
+                                                               // Jump over last BR element\r
+                                                               if (node.nodeName != 'BR' || i != children.length - 1)\r
+                                                                       startCell.appendChild(node);\r
+                                                       });\r
+\r
+                                                       // Remove cell\r
+                                                       dom.remove(cell);\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               // Remove empty rows etc and restore caret location\r
+                               cleanup();\r
+                       }\r
+               };\r
+\r
+               function insertRow(before) {\r
+                       var posY, cell, lastCell, x, rowElm, newRow, newCell, otherCell;\r
+\r
+                       // Find first/last row\r
+                       each(grid, function(row, y) {\r
+                               each(row, function(cell, x) {\r
+                                       if (isCellSelected(cell)) {\r
+                                               cell = cell.elm;\r
+                                               rowElm = cell.parentNode;\r
+                                               newRow = cloneNode(rowElm, false);\r
+                                               posY = y;\r
+\r
+                                               if (before)\r
+                                                       return false;\r
+                                       }\r
+                               });\r
+\r
+                               if (before)\r
+                                       return !posY;\r
+                       });\r
+\r
+                       for (x = 0; x < grid[0].length; x++) {\r
+                               cell = grid[posY][x].elm;\r
+\r
+                               if (cell != lastCell) {\r
+                                       if (!before) {\r
+                                               rowSpan = getSpanVal(cell, 'rowspan');\r
+                                               if (rowSpan > 1) {\r
+                                                       cell.rowSpan = rowSpan + 1;\r
+                                                       continue;\r
+                                               }\r
+                                       } else {\r
+                                               // Check if cell above can be expanded\r
+                                               if (posY > 0 && grid[posY - 1][x]) {\r
+                                                       otherCell = grid[posY - 1][x].elm;\r
+                                                       rowSpan = getSpanVal(otherCell, 'rowspan');\r
+                                                       if (rowSpan > 1) {\r
+                                                               otherCell.rowSpan = rowSpan + 1;\r
+                                                               continue;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       // Insert new cell into new row\r
+                                       newCell = cloneCell(cell)\r
+                                       newCell.colSpan = cell.colSpan;\r
+                                       newRow.appendChild(newCell);\r
+\r
+                                       lastCell = cell;\r
+                               }\r
+                       }\r
+\r
+                       if (newRow.hasChildNodes()) {\r
+                               if (!before)\r
+                                       dom.insertAfter(newRow, rowElm);\r
+                               else\r
+                                       rowElm.parentNode.insertBefore(newRow, rowElm);\r
+                       }\r
+               };\r
+\r
+               function insertCol(before) {\r
+                       var posX, lastCell;\r
+\r
+                       // Find first/last column\r
+                       each(grid, function(row, y) {\r
+                               each(row, function(cell, x) {\r
+                                       if (isCellSelected(cell)) {\r
+                                               posX = x;\r
+\r
+                                               if (before)\r
+                                                       return false;\r
+                                       }\r
+                               });\r
+\r
+                               if (before)\r
+                                       return !posX;\r
+                       });\r
+\r
+                       each(grid, function(row, y) {\r
+                               var cell = row[posX].elm, rowSpan, colSpan;\r
+\r
+                               if (cell != lastCell) {\r
+                                       colSpan = getSpanVal(cell, 'colspan');\r
+                                       rowSpan = getSpanVal(cell, 'rowspan');\r
+\r
+                                       if (colSpan == 1) {\r
+                                               if (!before) {\r
+                                                       dom.insertAfter(cloneCell(cell), cell);\r
+                                                       fillLeftDown(posX, y, rowSpan - 1, colSpan);\r
+                                               } else {\r
+                                                       cell.parentNode.insertBefore(cloneCell(cell), cell);\r
+                                                       fillLeftDown(posX, y, rowSpan - 1, colSpan);\r
+                                               }\r
+                                       } else\r
+                                               cell.colSpan++;\r
+\r
+                                       lastCell = cell;\r
+                               }\r
+                       });\r
+               };\r
+\r
+               function deleteCols() {\r
+                       var cols = [];\r
+\r
+                       // Get selected column indexes\r
+                       each(grid, function(row, y) {\r
+                               each(row, function(cell, x) {\r
+                                       if (isCellSelected(cell) && tinymce.inArray(cols, x) === -1) {\r
+                                               each(grid, function(row) {\r
+                                                       var cell = row[x].elm, colSpan;\r
+\r
+                                                       colSpan = getSpanVal(cell, 'colspan');\r
+\r
+                                                       if (colSpan > 1)\r
+                                                               cell.colSpan = colSpan - 1;\r
+                                                       else\r
+                                                               dom.remove(cell);\r
+                                               });\r
+\r
+                                               cols.push(x);\r
+                                       }\r
+                               });\r
+                       });\r
+\r
+                       cleanup();\r
+               };\r
+\r
+               function deleteRows() {\r
+                       var rows;\r
+\r
+                       function deleteRow(tr) {\r
+                               var nextTr, pos, lastCell;\r
+\r
+                               nextTr = dom.getNext(tr, 'tr');\r
+\r
+                               // Move down row spanned cells\r
+                               each(tr.cells, function(cell) {\r
+                                       var rowSpan = getSpanVal(cell, 'rowspan');\r
+\r
+                                       if (rowSpan > 1) {\r
+                                               cell.rowSpan = rowSpan - 1;\r
+                                               pos = getPos(cell);\r
+                                               fillLeftDown(pos.x, pos.y, 1, 1);\r
+                                       }\r
+                               });\r
+\r
+                               // Delete cells\r
+                               pos = getPos(tr.cells[0]);\r
+                               each(grid[pos.y], function(cell) {\r
+                                       var rowSpan;\r
+\r
+                                       cell = cell.elm;\r
+\r
+                                       if (cell != lastCell) {\r
+                                               rowSpan = getSpanVal(cell, 'rowspan');\r
+\r
+                                               if (rowSpan <= 1)\r
+                                                       dom.remove(cell);\r
+                                               else\r
+                                                       cell.rowSpan = rowSpan - 1;\r
+\r
+                                               lastCell = cell;\r
+                                       }\r
+                               });\r
+                       };\r
+\r
+                       // Get selected rows and move selection out of scope\r
+                       rows = getSelectedRows();\r
+\r
+                       // Delete all selected rows\r
+                       each(rows.reverse(), function(tr) {\r
+                               deleteRow(tr);\r
+                       });\r
+\r
+                       cleanup();\r
+               };\r
+\r
+               function cutRows() {\r
+                       var rows = getSelectedRows();\r
+\r
+                       dom.remove(rows);\r
+                       cleanup();\r
+\r
+                       return rows;\r
+               };\r
+\r
+               function copyRows() {\r
+                       var rows = getSelectedRows();\r
+\r
+                       each(rows, function(row, i) {\r
+                               rows[i] = cloneNode(row, true);\r
+                       });\r
+\r
+                       return rows;\r
+               };\r
+\r
+               function pasteRows(rows, before) {\r
+                       var selectedRows = getSelectedRows(),\r
+                               targetRow = selectedRows[before ? 0 : selectedRows.length - 1],\r
+                               targetCellCount = targetRow.cells.length;\r
+\r
+                       // Calc target cell count\r
+                       each(grid, function(row) {\r
+                               var match;\r
+\r
+                               targetCellCount = 0;\r
+                               each(row, function(cell, x) {\r
+                                       if (cell.real)\r
+                                               targetCellCount += cell.colspan;\r
+\r
+                                       if (cell.elm.parentNode == targetRow)\r
+                                               match = 1;\r
+                               });\r
+\r
+                               if (match)\r
+                                       return false;\r
+                       });\r
+\r
+                       if (!before)\r
+                               rows.reverse();\r
+\r
+                       each(rows, function(row) {\r
+                               var cellCount = row.cells.length, cell;\r
+\r
+                               // Remove col/rowspans\r
+                               for (i = 0; i < cellCount; i++) {\r
+                                       cell = row.cells[i];\r
+                                       cell.colSpan = cell.rowSpan = 1;\r
+                               }\r
+\r
+                               // Needs more cells\r
+                               for (i = cellCount; i < targetCellCount; i++)\r
+                                       row.appendChild(cloneCell(row.cells[cellCount - 1]));\r
+\r
+                               // Needs less cells\r
+                               for (i = targetCellCount; i < cellCount; i++)\r
+                                       dom.remove(row.cells[i]);\r
+\r
+                               // Add before/after\r
+                               if (before)\r
+                                       targetRow.parentNode.insertBefore(row, targetRow);\r
+                               else\r
+                                       dom.insertAfter(row, targetRow);\r
+                       });\r
+               };\r
+\r
+               function getPos(target) {\r
+                       var pos;\r
+\r
+                       each(grid, function(row, y) {\r
+                               each(row, function(cell, x) {\r
+                                       if (cell.elm == target) {\r
+                                               pos = {x : x, y : y};\r
+                                               return false;\r
+                                       }\r
+                               });\r
+\r
+                               return !pos;\r
+                       });\r
+\r
+                       return pos;\r
+               };\r
+\r
+               function setStartCell(cell) {\r
+                       startPos = getPos(cell);\r
+               };\r
+\r
+               function findEndPos() {\r
+                       var pos, maxX, maxY;\r
+\r
+                       maxX = maxY = 0;\r
+\r
+                       each(grid, function(row, y) {\r
+                               each(row, function(cell, x) {\r
+                                       var colSpan, rowSpan;\r
+\r
+                                       if (isCellSelected(cell)) {\r
+                                               cell = grid[y][x];\r
+\r
+                                               if (x > maxX)\r
+                                                       maxX = x;\r
+\r
+                                               if (y > maxY)\r
+                                                       maxY = y;\r
+\r
+                                               if (cell.real) {\r
+                                                       colSpan = cell.colspan - 1;\r
+                                                       rowSpan = cell.rowspan - 1;\r
+\r
+                                                       if (colSpan) {\r
+                                                               if (x + colSpan > maxX)\r
+                                                                       maxX = x + colSpan;\r
+                                                       }\r
+\r
+                                                       if (rowSpan) {\r
+                                                               if (y + rowSpan > maxY)\r
+                                                                       maxY = y + rowSpan;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               });\r
+                       });\r
+\r
+                       return {x : maxX, y : maxY};\r
+               };\r
+\r
+               function setEndCell(cell) {\r
+                       var startX, startY, endX, endY, maxX, maxY, colSpan, rowSpan;\r
+\r
+                       endPos = getPos(cell);\r
+\r
+                       if (startPos && endPos) {\r
+                               // Get start/end positions\r
+                               startX = Math.min(startPos.x, endPos.x);\r
+                               startY = Math.min(startPos.y, endPos.y);\r
+                               endX = Math.max(startPos.x, endPos.x);\r
+                               endY = Math.max(startPos.y, endPos.y);\r
+\r
+                               // Expand end positon to include spans\r
+                               maxX = endX;\r
+                               maxY = endY;\r
+\r
+                               // Expand startX\r
+                               for (y = startY; y <= maxY; y++) {\r
+                                       cell = grid[y][startX];\r
+\r
+                                       if (!cell.real) {\r
+                                               if (startX - (cell.colspan - 1) < startX)\r
+                                                       startX -= cell.colspan - 1;\r
+                                       }\r
+                               }\r
+\r
+                               // Expand startY\r
+                               for (x = startX; x <= maxX; x++) {\r
+                                       cell = grid[startY][x];\r
+\r
+                                       if (!cell.real) {\r
+                                               if (startY - (cell.rowspan - 1) < startY)\r
+                                                       startY -= cell.rowspan - 1;\r
+                                       }\r
+                               }\r
+\r
+                               // Find max X, Y\r
+                               for (y = startY; y <= endY; y++) {\r
+                                       for (x = startX; x <= endX; x++) {\r
+                                               cell = grid[y][x];\r
+\r
+                                               if (cell.real) {\r
+                                                       colSpan = cell.colspan - 1;\r
+                                                       rowSpan = cell.rowspan - 1;\r
+\r
+                                                       if (colSpan) {\r
+                                                               if (x + colSpan > maxX)\r
+                                                                       maxX = x + colSpan;\r
+                                                       }\r
+\r
+                                                       if (rowSpan) {\r
+                                                               if (y + rowSpan > maxY)\r
+                                                                       maxY = y + rowSpan;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               // Remove current selection\r
+                               dom.removeClass(dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');\r
+\r
+                               // Add new selection\r
+                               for (y = startY; y <= maxY; y++) {\r
+                                       for (x = startX; x <= maxX; x++)\r
+                                               dom.addClass(grid[y][x].elm, 'mceSelected');\r
+                               }\r
+                       }\r
+               };\r
+\r
+               // Expose to public\r
+               tinymce.extend(this, {\r
+                       deleteTable : deleteTable,\r
+                       split : split,\r
+                       merge : merge,\r
+                       insertRow : insertRow,\r
+                       insertCol : insertCol,\r
+                       deleteCols : deleteCols,\r
+                       deleteRows : deleteRows,\r
+                       cutRows : cutRows,\r
+                       copyRows : copyRows,\r
+                       pasteRows : pasteRows,\r
+                       getPos : getPos,\r
+                       setStartCell : setStartCell,\r
+                       setEndCell : setEndCell\r
+               });\r
+       };\r
+\r
+       tinymce.create('tinymce.plugins.TablePlugin', {\r
+               init : function(ed, url) {\r
+                       var winMan, clipboardRows;\r
+\r
+                       function createTableGrid(node) {\r
+                               var selection = ed.selection, tblElm = ed.dom.getParent(node || selection.getNode(), 'table');\r
+\r
+                               if (tblElm)\r
+                                       return new TableGrid(tblElm, ed.dom, selection);\r
+                       };\r
+\r
+                       function cleanup() {\r
+                               // Restore selection possibilities\r
+                               ed.getBody().style.webkitUserSelect = '';\r
+                               ed.dom.removeClass(ed.dom.select('td.mceSelected,th.mceSelected'), 'mceSelected');\r
+                       };\r
+\r
+                       // Register buttons\r
+                       each([\r
+                               ['table', 'table.desc', 'mceInsertTable', true],\r
+                               ['delete_table', 'table.del', 'mceTableDelete'],\r
+                               ['delete_col', 'table.delete_col_desc', 'mceTableDeleteCol'],\r
+                               ['delete_row', 'table.delete_row_desc', 'mceTableDeleteRow'],\r
+                               ['col_after', 'table.col_after_desc', 'mceTableInsertColAfter'],\r
+                               ['col_before', 'table.col_before_desc', 'mceTableInsertColBefore'],\r
+                               ['row_after', 'table.row_after_desc', 'mceTableInsertRowAfter'],\r
+                               ['row_before', 'table.row_before_desc', 'mceTableInsertRowBefore'],\r
+                               ['row_props', 'table.row_desc', 'mceTableRowProps', true],\r
+                               ['cell_props', 'table.cell_desc', 'mceTableCellProps', true],\r
+                               ['split_cells', 'table.split_cells_desc', 'mceTableSplitCells', true],\r
+                               ['merge_cells', 'table.merge_cells_desc', 'mceTableMergeCells', true]\r
+                       ], function(c) {\r
+                               ed.addButton(c[0], {title : c[1], cmd : c[2], ui : c[3]});\r
+                       });\r
+\r
+                       // Select whole table is a table border is clicked\r
+                       if (!tinymce.isIE) {\r
+                               ed.onClick.add(function(ed, e) {\r
+                                       e = e.target;\r
+\r
+                                       if (e.nodeName === 'TABLE')\r
+                                               ed.selection.select(e);\r
+                               });\r
+                       }\r
+\r
+                       // Handle node change updates\r
+                       ed.onNodeChange.add(function(ed, cm, n) {\r
+                               var p;\r
+\r
+                               n = ed.selection.getStart();\r
+                               p = ed.dom.getParent(n, 'td,th,caption');\r
+                               cm.setActive('table', n.nodeName === 'TABLE' || !!p);\r
+\r
+                               // Disable table tools if we are in caption\r
+                               if (p && p.nodeName === 'CAPTION')\r
+                                       p = 0;\r
+\r
+                               cm.setDisabled('delete_table', !p);\r
+                               cm.setDisabled('delete_col', !p);\r
+                               cm.setDisabled('delete_table', !p);\r
+                               cm.setDisabled('delete_row', !p);\r
+                               cm.setDisabled('col_after', !p);\r
+                               cm.setDisabled('col_before', !p);\r
+                               cm.setDisabled('row_after', !p);\r
+                               cm.setDisabled('row_before', !p);\r
+                               cm.setDisabled('row_props', !p);\r
+                               cm.setDisabled('cell_props', !p);\r
+                               cm.setDisabled('split_cells', !p);\r
+                               cm.setDisabled('merge_cells', !p);\r
+                       });\r
+\r
+                       ed.onInit.add(function(ed) {\r
+                               var startTable, startCell, dom = ed.dom, tableGrid;\r
+\r
+                               winMan = ed.windowManager;\r
+\r
+                               // Add cell selection logic\r
+                               ed.onMouseDown.add(function(ed, e) {\r
+                                       if (e.button != 2) {\r
+                                               cleanup();\r
+\r
+                                               startCell = dom.getParent(e.target, 'td,th');\r
+                                               startTable = dom.getParent(startCell, 'table');\r
+                                       }\r
+                               });\r
+\r
+                               dom.bind(ed.getDoc(), 'mouseover', function(e) {\r
+                                       var sel, table, target = e.target;\r
+\r
+                                       if (startCell && (tableGrid || target != startCell) && (target.nodeName == 'TD' || target.nodeName == 'TH')) {\r
+                                               table = dom.getParent(target, 'table');\r
+                                               if (table == startTable) {\r
+                                                       if (!tableGrid) {\r
+                                                               tableGrid = createTableGrid(table);\r
+                                                               tableGrid.setStartCell(startCell);\r
+\r
+                                                               ed.getBody().style.webkitUserSelect = 'none';\r
+                                                       }\r
+\r
+                                                       tableGrid.setEndCell(target);\r
+                                               }\r
+\r
+                                               // Remove current selection\r
+                                               sel = ed.selection.getSel();\r
+\r
+                                               if (sel.removeAllRanges)\r
+                                                       sel.removeAllRanges();\r
+                                               else\r
+                                                       sel.empty();\r
+\r
+                                               e.preventDefault();\r
+                                       }\r
+                               });\r
+\r
+                               ed.onMouseUp.add(function(ed, e) {\r
+                                       var rng, sel = ed.selection, selectedCells, nativeSel = sel.getSel(), walker, node, lastNode, endNode;\r
+\r
+                                       // Move selection to startCell\r
+                                       if (startCell) {\r
+                                               if (tableGrid)\r
+                                                       ed.getBody().style.webkitUserSelect = '';\r
+\r
+                                               function setPoint(node, start) {\r
+                                                       var walker = new tinymce.dom.TreeWalker(node, node);\r
+\r
+                                                       do {\r
+                                                               // Text node\r
+                                                               if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {\r
+                                                                       if (start)\r
+                                                                               rng.setStart(node, 0);\r
+                                                                       else\r
+                                                                               rng.setEnd(node, node.nodeValue.length);\r
+\r
+                                                                       return;\r
+                                                               }\r
+\r
+                                                               // BR element\r
+                                                               if (node.nodeName == 'BR') {\r
+                                                                       if (start)\r
+                                                                               rng.setStartBefore(node);\r
+                                                                       else\r
+                                                                               rng.setEndBefore(node);\r
+\r
+                                                                       return;\r
+                                                               }\r
+                                                       } while (node = (start ? walker.next() : walker.prev()));\r
+                                               };\r
+\r
+                                               // Try to expand text selection as much as we can only Gecko supports cell selection\r
+                                               selectedCells = dom.select('td.mceSelected,th.mceSelected');\r
+                                               if (selectedCells.length > 0) {\r
+                                                       rng = dom.createRng();\r
+                                                       node = selectedCells[0];\r
+                                                       endNode = selectedCells[selectedCells.length - 1];\r
+\r
+                                                       setPoint(node, 1);\r
+                                                       walker = new tinymce.dom.TreeWalker(node, dom.getParent(selectedCells[0], 'table'));\r
+\r
+                                                       do {\r
+                                                               if (node.nodeName == 'TD' || node.nodeName == 'TH') {\r
+                                                                       if (!dom.hasClass(node, 'mceSelected'))\r
+                                                                               break;\r
+\r
+                                                                       lastNode = node;\r
+                                                               }\r
+                                                       } while (node = walker.next());\r
+\r
+                                                       setPoint(lastNode);\r
+\r
+                                                       sel.setRng(rng);\r
+                                               }\r
+\r
+                                               ed.nodeChanged();\r
+                                               startCell = tableGrid = startTable = null;\r
+                                       }\r
+                               });\r
+\r
+                               ed.onKeyUp.add(function(ed, e) {\r
+                                       cleanup();\r
+                               });\r
+\r
+                               // Add context menu\r
+                               if (ed && ed.plugins.contextmenu) {\r
+                                       ed.plugins.contextmenu.onContextMenu.add(function(th, m, e) {\r
+                                               var sm, se = ed.selection, el = se.getNode() || ed.getBody();\r
+\r
+                                               if (ed.dom.getParent(e, 'td') || ed.dom.getParent(e, 'th') || ed.dom.select('td.mceSelected,th.mceSelected').length) {\r
+                                                       m.removeAll();\r
+\r
+                                                       if (el.nodeName == 'A' && !ed.dom.getAttrib(el, 'name')) {\r
+                                                               m.add({title : 'advanced.link_desc', icon : 'link', cmd : ed.plugins.advlink ? 'mceAdvLink' : 'mceLink', ui : true});\r
+                                                               m.add({title : 'advanced.unlink_desc', icon : 'unlink', cmd : 'UnLink'});\r
+                                                               m.addSeparator();\r
+                                                       }\r
+\r
+                                                       if (el.nodeName == 'IMG' && el.className.indexOf('mceItem') == -1) {\r
+                                                               m.add({title : 'advanced.image_desc', icon : 'image', cmd : ed.plugins.advimage ? 'mceAdvImage' : 'mceImage', ui : true});\r
+                                                               m.addSeparator();\r
+                                                       }\r
+\r
+                                                       m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable', value : {action : 'insert'}});\r
+                                                       m.add({title : 'table.props_desc', icon : 'table_props', cmd : 'mceInsertTable'});\r
+                                                       m.add({title : 'table.del', icon : 'delete_table', cmd : 'mceTableDelete'});\r
+                                                       m.addSeparator();\r
+\r
+                                                       // Cell menu\r
+                                                       sm = m.addMenu({title : 'table.cell'});\r
+                                                       sm.add({title : 'table.cell_desc', icon : 'cell_props', cmd : 'mceTableCellProps'});\r
+                                                       sm.add({title : 'table.split_cells_desc', icon : 'split_cells', cmd : 'mceTableSplitCells'});\r
+                                                       sm.add({title : 'table.merge_cells_desc', icon : 'merge_cells', cmd : 'mceTableMergeCells'});\r
+\r
+                                                       // Row menu\r
+                                                       sm = m.addMenu({title : 'table.row'});\r
+                                                       sm.add({title : 'table.row_desc', icon : 'row_props', cmd : 'mceTableRowProps'});\r
+                                                       sm.add({title : 'table.row_before_desc', icon : 'row_before', cmd : 'mceTableInsertRowBefore'});\r
+                                                       sm.add({title : 'table.row_after_desc', icon : 'row_after', cmd : 'mceTableInsertRowAfter'});\r
+                                                       sm.add({title : 'table.delete_row_desc', icon : 'delete_row', cmd : 'mceTableDeleteRow'});\r
+                                                       sm.addSeparator();\r
+                                                       sm.add({title : 'table.cut_row_desc', icon : 'cut', cmd : 'mceTableCutRow'});\r
+                                                       sm.add({title : 'table.copy_row_desc', icon : 'copy', cmd : 'mceTableCopyRow'});\r
+                                                       sm.add({title : 'table.paste_row_before_desc', icon : 'paste', cmd : 'mceTablePasteRowBefore'}).setDisabled(!clipboardRows);\r
+                                                       sm.add({title : 'table.paste_row_after_desc', icon : 'paste', cmd : 'mceTablePasteRowAfter'}).setDisabled(!clipboardRows);\r
+\r
+                                                       // Column menu\r
+                                                       sm = m.addMenu({title : 'table.col'});\r
+                                                       sm.add({title : 'table.col_before_desc', icon : 'col_before', cmd : 'mceTableInsertColBefore'});\r
+                                                       sm.add({title : 'table.col_after_desc', icon : 'col_after', cmd : 'mceTableInsertColAfter'});\r
+                                                       sm.add({title : 'table.delete_col_desc', icon : 'delete_col', cmd : 'mceTableDeleteCol'});\r
+                                               } else\r
+                                                       m.add({title : 'table.desc', icon : 'table', cmd : 'mceInsertTable'});\r
+                                       });\r
+                               }\r
+\r
+                               // Fixes an issue on Gecko where it's impossible to place the caret behind a table\r
+                               // This fix will force a paragraph element after the table but only when the forced_root_block setting is enabled\r
+                               if (!tinymce.isIE) {\r
+                                       function fixTableCaretPos() {\r
+                                               var last;\r
+\r
+                                               // Skip empty text nodes form the end\r
+                                               for (last = ed.getBody().lastChild; last && last.nodeType == 3 && !last.nodeValue.length; last = last.previousSibling) ;\r
+\r
+                                               if (last && last.nodeName == 'TABLE')\r
+                                                       ed.dom.add(ed.getBody(), 'p', null, '<br mce_bogus="1" />');\r
+                                       };\r
+\r
+                                       // Fixes an bug where it's impossible to place the caret before a table in Gecko\r
+                                       // this fix solves it by detecting when the caret is at the beginning of such a table\r
+                                       // and then manually moves the caret infront of the table\r
+                                       if (tinymce.isGecko) {\r
+                                               ed.onKeyDown.add(function(ed, e) {\r
+                                                       var rng, table, dom = ed.dom;\r
+\r
+                                                       // On gecko it's not possible to place the caret before a table\r
+                                                       if (e.keyCode == 37 || e.keyCode == 38) {\r
+                                                               rng = ed.selection.getRng();\r
+                                                               table = dom.getParent(rng.startContainer, 'table');\r
+\r
+                                                               if (table && ed.getBody().firstChild == table) {\r
+                                                                       if (isAtStart(rng, table)) {\r
+                                                                               rng = dom.createRng();\r
+\r
+                                                                               rng.setStartBefore(table);\r
+                                                                               rng.setEndBefore(table);\r
+\r
+                                                                               ed.selection.setRng(rng);\r
+\r
+                                                                               e.preventDefault();\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               });\r
+                                       }\r
+\r
+                                       ed.onKeyUp.add(fixTableCaretPos);\r
+                                       ed.onSetContent.add(fixTableCaretPos);\r
+                                       ed.onVisualAid.add(fixTableCaretPos);\r
+\r
+                                       ed.onPreProcess.add(function(ed, o) {\r
+                                               var last = o.node.lastChild;\r
+\r
+                                               if (last && last.childNodes.length == 1 && last.firstChild.nodeName == 'BR')\r
+                                                       ed.dom.remove(last);\r
+                                       });\r
+\r
+                                       fixTableCaretPos();\r
+                               }\r
+                       });\r
+\r
+                       // Register action commands\r
+                       each({\r
+                               mceTableSplitCells : function(grid) {\r
+                                       grid.split();\r
+                               },\r
+\r
+                               mceTableMergeCells : function(grid) {\r
+                                       var rowSpan, colSpan, cell;\r
+\r
+                                       cell = ed.dom.getParent(ed.selection.getNode(), 'th,td');\r
+                                       if (cell) {\r
+                                               rowSpan = cell.rowSpan;\r
+                                               colSpan = cell.colSpan;\r
+                                       }\r
+\r
+                                       if (!ed.dom.select('td.mceSelected,th.mceSelected').length) {\r
+                                               winMan.open({\r
+                                                       url : url + '/merge_cells.htm',\r
+                                                       width : 240 + parseInt(ed.getLang('table.merge_cells_delta_width', 0)),\r
+                                                       height : 110 + parseInt(ed.getLang('table.merge_cells_delta_height', 0)),\r
+                                                       inline : 1\r
+                                               }, {\r
+                                                       rows : rowSpan,\r
+                                                       cols : colSpan,\r
+                                                       onaction : function(data) {\r
+                                                               grid.merge(cell, data.cols, data.rows);\r
+                                                       },\r
+                                                       plugin_url : url\r
+                                               });\r
+                                       } else\r
+                                               grid.merge();\r
+                               },\r
+\r
+                               mceTableInsertRowBefore : function(grid) {\r
+                                       grid.insertRow(true);\r
+                               },\r
+\r
+                               mceTableInsertRowAfter : function(grid) {\r
+                                       grid.insertRow();\r
+                               },\r
+\r
+                               mceTableInsertColBefore : function(grid) {\r
+                                       grid.insertCol(true);\r
+                               },\r
+\r
+                               mceTableInsertColAfter : function(grid) {\r
+                                       grid.insertCol();\r
+                               },\r
+\r
+                               mceTableDeleteCol : function(grid) {\r
+                                       grid.deleteCols();\r
+                               },\r
+\r
+                               mceTableDeleteRow : function(grid) {\r
+                                       grid.deleteRows();\r
+                               },\r
+\r
+                               mceTableCutRow : function(grid) {\r
+                                       clipboardRows = grid.cutRows();\r
+                               },\r
+\r
+                               mceTableCopyRow : function(grid) {\r
+                                       clipboardRows = grid.copyRows();\r
+                               },\r
+\r
+                               mceTablePasteRowBefore : function(grid) {\r
+                                       grid.pasteRows(clipboardRows, true);\r
+                               },\r
+\r
+                               mceTablePasteRowAfter : function(grid) {\r
+                                       grid.pasteRows(clipboardRows);\r
+                               },\r
+\r
+                               mceTableDelete : function(grid) {\r
+                                       grid.deleteTable();\r
+                               }\r
+                       }, function(func, name) {\r
+                               ed.addCommand(name, function() {\r
+                                       var grid = createTableGrid();\r
+\r
+                                       if (grid) {\r
+                                               func(grid);\r
+                                               ed.execCommand('mceRepaint');\r
+                                               cleanup();\r
+                                       }\r
+                               });\r
+                       });\r
+\r
+                       // Register dialog commands\r
+                       each({\r
+                               mceInsertTable : function(val) {\r
+                                       winMan.open({\r
+                                               url : url + '/table.htm',\r
+                                               width : 400 + parseInt(ed.getLang('table.table_delta_width', 0)),\r
+                                               height : 320 + parseInt(ed.getLang('table.table_delta_height', 0)),\r
+                                               inline : 1\r
+                                       }, {\r
+                                               plugin_url : url,\r
+                                               action : val ? val.action : 0\r
+                                       });\r
+                               },\r
+\r
+                               mceTableRowProps : function() {\r
+                                       winMan.open({\r
+                                               url : url + '/row.htm',\r
+                                               width : 400 + parseInt(ed.getLang('table.rowprops_delta_width', 0)),\r
+                                               height : 295 + parseInt(ed.getLang('table.rowprops_delta_height', 0)),\r
+                                               inline : 1\r
+                                       }, {\r
+                                               plugin_url : url\r
+                                       });\r
+                               },\r
+\r
+                               mceTableCellProps : function() {\r
+                                       winMan.open({\r
+                                               url : url + '/cell.htm',\r
+                                               width : 400 + parseInt(ed.getLang('table.cellprops_delta_width', 0)),\r
+                                               height : 295 + parseInt(ed.getLang('table.cellprops_delta_height', 0)),\r
+                                               inline : 1\r
+                                       }, {\r
+                                               plugin_url : url\r
+                                       });\r
+                               }\r
+                       }, function(func, name) {\r
+                               ed.addCommand(name, function(ui, val) {\r
+                                       func(val);\r
+                               });\r
+                       });\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('table', tinymce.plugins.TablePlugin);\r
+})(tinymce);
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/js/cell.js b/plugins/TinyMCE/js/plugins/table/js/cell.js
new file mode 100644 (file)
index 0000000..b5fc1fd
--- /dev/null
@@ -0,0 +1,286 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var ed;\r
+\r
+function init() {\r
+       ed = tinyMCEPopup.editor;\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+       document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
+       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor')\r
+\r
+       var inst = ed;\r
+       var tdElm = ed.dom.getParent(ed.selection.getStart(), "td,th");\r
+       var formObj = document.forms[0];\r
+       var st = ed.dom.parseStyle(ed.dom.getAttrib(tdElm, "style"));\r
+\r
+       // Get table cell data\r
+       var celltype = tdElm.nodeName.toLowerCase();\r
+       var align = ed.dom.getAttrib(tdElm, 'align');\r
+       var valign = ed.dom.getAttrib(tdElm, 'valign');\r
+       var width = trimSize(getStyle(tdElm, 'width', 'width'));\r
+       var height = trimSize(getStyle(tdElm, 'height', 'height'));\r
+       var bordercolor = convertRGBToHex(getStyle(tdElm, 'bordercolor', 'borderLeftColor'));\r
+       var bgcolor = convertRGBToHex(getStyle(tdElm, 'bgcolor', 'backgroundColor'));\r
+       var className = ed.dom.getAttrib(tdElm, 'class');\r
+       var backgroundimage = getStyle(tdElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
+       var id = ed.dom.getAttrib(tdElm, 'id');\r
+       var lang = ed.dom.getAttrib(tdElm, 'lang');\r
+       var dir = ed.dom.getAttrib(tdElm, 'dir');\r
+       var scope = ed.dom.getAttrib(tdElm, 'scope');\r
+\r
+       // Setup form\r
+       addClassesToList('class', 'table_cell_styles');\r
+       TinyMCE_EditableSelects.init();\r
+\r
+       if (!ed.dom.hasClass(tdElm, 'mceSelected')) {\r
+               formObj.bordercolor.value = bordercolor;\r
+               formObj.bgcolor.value = bgcolor;\r
+               formObj.backgroundimage.value = backgroundimage;\r
+               formObj.width.value = width;\r
+               formObj.height.value = height;\r
+               formObj.id.value = id;\r
+               formObj.lang.value = lang;\r
+               formObj.style.value = ed.dom.serializeStyle(st);\r
+               selectByValue(formObj, 'align', align);\r
+               selectByValue(formObj, 'valign', valign);\r
+               selectByValue(formObj, 'class', className, true, true);\r
+               selectByValue(formObj, 'celltype', celltype);\r
+               selectByValue(formObj, 'dir', dir);\r
+               selectByValue(formObj, 'scope', scope);\r
+\r
+               // Resize some elements\r
+               if (isVisible('backgroundimagebrowser'))\r
+                       document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+               updateColor('bordercolor_pick', 'bordercolor');\r
+               updateColor('bgcolor_pick', 'bgcolor');\r
+       } else\r
+               tinyMCEPopup.dom.hide('action');\r
+}\r
+\r
+function updateAction() {\r
+       var el, inst = ed, tdElm, trElm, tableElm, formObj = document.forms[0];\r
+\r
+       tinyMCEPopup.restoreSelection();\r
+       el = ed.selection.getStart();\r
+       tdElm = ed.dom.getParent(el, "td,th");\r
+       trElm = ed.dom.getParent(el, "tr");\r
+       tableElm = ed.dom.getParent(el, "table");\r
+\r
+       // Cell is selected\r
+       if (ed.dom.hasClass(tdElm, 'mceSelected')) {\r
+               // Update all selected sells\r
+               tinymce.each(ed.dom.select('td.mceSelected,th.mceSelected'), function(td) {\r
+                       updateCell(td);\r
+               });\r
+\r
+               ed.addVisual();\r
+               ed.nodeChanged();\r
+               inst.execCommand('mceEndUndoLevel');\r
+               tinyMCEPopup.close();\r
+               return;\r
+       }\r
+\r
+       ed.execCommand('mceBeginUndoLevel');\r
+\r
+       switch (getSelectValue(formObj, 'action')) {\r
+               case "cell":\r
+                       var celltype = getSelectValue(formObj, 'celltype');\r
+                       var scope = getSelectValue(formObj, 'scope');\r
+\r
+                       function doUpdate(s) {\r
+                               if (s) {\r
+                                       updateCell(tdElm);\r
+\r
+                                       ed.addVisual();\r
+                                       ed.nodeChanged();\r
+                                       inst.execCommand('mceEndUndoLevel');\r
+                                       tinyMCEPopup.close();\r
+                               }\r
+                       };\r
+\r
+                       if (ed.getParam("accessibility_warnings", 1)) {\r
+                               if (celltype == "th" && scope == "")\r
+                                       tinyMCEPopup.confirm(ed.getLang('table_dlg.missing_scope', '', true), doUpdate);\r
+                               else\r
+                                       doUpdate(1);\r
+\r
+                               return;\r
+                       }\r
+\r
+                       updateCell(tdElm);\r
+                       break;\r
+\r
+               case "row":\r
+                       var cell = trElm.firstChild;\r
+\r
+                       if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
+                               cell = nextCell(cell);\r
+\r
+                       do {\r
+                               cell = updateCell(cell, true);\r
+                       } while ((cell = nextCell(cell)) != null);\r
+\r
+                       break;\r
+\r
+               case "all":\r
+                       var rows = tableElm.getElementsByTagName("tr");\r
+\r
+                       for (var i=0; i<rows.length; i++) {\r
+                               var cell = rows[i].firstChild;\r
+\r
+                               if (cell.nodeName != "TD" && cell.nodeName != "TH")\r
+                                       cell = nextCell(cell);\r
+\r
+                               do {\r
+                                       cell = updateCell(cell, true);\r
+                               } while ((cell = nextCell(cell)) != null);\r
+                       }\r
+\r
+                       break;\r
+       }\r
+\r
+       ed.addVisual();\r
+       ed.nodeChanged();\r
+       inst.execCommand('mceEndUndoLevel');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function nextCell(elm) {\r
+       while ((elm = elm.nextSibling) != null) {\r
+               if (elm.nodeName == "TD" || elm.nodeName == "TH")\r
+                       return elm;\r
+       }\r
+\r
+       return null;\r
+}\r
+\r
+function updateCell(td, skip_id) {\r
+       var inst = ed;\r
+       var formObj = document.forms[0];\r
+       var curCellType = td.nodeName.toLowerCase();\r
+       var celltype = getSelectValue(formObj, 'celltype');\r
+       var doc = inst.getDoc();\r
+       var dom = ed.dom;\r
+\r
+       if (!skip_id)\r
+               td.setAttribute('id', formObj.id.value);\r
+\r
+       td.setAttribute('align', formObj.align.value);\r
+       td.setAttribute('vAlign', formObj.valign.value);\r
+       td.setAttribute('lang', formObj.lang.value);\r
+       td.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
+       td.setAttribute('style', ed.dom.serializeStyle(ed.dom.parseStyle(formObj.style.value)));\r
+       td.setAttribute('scope', formObj.scope.value);\r
+       ed.dom.setAttrib(td, 'class', getSelectValue(formObj, 'class'));\r
+\r
+       // Clear deprecated attributes\r
+       ed.dom.setAttrib(td, 'width', '');\r
+       ed.dom.setAttrib(td, 'height', '');\r
+       ed.dom.setAttrib(td, 'bgColor', '');\r
+       ed.dom.setAttrib(td, 'borderColor', '');\r
+       ed.dom.setAttrib(td, 'background', '');\r
+\r
+       // Set styles\r
+       td.style.width = getCSSSize(formObj.width.value);\r
+       td.style.height = getCSSSize(formObj.height.value);\r
+       if (formObj.bordercolor.value != "") {\r
+               td.style.borderColor = formObj.bordercolor.value;\r
+               td.style.borderStyle = td.style.borderStyle == "" ? "solid" : td.style.borderStyle;\r
+               td.style.borderWidth = td.style.borderWidth == "" ? "1px" : td.style.borderWidth;\r
+       } else\r
+               td.style.borderColor = '';\r
+\r
+       td.style.backgroundColor = formObj.bgcolor.value;\r
+\r
+       if (formObj.backgroundimage.value != "")\r
+               td.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
+       else\r
+               td.style.backgroundImage = '';\r
+\r
+       if (curCellType != celltype) {\r
+               // changing to a different node type\r
+               var newCell = doc.createElement(celltype);\r
+\r
+               for (var c=0; c<td.childNodes.length; c++)\r
+                       newCell.appendChild(td.childNodes[c].cloneNode(1));\r
+\r
+               for (var a=0; a<td.attributes.length; a++)\r
+                       ed.dom.setAttrib(newCell, td.attributes[a].name, ed.dom.getAttrib(td, td.attributes[a].name));\r
+\r
+               td.parentNode.replaceChild(newCell, td);\r
+               td = newCell;\r
+       }\r
+\r
+       dom.setAttrib(td, 'style', dom.serializeStyle(dom.parseStyle(td.style.cssText)));\r
+\r
+       return td;\r
+}\r
+\r
+function changedBackgroundImage() {\r
+       var formObj = document.forms[0];\r
+       var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+       st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
+\r
+       formObj.style.value = ed.dom.serializeStyle(st);\r
+}\r
+\r
+function changedSize() {\r
+       var formObj = document.forms[0];\r
+       var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+       var width = formObj.width.value;\r
+       if (width != "")\r
+               st['width'] = getCSSSize(width);\r
+       else\r
+               st['width'] = "";\r
+\r
+       var height = formObj.height.value;\r
+       if (height != "")\r
+               st['height'] = getCSSSize(height);\r
+       else\r
+               st['height'] = "";\r
+\r
+       formObj.style.value = ed.dom.serializeStyle(st);\r
+}\r
+\r
+function changedColor() {\r
+       var formObj = document.forms[0];\r
+       var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+       st['background-color'] = formObj.bgcolor.value;\r
+       st['border-color'] = formObj.bordercolor.value;\r
+\r
+       formObj.style.value = ed.dom.serializeStyle(st);\r
+}\r
+\r
+function changedStyle() {\r
+       var formObj = document.forms[0];\r
+       var st = ed.dom.parseStyle(formObj.style.value);\r
+\r
+       if (st['background-image'])\r
+               formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+       else\r
+               formObj.backgroundimage.value = '';\r
+\r
+       if (st['width'])\r
+               formObj.width.value = trimSize(st['width']);\r
+\r
+       if (st['height'])\r
+               formObj.height.value = trimSize(st['height']);\r
+\r
+       if (st['background-color']) {\r
+               formObj.bgcolor.value = st['background-color'];\r
+               updateColor('bgcolor_pick','bgcolor');\r
+       }\r
+\r
+       if (st['border-color']) {\r
+               formObj.bordercolor.value = st['border-color'];\r
+               updateColor('bordercolor_pick','bordercolor');\r
+       }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/table/js/merge_cells.js b/plugins/TinyMCE/js/plugins/table/js/merge_cells.js
new file mode 100644 (file)
index 0000000..7ee4bf0
--- /dev/null
@@ -0,0 +1,27 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var MergeCellsDialog = {\r
+       init : function() {\r
+               var f = document.forms[0];\r
+\r
+               f.numcols.value = tinyMCEPopup.getWindowArg('cols', 1);\r
+               f.numrows.value = tinyMCEPopup.getWindowArg('rows', 1);\r
+       },\r
+\r
+       merge : function() {\r
+               var func, f = document.forms[0];\r
+\r
+               tinyMCEPopup.restoreSelection();\r
+\r
+               func = tinyMCEPopup.getWindowArg('onaction');\r
+\r
+               func({\r
+                       cols : f.numcols.value,\r
+                       rows : f.numrows.value\r
+               });\r
+\r
+               tinyMCEPopup.close();\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(MergeCellsDialog.init, MergeCellsDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/table/js/row.js b/plugins/TinyMCE/js/plugins/table/js/row.js
new file mode 100644 (file)
index 0000000..70d95b6
--- /dev/null
@@ -0,0 +1,237 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+function init() {\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+\r
+       var inst = tinyMCEPopup.editor;\r
+       var dom = inst.dom;\r
+       var trElm = dom.getParent(inst.selection.getStart(), "tr");\r
+       var formObj = document.forms[0];\r
+       var st = dom.parseStyle(dom.getAttrib(trElm, "style"));\r
+\r
+       // Get table row data\r
+       var rowtype = trElm.parentNode.nodeName.toLowerCase();\r
+       var align = dom.getAttrib(trElm, 'align');\r
+       var valign = dom.getAttrib(trElm, 'valign');\r
+       var height = trimSize(getStyle(trElm, 'height', 'height'));\r
+       var className = dom.getAttrib(trElm, 'class');\r
+       var bgcolor = convertRGBToHex(getStyle(trElm, 'bgcolor', 'backgroundColor'));\r
+       var backgroundimage = getStyle(trElm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
+       var id = dom.getAttrib(trElm, 'id');\r
+       var lang = dom.getAttrib(trElm, 'lang');\r
+       var dir = dom.getAttrib(trElm, 'dir');\r
+\r
+       selectByValue(formObj, 'rowtype', rowtype);\r
+\r
+       // Any cells selected\r
+       if (dom.select('td.mceSelected,th.mceSelected', trElm).length == 0) {\r
+               // Setup form\r
+               addClassesToList('class', 'table_row_styles');\r
+               TinyMCE_EditableSelects.init();\r
+\r
+               formObj.bgcolor.value = bgcolor;\r
+               formObj.backgroundimage.value = backgroundimage;\r
+               formObj.height.value = height;\r
+               formObj.id.value = id;\r
+               formObj.lang.value = lang;\r
+               formObj.style.value = dom.serializeStyle(st);\r
+               selectByValue(formObj, 'align', align);\r
+               selectByValue(formObj, 'valign', valign);\r
+               selectByValue(formObj, 'class', className, true, true);\r
+               selectByValue(formObj, 'dir', dir);\r
+\r
+               // Resize some elements\r
+               if (isVisible('backgroundimagebrowser'))\r
+                       document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+               updateColor('bgcolor_pick', 'bgcolor');\r
+       } else\r
+               tinyMCEPopup.dom.hide('action');\r
+}\r
+\r
+function updateAction() {\r
+       var inst = tinyMCEPopup.editor, dom = inst.dom, trElm, tableElm, formObj = document.forms[0];\r
+       var action = getSelectValue(formObj, 'action');\r
+\r
+       tinyMCEPopup.restoreSelection();\r
+       trElm = dom.getParent(inst.selection.getStart(), "tr");\r
+       tableElm = dom.getParent(inst.selection.getStart(), "table");\r
+\r
+       // Update all selected rows\r
+       if (dom.select('td.mceSelected,th.mceSelected', trElm).length > 0) {\r
+               tinymce.each(tableElm.rows, function(tr) {\r
+                       var i;\r
+\r
+                       for (i = 0; i < tr.cells.length; i++) {\r
+                               if (dom.hasClass(tr.cells[i], 'mceSelected')) {\r
+                                       updateRow(tr, true);\r
+                                       return;\r
+                               }\r
+                       }\r
+               });\r
+\r
+               inst.addVisual();\r
+               inst.nodeChanged();\r
+               inst.execCommand('mceEndUndoLevel');\r
+               tinyMCEPopup.close();\r
+               return;\r
+       }\r
+\r
+       inst.execCommand('mceBeginUndoLevel');\r
+\r
+       switch (action) {\r
+               case "row":\r
+                       updateRow(trElm);\r
+                       break;\r
+\r
+               case "all":\r
+                       var rows = tableElm.getElementsByTagName("tr");\r
+\r
+                       for (var i=0; i<rows.length; i++)\r
+                               updateRow(rows[i], true);\r
+\r
+                       break;\r
+\r
+               case "odd":\r
+               case "even":\r
+                       var rows = tableElm.getElementsByTagName("tr");\r
+\r
+                       for (var i=0; i<rows.length; i++) {\r
+                               if ((i % 2 == 0 && action == "odd") || (i % 2 != 0 && action == "even"))\r
+                                       updateRow(rows[i], true, true);\r
+                       }\r
+\r
+                       break;\r
+       }\r
+\r
+       inst.addVisual();\r
+       inst.nodeChanged();\r
+       inst.execCommand('mceEndUndoLevel');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function updateRow(tr_elm, skip_id, skip_parent) {\r
+       var inst = tinyMCEPopup.editor;\r
+       var formObj = document.forms[0];\r
+       var dom = inst.dom;\r
+       var curRowType = tr_elm.parentNode.nodeName.toLowerCase();\r
+       var rowtype = getSelectValue(formObj, 'rowtype');\r
+       var doc = inst.getDoc();\r
+\r
+       // Update row element\r
+       if (!skip_id)\r
+               tr_elm.setAttribute('id', formObj.id.value);\r
+\r
+       tr_elm.setAttribute('align', getSelectValue(formObj, 'align'));\r
+       tr_elm.setAttribute('vAlign', getSelectValue(formObj, 'valign'));\r
+       tr_elm.setAttribute('lang', formObj.lang.value);\r
+       tr_elm.setAttribute('dir', getSelectValue(formObj, 'dir'));\r
+       tr_elm.setAttribute('style', dom.serializeStyle(dom.parseStyle(formObj.style.value)));\r
+       dom.setAttrib(tr_elm, 'class', getSelectValue(formObj, 'class'));\r
+\r
+       // Clear deprecated attributes\r
+       tr_elm.setAttribute('background', '');\r
+       tr_elm.setAttribute('bgColor', '');\r
+       tr_elm.setAttribute('height', '');\r
+\r
+       // Set styles\r
+       tr_elm.style.height = getCSSSize(formObj.height.value);\r
+       tr_elm.style.backgroundColor = formObj.bgcolor.value;\r
+\r
+       if (formObj.backgroundimage.value != "")\r
+               tr_elm.style.backgroundImage = "url('" + formObj.backgroundimage.value + "')";\r
+       else\r
+               tr_elm.style.backgroundImage = '';\r
+\r
+       // Setup new rowtype\r
+       if (curRowType != rowtype && !skip_parent) {\r
+               // first, clone the node we are working on\r
+               var newRow = tr_elm.cloneNode(1);\r
+\r
+               // next, find the parent of its new destination (creating it if necessary)\r
+               var theTable = dom.getParent(tr_elm, "table");\r
+               var dest = rowtype;\r
+               var newParent = null;\r
+               for (var i = 0; i < theTable.childNodes.length; i++) {\r
+                       if (theTable.childNodes[i].nodeName.toLowerCase() == dest)\r
+                               newParent = theTable.childNodes[i];\r
+               }\r
+\r
+               if (newParent == null) {\r
+                       newParent = doc.createElement(dest);\r
+\r
+                       if (dest == "thead") {\r
+                               if (theTable.firstChild.nodeName == 'CAPTION')\r
+                                       inst.dom.insertAfter(newParent, theTable.firstChild);\r
+                               else\r
+                                       theTable.insertBefore(newParent, theTable.firstChild);\r
+                       } else\r
+                               theTable.appendChild(newParent);\r
+               }\r
+\r
+               // append the row to the new parent\r
+               newParent.appendChild(newRow);\r
+\r
+               // remove the original\r
+               tr_elm.parentNode.removeChild(tr_elm);\r
+\r
+               // set tr_elm to the new node\r
+               tr_elm = newRow;\r
+       }\r
+\r
+       dom.setAttrib(tr_elm, 'style', dom.serializeStyle(dom.parseStyle(tr_elm.style.cssText)));\r
+}\r
+\r
+function changedBackgroundImage() {\r
+       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedStyle() {\r
+       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       if (st['background-image'])\r
+               formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\('?([^']*)'?\\)", 'gi'), "$1");\r
+       else\r
+               formObj.backgroundimage.value = '';\r
+\r
+       if (st['height'])\r
+               formObj.height.value = trimSize(st['height']);\r
+\r
+       if (st['background-color']) {\r
+               formObj.bgcolor.value = st['background-color'];\r
+               updateColor('bgcolor_pick','bgcolor');\r
+       }\r
+}\r
+\r
+function changedSize() {\r
+       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       var height = formObj.height.value;\r
+       if (height != "")\r
+               st['height'] = getCSSSize(height);\r
+       else\r
+               st['height'] = "";\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedColor() {\r
+       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       st['background-color'] = formObj.bgcolor.value;\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/table/js/table.js b/plugins/TinyMCE/js/plugins/table/js/table.js
new file mode 100644 (file)
index 0000000..d1b42c2
--- /dev/null
@@ -0,0 +1,449 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var action, orgTableWidth, orgTableHeight, dom = tinyMCEPopup.editor.dom;\r
+\r
+function insertTable() {\r
+       var formObj = document.forms[0];\r
+       var inst = tinyMCEPopup.editor, dom = inst.dom;\r
+       var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, caption, frame, rules;\r
+       var html = '', capEl, elm;\r
+       var cellLimit, rowLimit, colLimit;\r
+\r
+       tinyMCEPopup.restoreSelection();\r
+\r
+       if (!AutoValidator.validate(formObj)) {\r
+               tinyMCEPopup.alert(inst.getLang('invalid_data'));\r
+               return false;\r
+       }\r
+\r
+       elm = dom.getParent(inst.selection.getNode(), 'table');\r
+\r
+       // Get form data\r
+       cols = formObj.elements['cols'].value;\r
+       rows = formObj.elements['rows'].value;\r
+       border = formObj.elements['border'].value != "" ? formObj.elements['border'].value  : 0;\r
+       cellpadding = formObj.elements['cellpadding'].value != "" ? formObj.elements['cellpadding'].value : "";\r
+       cellspacing = formObj.elements['cellspacing'].value != "" ? formObj.elements['cellspacing'].value : "";\r
+       align = getSelectValue(formObj, "align");\r
+       frame = getSelectValue(formObj, "tframe");\r
+       rules = getSelectValue(formObj, "rules");\r
+       width = formObj.elements['width'].value;\r
+       height = formObj.elements['height'].value;\r
+       bordercolor = formObj.elements['bordercolor'].value;\r
+       bgcolor = formObj.elements['bgcolor'].value;\r
+       className = getSelectValue(formObj, "class");\r
+       id = formObj.elements['id'].value;\r
+       summary = formObj.elements['summary'].value;\r
+       style = formObj.elements['style'].value;\r
+       dir = formObj.elements['dir'].value;\r
+       lang = formObj.elements['lang'].value;\r
+       background = formObj.elements['backgroundimage'].value;\r
+       caption = formObj.elements['caption'].checked;\r
+\r
+       cellLimit = tinyMCEPopup.getParam('table_cell_limit', false);\r
+       rowLimit = tinyMCEPopup.getParam('table_row_limit', false);\r
+       colLimit = tinyMCEPopup.getParam('table_col_limit', false);\r
+\r
+       // Validate table size\r
+       if (colLimit && cols > colLimit) {\r
+               tinyMCEPopup.alert(inst.getLang('table_dlg.col_limit').replace(/\{\$cols\}/g, colLimit));\r
+               return false;\r
+       } else if (rowLimit && rows > rowLimit) {\r
+               tinyMCEPopup.alert(inst.getLang('table_dlg.row_limit').replace(/\{\$rows\}/g, rowLimit));\r
+               return false;\r
+       } else if (cellLimit && cols * rows > cellLimit) {\r
+               tinyMCEPopup.alert(inst.getLang('table_dlg.cell_limit').replace(/\{\$cells\}/g, cellLimit));\r
+               return false;\r
+       }\r
+\r
+       // Update table\r
+       if (action == "update") {\r
+               inst.execCommand('mceBeginUndoLevel');\r
+\r
+               dom.setAttrib(elm, 'cellPadding', cellpadding, true);\r
+               dom.setAttrib(elm, 'cellSpacing', cellspacing, true);\r
+               dom.setAttrib(elm, 'border', border);\r
+               dom.setAttrib(elm, 'align', align);\r
+               dom.setAttrib(elm, 'frame', frame);\r
+               dom.setAttrib(elm, 'rules', rules);\r
+               dom.setAttrib(elm, 'class', className);\r
+               dom.setAttrib(elm, 'style', style);\r
+               dom.setAttrib(elm, 'id', id);\r
+               dom.setAttrib(elm, 'summary', summary);\r
+               dom.setAttrib(elm, 'dir', dir);\r
+               dom.setAttrib(elm, 'lang', lang);\r
+\r
+               capEl = inst.dom.select('caption', elm)[0];\r
+\r
+               if (capEl && !caption)\r
+                       capEl.parentNode.removeChild(capEl);\r
+\r
+               if (!capEl && caption) {\r
+                       capEl = elm.ownerDocument.createElement('caption');\r
+\r
+                       if (!tinymce.isIE)\r
+                               capEl.innerHTML = '<br _mce_bogus="1"/>';\r
+\r
+                       elm.insertBefore(capEl, elm.firstChild);\r
+               }\r
+\r
+               if (width && inst.settings.inline_styles) {\r
+                       dom.setStyle(elm, 'width', width);\r
+                       dom.setAttrib(elm, 'width', '');\r
+               } else {\r
+                       dom.setAttrib(elm, 'width', width, true);\r
+                       dom.setStyle(elm, 'width', '');\r
+               }\r
+\r
+               // Remove these since they are not valid XHTML\r
+               dom.setAttrib(elm, 'borderColor', '');\r
+               dom.setAttrib(elm, 'bgColor', '');\r
+               dom.setAttrib(elm, 'background', '');\r
+\r
+               if (height && inst.settings.inline_styles) {\r
+                       dom.setStyle(elm, 'height', height);\r
+                       dom.setAttrib(elm, 'height', '');\r
+               } else {\r
+                       dom.setAttrib(elm, 'height', height, true);\r
+                       dom.setStyle(elm, 'height', '');\r
+               }\r
+\r
+               if (background != '')\r
+                       elm.style.backgroundImage = "url('" + background + "')";\r
+               else\r
+                       elm.style.backgroundImage = '';\r
+\r
+/*             if (tinyMCEPopup.getParam("inline_styles")) {\r
+                       if (width != '')\r
+                               elm.style.width = getCSSSize(width);\r
+               }*/\r
+\r
+               if (bordercolor != "") {\r
+                       elm.style.borderColor = bordercolor;\r
+                       elm.style.borderStyle = elm.style.borderStyle == "" ? "solid" : elm.style.borderStyle;\r
+                       elm.style.borderWidth = border == "" ? "1px" : border;\r
+               } else\r
+                       elm.style.borderColor = '';\r
+\r
+               elm.style.backgroundColor = bgcolor;\r
+               elm.style.height = getCSSSize(height);\r
+\r
+               inst.addVisual();\r
+\r
+               // Fix for stange MSIE align bug\r
+               //elm.outerHTML = elm.outerHTML;\r
+\r
+               inst.nodeChanged();\r
+               inst.execCommand('mceEndUndoLevel');\r
+\r
+               // Repaint if dimensions changed\r
+               if (formObj.width.value != orgTableWidth || formObj.height.value != orgTableHeight)\r
+                       inst.execCommand('mceRepaint');\r
+\r
+               tinyMCEPopup.close();\r
+               return true;\r
+       }\r
+\r
+       // Create new table\r
+       html += '<table';\r
+\r
+       html += makeAttrib('id', id);\r
+       html += makeAttrib('border', border);\r
+       html += makeAttrib('cellpadding', cellpadding);\r
+       html += makeAttrib('cellspacing', cellspacing);\r
+       html += makeAttrib('_mce_new', '1');\r
+\r
+       if (width && inst.settings.inline_styles) {\r
+               if (style)\r
+                       style += '; ';\r
+\r
+               // Force px\r
+               if (/^[0-9\.]+$/.test(width))\r
+                       width += 'px';\r
+\r
+               style += 'width: ' + width;\r
+       } else\r
+               html += makeAttrib('width', width);\r
+\r
+/*     if (height) {\r
+               if (style)\r
+                       style += '; ';\r
+\r
+               style += 'height: ' + height;\r
+       }*/\r
+\r
+       //html += makeAttrib('height', height);\r
+       //html += makeAttrib('bordercolor', bordercolor);\r
+       //html += makeAttrib('bgcolor', bgcolor);\r
+       html += makeAttrib('align', align);\r
+       html += makeAttrib('frame', frame);\r
+       html += makeAttrib('rules', rules);\r
+       html += makeAttrib('class', className);\r
+       html += makeAttrib('style', style);\r
+       html += makeAttrib('summary', summary);\r
+       html += makeAttrib('dir', dir);\r
+       html += makeAttrib('lang', lang);\r
+       html += '>';\r
+\r
+       if (caption) {\r
+               if (!tinymce.isIE)\r
+                       html += '<caption><br _mce_bogus="1"/></caption>';\r
+               else\r
+                       html += '<caption></caption>';\r
+       }\r
+\r
+       for (var y=0; y<rows; y++) {\r
+               html += "<tr>";\r
+\r
+               for (var x=0; x<cols; x++) {\r
+                       if (!tinymce.isIE)\r
+                               html += '<td><br _mce_bogus="1"/></td>';\r
+                       else\r
+                               html += '<td></td>';\r
+               }\r
+\r
+               html += "</tr>";\r
+       }\r
+\r
+       html += "</table>";\r
+\r
+       inst.execCommand('mceBeginUndoLevel');\r
+\r
+       // Move table\r
+       if (inst.settings.fix_table_elements) {\r
+               var patt = '';\r
+\r
+               inst.focus();\r
+               inst.selection.setContent('<br class="_mce_marker" />');\r
+\r
+               tinymce.each('h1,h2,h3,h4,h5,h6,p'.split(','), function(n) {\r
+                       if (patt)\r
+                               patt += ',';\r
+\r
+                       patt += n + ' ._mce_marker';\r
+               });\r
+\r
+               tinymce.each(inst.dom.select(patt), function(n) {\r
+                       inst.dom.split(inst.dom.getParent(n, 'h1,h2,h3,h4,h5,h6,p'), n);\r
+               });\r
+\r
+               dom.setOuterHTML(dom.select('br._mce_marker')[0], html);\r
+       } else\r
+               inst.execCommand('mceInsertContent', false, html);\r
+\r
+       tinymce.each(dom.select('table[_mce_new]'), function(node) {\r
+               var td = dom.select('td', node);\r
+\r
+               inst.selection.select(td[0], true);\r
+               inst.selection.collapse();\r
+\r
+               dom.setAttrib(node, '_mce_new', '');\r
+       });\r
+\r
+       inst.addVisual();\r
+       inst.execCommand('mceEndUndoLevel');\r
+\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function makeAttrib(attrib, value) {\r
+       var formObj = document.forms[0];\r
+       var valueElm = formObj.elements[attrib];\r
+\r
+       if (typeof(value) == "undefined" || value == null) {\r
+               value = "";\r
+\r
+               if (valueElm)\r
+                       value = valueElm.value;\r
+       }\r
+\r
+       if (value == "")\r
+               return "";\r
+\r
+       // XML encode it\r
+       value = value.replace(/&/g, '&amp;');\r
+       value = value.replace(/\"/g, '&quot;');\r
+       value = value.replace(/</g, '&lt;');\r
+       value = value.replace(/>/g, '&gt;');\r
+\r
+       return ' ' + attrib + '="' + value + '"';\r
+}\r
+\r
+function init() {\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+       document.getElementById('backgroundimagebrowsercontainer').innerHTML = getBrowserHTML('backgroundimagebrowser','backgroundimage','image','table');\r
+       document.getElementById('bordercolor_pickcontainer').innerHTML = getColorPickerHTML('bordercolor_pick','bordercolor');\r
+       document.getElementById('bgcolor_pickcontainer').innerHTML = getColorPickerHTML('bgcolor_pick','bgcolor');\r
+\r
+       var cols = 2, rows = 2, border = tinyMCEPopup.getParam('table_default_border', '0'), cellpadding = tinyMCEPopup.getParam('table_default_cellpadding', ''), cellspacing = tinyMCEPopup.getParam('table_default_cellspacing', '');\r
+       var align = "", width = "", height = "", bordercolor = "", bgcolor = "", className = "";\r
+       var id = "", summary = "", style = "", dir = "", lang = "", background = "", bgcolor = "", bordercolor = "", rules, frame;\r
+       var inst = tinyMCEPopup.editor, dom = inst.dom;\r
+       var formObj = document.forms[0];\r
+       var elm = dom.getParent(inst.selection.getNode(), "table");\r
+\r
+       action = tinyMCEPopup.getWindowArg('action');\r
+\r
+       if (!action)\r
+               action = elm ? "update" : "insert";\r
+\r
+       if (elm && action != "insert") {\r
+               var rowsAr = elm.rows;\r
+               var cols = 0;\r
+               for (var i=0; i<rowsAr.length; i++)\r
+                       if (rowsAr[i].cells.length > cols)\r
+                               cols = rowsAr[i].cells.length;\r
+\r
+               cols = cols;\r
+               rows = rowsAr.length;\r
+\r
+               st = dom.parseStyle(dom.getAttrib(elm, "style"));\r
+               border = trimSize(getStyle(elm, 'border', 'borderWidth'));\r
+               cellpadding = dom.getAttrib(elm, 'cellpadding', "");\r
+               cellspacing = dom.getAttrib(elm, 'cellspacing', "");\r
+               width = trimSize(getStyle(elm, 'width', 'width'));\r
+               height = trimSize(getStyle(elm, 'height', 'height'));\r
+               bordercolor = convertRGBToHex(getStyle(elm, 'bordercolor', 'borderLeftColor'));\r
+               bgcolor = convertRGBToHex(getStyle(elm, 'bgcolor', 'backgroundColor'));\r
+               align = dom.getAttrib(elm, 'align', align);\r
+               frame = dom.getAttrib(elm, 'frame');\r
+               rules = dom.getAttrib(elm, 'rules');\r
+               className = tinymce.trim(dom.getAttrib(elm, 'class').replace(/mceItem.+/g, ''));\r
+               id = dom.getAttrib(elm, 'id');\r
+               summary = dom.getAttrib(elm, 'summary');\r
+               style = dom.serializeStyle(st);\r
+               dir = dom.getAttrib(elm, 'dir');\r
+               lang = dom.getAttrib(elm, 'lang');\r
+               background = getStyle(elm, 'background', 'backgroundImage').replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
+               formObj.caption.checked = elm.getElementsByTagName('caption').length > 0;\r
+\r
+               orgTableWidth = width;\r
+               orgTableHeight = height;\r
+\r
+               action = "update";\r
+               formObj.insert.value = inst.getLang('update');\r
+       }\r
+\r
+       addClassesToList('class', "table_styles");\r
+       TinyMCE_EditableSelects.init();\r
+\r
+       // Update form\r
+       selectByValue(formObj, 'align', align);\r
+       selectByValue(formObj, 'tframe', frame);\r
+       selectByValue(formObj, 'rules', rules);\r
+       selectByValue(formObj, 'class', className, true, true);\r
+       formObj.cols.value = cols;\r
+       formObj.rows.value = rows;\r
+       formObj.border.value = border;\r
+       formObj.cellpadding.value = cellpadding;\r
+       formObj.cellspacing.value = cellspacing;\r
+       formObj.width.value = width;\r
+       formObj.height.value = height;\r
+       formObj.bordercolor.value = bordercolor;\r
+       formObj.bgcolor.value = bgcolor;\r
+       formObj.id.value = id;\r
+       formObj.summary.value = summary;\r
+       formObj.style.value = style;\r
+       formObj.dir.value = dir;\r
+       formObj.lang.value = lang;\r
+       formObj.backgroundimage.value = background;\r
+\r
+       updateColor('bordercolor_pick', 'bordercolor');\r
+       updateColor('bgcolor_pick', 'bgcolor');\r
+\r
+       // Resize some elements\r
+       if (isVisible('backgroundimagebrowser'))\r
+               document.getElementById('backgroundimage').style.width = '180px';\r
+\r
+       // Disable some fields in update mode\r
+       if (action == "update") {\r
+               formObj.cols.disabled = true;\r
+               formObj.rows.disabled = true;\r
+       }\r
+}\r
+\r
+function changedSize() {\r
+       var formObj = document.forms[0];\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+/*     var width = formObj.width.value;\r
+       if (width != "")\r
+               st['width'] = tinyMCEPopup.getParam("inline_styles") ? getCSSSize(width) : "";\r
+       else\r
+               st['width'] = "";*/\r
+\r
+       var height = formObj.height.value;\r
+       if (height != "")\r
+               st['height'] = getCSSSize(height);\r
+       else\r
+               st['height'] = "";\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedBackgroundImage() {\r
+       var formObj = document.forms[0];\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       st['background-image'] = "url('" + formObj.backgroundimage.value + "')";\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedBorder() {\r
+       var formObj = document.forms[0];\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       // Update border width if the element has a color\r
+       if (formObj.border.value != "" && formObj.bordercolor.value != "")\r
+               st['border-width'] = formObj.border.value + "px";\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedColor() {\r
+       var formObj = document.forms[0];\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       st['background-color'] = formObj.bgcolor.value;\r
+\r
+       if (formObj.bordercolor.value != "") {\r
+               st['border-color'] = formObj.bordercolor.value;\r
+\r
+               // Add border-width if it's missing\r
+               if (!st['border-width'])\r
+                       st['border-width'] = formObj.border.value == "" ? "1px" : formObj.border.value + "px";\r
+       }\r
+\r
+       formObj.style.value = dom.serializeStyle(st);\r
+}\r
+\r
+function changedStyle() {\r
+       var formObj = document.forms[0];\r
+       var st = dom.parseStyle(formObj.style.value);\r
+\r
+       if (st['background-image'])\r
+               formObj.backgroundimage.value = st['background-image'].replace(new RegExp("url\\(['\"]?([^'\"]*)['\"]?\\)", 'gi'), "$1");\r
+       else\r
+               formObj.backgroundimage.value = '';\r
+\r
+       if (st['width'])\r
+               formObj.width.value = trimSize(st['width']);\r
+\r
+       if (st['height'])\r
+               formObj.height.value = trimSize(st['height']);\r
+\r
+       if (st['background-color']) {\r
+               formObj.bgcolor.value = st['background-color'];\r
+               updateColor('bgcolor_pick','bgcolor');\r
+       }\r
+\r
+       if (st['border-color']) {\r
+               formObj.bordercolor.value = st['border-color'];\r
+               updateColor('bordercolor_pick','bordercolor');\r
+       }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/table/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/table/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..000332a
--- /dev/null
@@ -0,0 +1,74 @@
+tinyMCE.addI18n('en.table_dlg',{\r
+general_tab:"General",\r
+advanced_tab:"Advanced",\r
+general_props:"General properties",\r
+advanced_props:"Advanced properties",\r
+rowtype:"Row in table part",\r
+title:"Insert/Modify table",\r
+width:"Width",\r
+height:"Height",\r
+cols:"Cols",\r
+rows:"Rows",\r
+cellspacing:"Cellspacing",\r
+cellpadding:"Cellpadding",\r
+border:"Border",\r
+align:"Alignment",\r
+align_default:"Default",\r
+align_left:"Left",\r
+align_right:"Right",\r
+align_middle:"Center",\r
+row_title:"Table row properties",\r
+cell_title:"Table cell properties",\r
+cell_type:"Cell type",\r
+valign:"Vertical alignment",\r
+align_top:"Top",\r
+align_bottom:"Bottom",\r
+bordercolor:"Border color",\r
+bgcolor:"Background color",\r
+merge_cells_title:"Merge table cells",\r
+id:"Id",\r
+style:"Style",\r
+langdir:"Language direction",\r
+langcode:"Language code",\r
+mime:"Target MIME type",\r
+ltr:"Left to right",\r
+rtl:"Right to left",\r
+bgimage:"Background image",\r
+summary:"Summary",\r
+td:"Data",\r
+th:"Header",\r
+cell_cell:"Update current cell",\r
+cell_row:"Update all cells in row",\r
+cell_all:"Update all cells in table",\r
+row_row:"Update current row",\r
+row_odd:"Update odd rows in table",\r
+row_even:"Update even rows in table",\r
+row_all:"Update all rows in table",\r
+thead:"Table Head",\r
+tbody:"Table Body",\r
+tfoot:"Table Foot",\r
+scope:"Scope",\r
+rowgroup:"Row Group",\r
+colgroup:"Col Group",\r
+col_limit:"You've exceeded the maximum number of columns of {$cols}.",\r
+row_limit:"You've exceeded the maximum number of rows of {$rows}.",\r
+cell_limit:"You've exceeded the maximum number of cells of {$cells}.",\r
+missing_scope:"Are you sure you want to continue without specifying a scope for this table header cell. Without it, it may be difficult for some users with disabilities to understand the content or data displayed of the table.",\r
+caption:"Table caption",\r
+frame:"Frame",\r
+frame_none:"none",\r
+frame_groups:"groups",\r
+frame_rows:"rows",\r
+frame_cols:"cols",\r
+frame_all:"all",\r
+rules:"Rules",\r
+rules_void:"void",\r
+rules_above:"above",\r
+rules_below:"below",\r
+rules_hsides:"hsides",\r
+rules_lhs:"lhs",\r
+rules_rhs:"rhs",\r
+rules_vsides:"vsides",\r
+rules_box:"box",\r
+rules_border:"border"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/table/merge_cells.htm b/plugins/TinyMCE/js/plugins/table/merge_cells.htm
new file mode 100644 (file)
index 0000000..9736ed8
--- /dev/null
@@ -0,0 +1,32 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#table_dlg.merge_cells_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/validate.js"></script>\r
+       <script type="text/javascript" src="js/merge_cells.js"></script>\r
+</head>\r
+<body style="margin: 8px">\r
+<form onsubmit="MergeCellsDialog.merge();return false;" action="#">\r
+       <fieldset>\r
+               <legend>{#table_dlg.merge_cells_title}</legend>\r
+                 <table border="0" cellpadding="0" cellspacing="3" width="100%">\r
+                         <tr>\r
+                               <td>{#table_dlg.cols}:</td>\r
+                               <td align="right"><input type="text" name="numcols" value="" class="number min1 mceFocus" style="width: 30px" /></td>\r
+                         </tr>\r
+                         <tr>\r
+                               <td>{#table_dlg.rows}:</td>\r
+                               <td align="right"><input type="text" name="numrows" value="" class="number min1" style="width: 30px" /></td>\r
+                         </tr>\r
+                 </table>\r
+       </fieldset>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/table/row.htm b/plugins/TinyMCE/js/plugins/table/row.htm
new file mode 100644 (file)
index 0000000..092e6c8
--- /dev/null
@@ -0,0 +1,155 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#table_dlg.row_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/row.js"></script>\r
+       <link href="css/row.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body id="tablerow" style="display: none">\r
+       <form onsubmit="updateAction();return false;" action="#">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <fieldset>\r
+                                       <legend>{#table_dlg.general_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="4" cellspacing="0">\r
+                                               <tr>\r
+                                                       <td><label for="rowtype">{#table_dlg.rowtype}</label></td>\r
+                                                       <td class="col2">\r
+                                                               <select id="rowtype" name="rowtype" class="mceFocus">\r
+                                                                       <option value="thead">{#table_dlg.thead}</option>\r
+                                                                       <option value="tbody">{#table_dlg.tbody}</option>\r
+                                                                       <option value="tfoot">{#table_dlg.tfoot}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="align">{#table_dlg.align}</label></td>\r
+                                                       <td class="col2">\r
+                                                               <select id="align" name="align">\r
+                                                                       <option value="">{#not_set}</option>\r
+                                                                       <option value="center">{#table_dlg.align_middle}</option>\r
+                                                                       <option value="left">{#table_dlg.align_left}</option>\r
+                                                                       <option value="right">{#table_dlg.align_right}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="valign">{#table_dlg.valign}</label></td>\r
+                                                       <td class="col2">\r
+                                                               <select id="valign" name="valign">\r
+                                                                       <option value="">{#not_set}</option>\r
+                                                                       <option value="top">{#table_dlg.align_top}</option>\r
+                                                                       <option value="middle">{#table_dlg.align_middle}</option>\r
+                                                                       <option value="bottom">{#table_dlg.align_bottom}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr id="styleSelectRow">\r
+                                                       <td><label for="class">{#class_name}</label></td>\r
+                                                       <td class="col2">\r
+                                                               <select id="class" name="class" class="mceEditableSelect">\r
+                                                                       <option value="" selected="selected">{#not_set}</option>\r
+                                                               </select>\r
+                                                       </td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="height">{#table_dlg.height}</label></td>\r
+                                                       <td class="col2"><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" /></td>\r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#table_dlg.advanced_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="0" cellspacing="4">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
+                                                       <td><input id="id" name="id" type="text" value="" style="width: 200px" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="style">{#table_dlg.style}</label></td>\r
+                                                       <td><input type="text" id="style" name="style" value="" style="width: 200px;" onchange="changedStyle();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
+                                                       <td>\r
+                                                               <select id="dir" name="dir" style="width: 200px"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="ltr">{#table_dlg.ltr}</option> \r
+                                                                               <option value="rtl">{#table_dlg.rtl}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="lang">{#table_dlg.langcode}</label></td> \r
+                                                       <td>\r
+                                                               <input id="lang" name="lang" type="text" value="" style="width: 200px" />\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="backgroundimage" name="backgroundimage" type="text" value="" style="width: 200px" onchange="changedBackgroundImage();" /></td>\r
+                                                                               <td id="backgroundimagebrowsercontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>\r
+                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <div>\r
+                               <select id="action" name="action">\r
+                                       <option value="row">{#table_dlg.row_row}</option>\r
+                                       <option value="odd">{#table_dlg.row_odd}</option>\r
+                                       <option value="even">{#table_dlg.row_even}</option>\r
+                                       <option value="all">{#table_dlg.row_all}</option>\r
+                               </select>\r
+                       </div>\r
+\r
+                       <input type="submit" id="insert" name="insert" value="{#update}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+       </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/table/table.htm b/plugins/TinyMCE/js/plugins/table/table.htm
new file mode 100644 (file)
index 0000000..f269039
--- /dev/null
@@ -0,0 +1,187 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#table_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/validate.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/table.js"></script>\r
+       <link href="css/table.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body id="table" style="display: none">\r
+       <form onsubmit="insertTable();return false;" action="#">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#table_dlg.general_tab}</a></span></li>\r
+                               <li id="advanced_tab"><span><a href="javascript:mcTabs.displayTab('advanced_tab','advanced_panel');" onmousedown="return false;">{#table_dlg.advanced_tab}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <fieldset>\r
+                                       <legend>{#table_dlg.general_props}</legend>\r
+                                         <table border="0" cellpadding="4" cellspacing="0" width="100%">\r
+                                                         <tr>\r
+                                                               <td><label id="colslabel" for="cols">{#table_dlg.cols}</label></td>\r
+                                                               <td><input id="cols" name="cols" type="text" value="" size="3" maxlength="3" class="required number min1 mceFocus" /></td>\r
+                                                               <td><label id="rowslabel" for="rows">{#table_dlg.rows}</label></td>\r
+                                                               <td><input id="rows" name="rows" type="text" value="" size="3" maxlength="3" class="required number min1" /></td>\r
+                                                         </tr>\r
+                                                         <tr>\r
+                                                               <td><label id="cellpaddinglabel" for="cellpadding">{#table_dlg.cellpadding}</label></td>\r
+                                                               <td><input id="cellpadding" name="cellpadding" type="text" value="" size="3" maxlength="3" class="number" /></td>\r
+                                                               <td><label id="cellspacinglabel" for="cellspacing">{#table_dlg.cellspacing}</label></td>\r
+                                                               <td><input id="cellspacing" name="cellspacing" type="text" value="" size="3" maxlength="3" class="number" /></td>\r
+                                                         </tr>\r
+                                                         <tr>\r
+                                                               <td><label id="alignlabel" for="align">{#table_dlg.align}</label></td>\r
+                                                               <td><select id="align" name="align">\r
+                                                                       <option value="">{#not_set}</option>\r
+                                                                       <option value="center">{#table_dlg.align_middle}</option>\r
+                                                                       <option value="left">{#table_dlg.align_left}</option>\r
+                                                                       <option value="right">{#table_dlg.align_right}</option>\r
+                                                                 </select></td>\r
+                                                               <td><label id="borderlabel" for="border">{#table_dlg.border}</label></td>\r
+                                                               <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="changedBorder();" class="number" /></td>\r
+                                                         </tr>\r
+                                                         <tr id="width_row">\r
+                                                               <td><label id="widthlabel" for="width">{#table_dlg.width}</label></td>\r
+                                                               <td><input name="width" type="text" id="width" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>\r
+                                                               <td><label id="heightlabel" for="height">{#table_dlg.height}</label></td>\r
+                                                               <td><input name="height" type="text" id="height" value="" size="4" maxlength="4" onchange="changedSize();" class="size" /></td>\r
+                                                         </tr>\r
+                                                         <tr id="styleSelectRow">\r
+                                                               <td><label id="classlabel" for="class">{#class_name}</label></td>\r
+                                                               <td colspan="3">\r
+                                                                <select id="class" name="class" class="mceEditableSelect">\r
+                                                                       <option value="" selected="selected">{#not_set}</option>\r
+                                                                </select></td>\r
+                                                         </tr>\r
+                                                         <tr>\r
+                                                               <td class="column1"><label for="caption">{#table_dlg.caption}</label></td> \r
+                                                               <td><input id="caption" name="caption" type="checkbox" class="checkbox" value="true" /></td> \r
+                                                         </tr>\r
+                                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+\r
+                       <div id="advanced_panel" class="panel">\r
+                               <fieldset>\r
+                                       <legend>{#table_dlg.advanced_props}</legend>\r
+\r
+                                       <table border="0" cellpadding="0" cellspacing="4">\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="id">{#table_dlg.id}</label></td> \r
+                                                       <td><input id="id" name="id" type="text" value="" class="advfield" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="summary">{#table_dlg.summary}</label></td> \r
+                                                       <td><input id="summary" name="summary" type="text" value="" class="advfield" /></td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label for="style">{#table_dlg.style}</label></td>\r
+                                                       <td><input type="text" id="style" name="style" value="" class="advfield" onchange="changedStyle();" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label id="langlabel" for="lang">{#table_dlg.langcode}</label></td> \r
+                                                       <td>\r
+                                                               <input id="lang" name="lang" type="text" value="" class="advfield" />\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="backgroundimage">{#table_dlg.bgimage}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="backgroundimage" name="backgroundimage" type="text" value="" class="advfield" onchange="changedBackgroundImage();" /></td>\r
+                                                                               <td id="backgroundimagebrowsercontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="tframe">{#table_dlg.frame}</label></td> \r
+                                                       <td>\r
+                                                               <select id="tframe" name="tframe" class="advfield"> \r
+                                                                               <option value="">{#not_set}</option>\r
+                                                                               <option value="void">{#table_dlg.rules_void}</option>\r
+                                                                               <option value="above">{#table_dlg.rules_above}</option> \r
+                                                                               <option value="below">{#table_dlg.rules_below}</option> \r
+                                                                               <option value="hsides">{#table_dlg.rules_hsides}</option> \r
+                                                                               <option value="lhs">{#table_dlg.rules_lhs}</option> \r
+                                                                               <option value="rhs">{#table_dlg.rules_rhs}</option> \r
+                                                                               <option value="vsides">{#table_dlg.rules_vsides}</option> \r
+                                                                               <option value="box">{#table_dlg.rules_box}</option> \r
+                                                                               <option value="border">{#table_dlg.rules_border}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="rules">{#table_dlg.rules}</label></td> \r
+                                                       <td>\r
+                                                               <select id="rules" name="rules" class="advfield"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="none">{#table_dlg.frame_none}</option>\r
+                                                                               <option value="groups">{#table_dlg.frame_groups}</option>\r
+                                                                               <option value="rows">{#table_dlg.frame_rows}</option>\r
+                                                                               <option value="cols">{#table_dlg.frame_cols}</option>\r
+                                                                               <option value="all">{#table_dlg.frame_all}</option>\r
+                                                                       </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="dir">{#table_dlg.langdir}</label></td> \r
+                                                       <td>\r
+                                                               <select id="dir" name="dir" class="advfield"> \r
+                                                                               <option value="">{#not_set}</option> \r
+                                                                               <option value="ltr">{#table_dlg.ltr}</option> \r
+                                                                               <option value="rtl">{#table_dlg.rtl}</option> \r
+                                                               </select>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bordercolor">{#table_dlg.bordercolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bordercolor" name="bordercolor" type="text" value="" size="9" onchange="updateColor('bordercolor_pick','bordercolor');changedColor();" /></td>\r
+                                                                               <td id="bordercolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td class="column1"><label for="bgcolor">{#table_dlg.bgcolor}</label></td> \r
+                                                       <td>\r
+                                                               <table border="0" cellpadding="0" cellspacing="0">\r
+                                                                       <tr>\r
+                                                                               <td><input id="bgcolor" name="bgcolor" type="text" value="" size="9" onchange="updateColor('bgcolor_pick','bgcolor');changedColor();" /></td>\r
+                                                                               <td id="bgcolor_pickcontainer">&nbsp;</td>\r
+                                                                       </tr>\r
+                                                               </table>\r
+                                                       </td> \r
+                                               </tr>\r
+                                       </table>\r
+                               </fieldset>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+       </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/template/blank.htm b/plugins/TinyMCE/js/plugins/template/blank.htm
new file mode 100644 (file)
index 0000000..ecde53f
--- /dev/null
@@ -0,0 +1,12 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>blank_page</title>\r
+       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\r
+       <script type="text/javascript">\r
+               parent.TemplateDialog.loadCSSFiles(document);\r
+       </script>\r
+</head>\r
+<body id="mceTemplatePreview" class="mceContentBody">\r
+\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/template/css/template.css b/plugins/TinyMCE/js/plugins/template/css/template.css
new file mode 100644 (file)
index 0000000..2d23a49
--- /dev/null
@@ -0,0 +1,23 @@
+#frmbody {\r
+       padding: 10px;\r
+       background-color: #FFF;\r
+       border: 1px solid #CCC;\r
+}\r
+\r
+.frmRow {\r
+       margin-bottom: 10px;\r
+}\r
+\r
+#templatesrc {\r
+       border: none;\r
+       width: 320px;\r
+       height: 240px;\r
+}\r
+\r
+.title {\r
+       padding-bottom: 5px;\r
+}\r
+\r
+.mceActionPanel {\r
+       padding-top: 5px;\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/template/editor_plugin.js b/plugins/TinyMCE/js/plugins/template/editor_plugin.js
new file mode 100644 (file)
index 0000000..ebe3c27
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.each;tinymce.create("tinymce.plugins.TemplatePlugin",{init:function(b,c){var d=this;d.editor=b;b.addCommand("mceTemplate",function(e){b.windowManager.open({file:c+"/template.htm",width:b.getParam("template_popup_width",750),height:b.getParam("template_popup_height",600),inline:1},{plugin_url:c})});b.addCommand("mceInsertTemplate",d._insertTemplate,d);b.addButton("template",{title:"template.desc",cmd:"mceTemplate"});b.onPreProcess.add(function(e,g){var f=e.dom;a(f.select("div",g.node),function(h){if(f.hasClass(h,"mceTmpl")){a(f.select("*",h),function(i){if(f.hasClass(i,e.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){i.innerHTML=d._getDateTime(new Date(),e.getParam("template_mdate_format",e.getLang("template.mdate_format")))}});d._replaceVals(h)}})})},getInfo:function(){return{longname:"Template plugin",author:"Moxiecode Systems AB",authorurl:"http://www.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_insertTemplate:function(i,j){var k=this,g=k.editor,f,c,d=g.dom,b=g.selection.getContent();f=j.content;a(k.editor.getParam("template_replace_values"),function(l,h){if(typeof(l)!="function"){f=f.replace(new RegExp("\\{\\$"+h+"\\}","g"),l)}});c=d.create("div",null,f);n=d.select(".mceTmpl",c);if(n&&n.length>0){c=d.create("div",null);c.appendChild(n[0].cloneNode(true))}function e(l,h){return new RegExp("\\b"+h+"\\b","g").test(l.className)}a(d.select("*",c),function(h){if(e(h,g.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_cdate_format",g.getLang("template.cdate_format")))}if(e(h,g.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))){h.innerHTML=k._getDateTime(new Date(),g.getParam("template_mdate_format",g.getLang("template.mdate_format")))}if(e(h,g.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))){h.innerHTML=b}});k._replaceVals(c);g.execCommand("mceInsertContent",false,c.innerHTML);g.addVisual()},_replaceVals:function(c){var d=this.editor.dom,b=this.editor.getParam("template_replace_values");a(d.select("*",c),function(f){a(b,function(g,e){if(d.hasClass(f,e)){if(typeof(b[e])=="function"){b[e](f)}}})})},_getDateTime:function(e,b){if(!b){return""}function c(g,d){var f;g=""+g;if(g.length<d){for(f=0;f<(d-g.length);f++){g="0"+g}}return g}b=b.replace("%D","%m/%d/%y");b=b.replace("%r","%I:%M:%S %p");b=b.replace("%Y",""+e.getFullYear());b=b.replace("%y",""+e.getYear());b=b.replace("%m",c(e.getMonth()+1,2));b=b.replace("%d",c(e.getDate(),2));b=b.replace("%H",""+c(e.getHours(),2));b=b.replace("%M",""+c(e.getMinutes(),2));b=b.replace("%S",""+c(e.getSeconds(),2));b=b.replace("%I",""+((e.getHours()+11)%12+1));b=b.replace("%p",""+(e.getHours()<12?"AM":"PM"));b=b.replace("%B",""+this.editor.getLang("template_months_long").split(",")[e.getMonth()]);b=b.replace("%b",""+this.editor.getLang("template_months_short").split(",")[e.getMonth()]);b=b.replace("%A",""+this.editor.getLang("template_day_long").split(",")[e.getDay()]);b=b.replace("%a",""+this.editor.getLang("template_day_short").split(",")[e.getDay()]);b=b.replace("%%","%");return b}});tinymce.PluginManager.add("template",tinymce.plugins.TemplatePlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/template/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/template/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..9cac269
--- /dev/null
@@ -0,0 +1,159 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.plugins.TemplatePlugin', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceTemplate', function(ui) {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/template.htm',\r
+                                       width : ed.getParam('template_popup_width', 750),\r
+                                       height : ed.getParam('template_popup_height', 600),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceInsertTemplate', t._insertTemplate, t);\r
+\r
+                       // Register buttons\r
+                       ed.addButton('template', {title : 'template.desc', cmd : 'mceTemplate'});\r
+\r
+                       ed.onPreProcess.add(function(ed, o) {\r
+                               var dom = ed.dom;\r
+\r
+                               each(dom.select('div', o.node), function(e) {\r
+                                       if (dom.hasClass(e, 'mceTmpl')) {\r
+                                               each(dom.select('*', e), function(e) {\r
+                                                       if (dom.hasClass(e, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))\r
+                                                               e.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));\r
+                                               });\r
+\r
+                                               t._replaceVals(e);\r
+                                       }\r
+                               });\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Template plugin',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://www.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/template',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               _insertTemplate : function(ui, v) {\r
+                       var t = this, ed = t.editor, h, el, dom = ed.dom, sel = ed.selection.getContent();\r
+\r
+                       h = v.content;\r
+\r
+                       each(t.editor.getParam('template_replace_values'), function(v, k) {\r
+                               if (typeof(v) != 'function')\r
+                                       h = h.replace(new RegExp('\\{\\$' + k + '\\}', 'g'), v);\r
+                       });\r
+\r
+                       el = dom.create('div', null, h);\r
+\r
+                       // Find template element within div\r
+                       n = dom.select('.mceTmpl', el);\r
+                       if (n && n.length > 0) {\r
+                               el = dom.create('div', null);\r
+                               el.appendChild(n[0].cloneNode(true));\r
+                       }\r
+\r
+                       function hasClass(n, c) {\r
+                               return new RegExp('\\b' + c + '\\b', 'g').test(n.className);\r
+                       };\r
+\r
+                       each(dom.select('*', el), function(n) {\r
+                               // Replace cdate\r
+                               if (hasClass(n, ed.getParam('template_cdate_classes', 'cdate').replace(/\s+/g, '|')))\r
+                                       n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_cdate_format", ed.getLang("template.cdate_format")));\r
+\r
+                               // Replace mdate\r
+                               if (hasClass(n, ed.getParam('template_mdate_classes', 'mdate').replace(/\s+/g, '|')))\r
+                                       n.innerHTML = t._getDateTime(new Date(), ed.getParam("template_mdate_format", ed.getLang("template.mdate_format")));\r
+\r
+                               // Replace selection\r
+                               if (hasClass(n, ed.getParam('template_selected_content_classes', 'selcontent').replace(/\s+/g, '|')))\r
+                                       n.innerHTML = sel;\r
+                       });\r
+\r
+                       t._replaceVals(el);\r
+\r
+                       ed.execCommand('mceInsertContent', false, el.innerHTML);\r
+                       ed.addVisual();\r
+               },\r
+\r
+               _replaceVals : function(e) {\r
+                       var dom = this.editor.dom, vl = this.editor.getParam('template_replace_values');\r
+\r
+                       each(dom.select('*', e), function(e) {\r
+                               each(vl, function(v, k) {\r
+                                       if (dom.hasClass(e, k)) {\r
+                                               if (typeof(vl[k]) == 'function')\r
+                                                       vl[k](e);\r
+                                       }\r
+                               });\r
+                       });\r
+               },\r
+\r
+               _getDateTime : function(d, fmt) {\r
+                               if (!fmt)\r
+                                       return "";\r
+\r
+                               function addZeros(value, len) {\r
+                                       var i;\r
+\r
+                                       value = "" + value;\r
+\r
+                                       if (value.length < len) {\r
+                                               for (i=0; i<(len-value.length); i++)\r
+                                                       value = "0" + value;\r
+                                       }\r
+\r
+                                       return value;\r
+                               }\r
+\r
+                               fmt = fmt.replace("%D", "%m/%d/%y");\r
+                               fmt = fmt.replace("%r", "%I:%M:%S %p");\r
+                               fmt = fmt.replace("%Y", "" + d.getFullYear());\r
+                               fmt = fmt.replace("%y", "" + d.getYear());\r
+                               fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
+                               fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
+                               fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
+                               fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
+                               fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
+                               fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
+                               fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
+                               fmt = fmt.replace("%B", "" + this.editor.getLang("template_months_long").split(',')[d.getMonth()]);\r
+                               fmt = fmt.replace("%b", "" + this.editor.getLang("template_months_short").split(',')[d.getMonth()]);\r
+                               fmt = fmt.replace("%A", "" + this.editor.getLang("template_day_long").split(',')[d.getDay()]);\r
+                               fmt = fmt.replace("%a", "" + this.editor.getLang("template_day_short").split(',')[d.getDay()]);\r
+                               fmt = fmt.replace("%%", "%");\r
+\r
+                               return fmt;\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('template', tinymce.plugins.TemplatePlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/template/js/template.js b/plugins/TinyMCE/js/plugins/template/js/template.js
new file mode 100644 (file)
index 0000000..24045d7
--- /dev/null
@@ -0,0 +1,106 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var TemplateDialog = {\r
+       preInit : function() {\r
+               var url = tinyMCEPopup.getParam("template_external_list_url");\r
+\r
+               if (url != null)\r
+                       document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></sc'+'ript>');\r
+       },\r
+\r
+       init : function() {\r
+               var ed = tinyMCEPopup.editor, tsrc, sel, x, u;\r
+\r
+               tsrc = ed.getParam("template_templates", false);\r
+               sel = document.getElementById('tpath');\r
+\r
+               // Setup external template list\r
+               if (!tsrc && typeof(tinyMCETemplateList) != 'undefined') {\r
+                       for (x=0, tsrc = []; x<tinyMCETemplateList.length; x++)\r
+                               tsrc.push({title : tinyMCETemplateList[x][0], src : tinyMCETemplateList[x][1], description : tinyMCETemplateList[x][2]});\r
+               }\r
+\r
+               for (x=0; x<tsrc.length; x++)\r
+                       sel.options[sel.options.length] = new Option(tsrc[x].title, tinyMCEPopup.editor.documentBaseURI.toAbsolute(tsrc[x].src));\r
+\r
+               this.resize();\r
+               this.tsrc = tsrc;\r
+       },\r
+\r
+       resize : function() {\r
+               var w, h, e;\r
+\r
+               if (!self.innerWidth) {\r
+                       w = document.body.clientWidth - 50;\r
+                       h = document.body.clientHeight - 160;\r
+               } else {\r
+                       w = self.innerWidth - 50;\r
+                       h = self.innerHeight - 170;\r
+               }\r
+\r
+               e = document.getElementById('templatesrc');\r
+\r
+               if (e) {\r
+                       e.style.height = Math.abs(h) + 'px';\r
+                       e.style.width  = Math.abs(w - 5) + 'px';\r
+               }\r
+       },\r
+\r
+       loadCSSFiles : function(d) {\r
+               var ed = tinyMCEPopup.editor;\r
+\r
+               tinymce.each(ed.getParam("content_css", '').split(','), function(u) {\r
+                       d.write('<link href="' + ed.documentBaseURI.toAbsolute(u) + '" rel="stylesheet" type="text/css" />');\r
+               });\r
+       },\r
+\r
+       selectTemplate : function(u, ti) {\r
+               var d = window.frames['templatesrc'].document, x, tsrc = this.tsrc;\r
+\r
+               if (!u)\r
+                       return;\r
+\r
+               d.body.innerHTML = this.templateHTML = this.getFileContents(u);\r
+\r
+               for (x=0; x<tsrc.length; x++) {\r
+                       if (tsrc[x].title == ti)\r
+                               document.getElementById('tmpldesc').innerHTML = tsrc[x].description || '';\r
+               }\r
+       },\r
+\r
+       insert : function() {\r
+               tinyMCEPopup.execCommand('mceInsertTemplate', false, {\r
+                       content : this.templateHTML,\r
+                       selection : tinyMCEPopup.editor.selection.getContent()\r
+               });\r
+\r
+               tinyMCEPopup.close();\r
+       },\r
+\r
+       getFileContents : function(u) {\r
+               var x, d, t = 'text/plain';\r
+\r
+               function g(s) {\r
+                       x = 0;\r
+\r
+                       try {\r
+                               x = new ActiveXObject(s);\r
+                       } catch (s) {\r
+                       }\r
+\r
+                       return x;\r
+               };\r
+\r
+               x = window.ActiveXObject ? g('Msxml2.XMLHTTP') || g('Microsoft.XMLHTTP') : new XMLHttpRequest();\r
+\r
+               // Synchronous AJAX load file\r
+               x.overrideMimeType && x.overrideMimeType(t);\r
+               x.open("GET", u, false);\r
+               x.send(null);\r
+\r
+               return x.responseText;\r
+       }\r
+};\r
+\r
+TemplateDialog.preInit();\r
+tinyMCEPopup.onInit.add(TemplateDialog.init, TemplateDialog);\r
diff --git a/plugins/TinyMCE/js/plugins/template/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/template/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..2471c3f
--- /dev/null
@@ -0,0 +1,15 @@
+tinyMCE.addI18n('en.template_dlg',{\r
+title:"Templates",\r
+label:"Template",\r
+desc_label:"Description",\r
+desc:"Insert predefined template content",\r
+select:"Select a template",\r
+preview:"Preview",\r
+warning:"Warning: Updating a template with a different one may cause data loss.",\r
+mdate_format:"%Y-%m-%d %H:%M:%S",\r
+cdate_format:"%Y-%m-%d %H:%M:%S",\r
+months_long:"January,February,March,April,May,June,July,August,September,October,November,December",\r
+months_short:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",\r
+day_long:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday",\r
+day_short:"Sun,Mon,Tue,Wed,Thu,Fri,Sat,Sun"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/template/template.htm b/plugins/TinyMCE/js/plugins/template/template.htm
new file mode 100644 (file)
index 0000000..b2182e6
--- /dev/null
@@ -0,0 +1,31 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#template_dlg.title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/template.js"></script>\r
+       <link href="css/template.css" rel="stylesheet" type="text/css" />\r
+</head>\r
+<body onresize="TemplateDialog.resize();"> \r
+       <form onsubmit="TemplateDialog.insert();return false;">\r
+               <div id="frmbody">\r
+                       <div class="title">{#template_dlg.desc}</div>\r
+                       <div class="frmRow"><label for="tpath" title="{#template_dlg.select}">{#template_dlg.label}:</label>\r
+                       <select id="tpath" name="tpath" onchange="TemplateDialog.selectTemplate(this.options[this.selectedIndex].value, this.options[this.selectedIndex].text);" class="mceFocus">\r
+                               <option value="">{#template_dlg.select}...</option>\r
+                       </select>\r
+                       <span id="warning"></span></div>\r
+                       <div class="frmRow"><label for="tdesc">{#template_dlg.desc_label}:</label>\r
+                       <span id="tmpldesc"></span></div>\r
+                       <fieldset>\r
+                               <legend>{#template_dlg.preview}</legend>\r
+                               <iframe id="templatesrc" name="templatesrc" src="blank.htm" width="690" height="400" frameborder="0"></iframe>\r
+                       </fieldset>\r
+               </div>\r
+               \r
+               <div class="mceActionPanel">\r
+                       <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+                       <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+       </form>\r
+</body> \r
+</html> \r
diff --git a/plugins/TinyMCE/js/plugins/visualchars/editor_plugin.js b/plugins/TinyMCE/js/plugins/visualchars/editor_plugin.js
new file mode 100644 (file)
index 0000000..94719f9
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.VisualChars",{init:function(a,b){var c=this;c.editor=a;a.addCommand("mceVisualChars",c._toggleVisualChars,c);a.addButton("visualchars",{title:"visualchars.desc",cmd:"mceVisualChars"});a.onBeforeGetContent.add(function(d,e){if(c.state&&e.format!="raw"&&!e.draft){c.state=true;c._toggleVisualChars(false)}})},getInfo:function(){return{longname:"Visual characters",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars",version:tinymce.majorVersion+"."+tinymce.minorVersion}},_toggleVisualChars:function(m){var p=this,k=p.editor,a,g,j,n=k.getDoc(),o=k.getBody(),l,q=k.selection,e,c,f;p.state=!p.state;k.controlManager.setActive("visualchars",p.state);if(m){f=q.getBookmark()}if(p.state){a=[];tinymce.walk(o,function(b){if(b.nodeType==3&&b.nodeValue&&b.nodeValue.indexOf("\u00a0")!=-1){a.push(b)}},"childNodes");for(g=0;g<a.length;g++){l=a[g].nodeValue;l=l.replace(/(\u00a0)/g,'<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');c=k.dom.create("div",null,l);while(node=c.lastChild){k.dom.insertAfter(node,a[g])}k.dom.remove(a[g])}}else{a=k.dom.select("span.mceItemNbsp",o);for(g=a.length-1;g>=0;g--){k.dom.remove(a[g],1)}}q.moveToBookmark(f)}});tinymce.PluginManager.add("visualchars",tinymce.plugins.VisualChars)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/visualchars/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/visualchars/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..35856e2
--- /dev/null
@@ -0,0 +1,83 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.VisualChars', {\r
+               init : function(ed, url) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+\r
+                       // Register commands\r
+                       ed.addCommand('mceVisualChars', t._toggleVisualChars, t);\r
+\r
+                       // Register buttons\r
+                       ed.addButton('visualchars', {title : 'visualchars.desc', cmd : 'mceVisualChars'});\r
+\r
+                       ed.onBeforeGetContent.add(function(ed, o) {\r
+                               if (t.state && o.format != 'raw' && !o.draft) {\r
+                                       t.state = true;\r
+                                       t._toggleVisualChars(false);\r
+                               }\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Visual characters',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/visualchars',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _toggleVisualChars : function(bookmark) {\r
+                       var t = this, ed = t.editor, nl, i, h, d = ed.getDoc(), b = ed.getBody(), nv, s = ed.selection, bo, div, bm;\r
+\r
+                       t.state = !t.state;\r
+                       ed.controlManager.setActive('visualchars', t.state);\r
+\r
+                       if (bookmark)\r
+                               bm = s.getBookmark();\r
+\r
+                       if (t.state) {\r
+                               nl = [];\r
+                               tinymce.walk(b, function(n) {\r
+                                       if (n.nodeType == 3 && n.nodeValue && n.nodeValue.indexOf('\u00a0') != -1)\r
+                                               nl.push(n);\r
+                               }, 'childNodes');\r
+\r
+                               for (i = 0; i < nl.length; i++) {\r
+                                       nv = nl[i].nodeValue;\r
+                                       nv = nv.replace(/(\u00a0)/g, '<span _mce_bogus="1" class="mceItemHidden mceItemNbsp">$1</span>');\r
+\r
+                                       div = ed.dom.create('div', null, nv);\r
+                                       while (node = div.lastChild)\r
+                                               ed.dom.insertAfter(node, nl[i]);\r
+\r
+                                       ed.dom.remove(nl[i]);\r
+                               }\r
+                       } else {\r
+                               nl = ed.dom.select('span.mceItemNbsp', b);\r
+\r
+                               for (i = nl.length - 1; i >= 0; i--)\r
+                                       ed.dom.remove(nl[i], 1);\r
+                       }\r
+\r
+                       s.moveToBookmark(bm);\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('visualchars', tinymce.plugins.VisualChars);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/wordcount/editor_plugin.js b/plugins/TinyMCE/js/plugins/wordcount/editor_plugin.js
new file mode 100644 (file)
index 0000000..a099e6a
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.WordCount",{block:0,id:null,countre:null,cleanre:null,init:function(a,b){var c=this,d=0;c.countre=a.getParam("wordcount_countregex",/\S\s+/g);c.cleanre=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g);c.id=a.id+"-word-count";a.onPostRender.add(function(f,e){var g,h;h=f.getParam("wordcount_target_id");if(!h){g=tinymce.DOM.get(f.id+"_path_row");if(g){tinymce.DOM.add(g.parentNode,"div",{style:"float: right"},f.getLang("wordcount.words","Words: ")+'<span id="'+c.id+'">0</span>')}}else{tinymce.DOM.add(h,"span",{},'<span id="'+c.id+'">0</span>')}});a.onInit.add(function(e){e.selection.onSetContent.add(function(){c._count(e)});c._count(e)});a.onSetContent.add(function(e){c._count(e)});a.onKeyUp.add(function(f,g){if(g.keyCode==d){return}if(13==g.keyCode||8==d||46==d){c._count(f)}d=g.keyCode})},_count:function(b){var c=this,a=0;if(c.block){return}c.block=1;setTimeout(function(){var d=b.getContent({format:"raw"});if(d){d=d.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ");d=d.replace(c.cleanre,"");d.replace(c.countre,function(){a++})}tinymce.DOM.setHTML(c.id,a.toString());setTimeout(function(){c.block=0},2000)},1)},getInfo:function(){return{longname:"Word Count plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("wordcount",tinymce.plugins.WordCount)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/wordcount/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/wordcount/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..5cb92fa
--- /dev/null
@@ -0,0 +1,98 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+    tinymce.create('tinymce.plugins.WordCount', {\r
+               block : 0,\r
+               id : null,\r
+               countre : null,\r
+               cleanre : null,\r
+\r
+               init : function(ed, url) {\r
+                       var t = this, last = 0;\r
+\r
+                       t.countre = ed.getParam('wordcount_countregex', /\S\s+/g);\r
+                       t.cleanre = ed.getParam('wordcount_cleanregex', /[0-9.(),;:!?%#$¿'"_+=\\\/-]*/g);\r
+                       t.id = ed.id + '-word-count';\r
+\r
+                       ed.onPostRender.add(function(ed, cm) {\r
+                               var row, id;\r
+\r
+                               // Add it to the specified id or the theme advanced path\r
+                               id = ed.getParam('wordcount_target_id');\r
+                               if (!id) {\r
+                                       row = tinymce.DOM.get(ed.id + '_path_row');\r
+\r
+                                       if (row)\r
+                                               tinymce.DOM.add(row.parentNode, 'div', {'style': 'float: right'}, ed.getLang('wordcount.words', 'Words: ') + '<span id="' + t.id + '">0</span>');\r
+                               } else\r
+                                       tinymce.DOM.add(id, 'span', {}, '<span id="' + t.id + '">0</span>');\r
+                       });\r
+\r
+            ed.onInit.add(function(ed) {\r
+                               ed.selection.onSetContent.add(function() {\r
+                                       t._count(ed);\r
+                               });\r
+\r
+                               t._count(ed);\r
+                       });\r
+\r
+                       ed.onSetContent.add(function(ed) {\r
+                               t._count(ed);\r
+                       });\r
+\r
+                       ed.onKeyUp.add(function(ed, e) {\r
+                               if (e.keyCode == last)\r
+                                       return;\r
+\r
+                               if (13 == e.keyCode || 8 == last || 46 == last)\r
+                                       t._count(ed);\r
+\r
+                               last = e.keyCode;\r
+                       });\r
+               },\r
+\r
+               _count : function(ed) {\r
+                       var t = this, tc = 0;\r
+\r
+                       // Keep multiple calls from happening at the same time\r
+                       if (t.block)\r
+                               return;\r
+\r
+                       t.block = 1;\r
+\r
+                       setTimeout(function() {\r
+                               var tx = ed.getContent({format : 'raw'});\r
+\r
+                               if (tx) {\r
+                                       tx = tx.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' '); // remove html tags and space chars\r
+                                       tx = tx.replace(t.cleanre, ''); // remove numbers and punctuation\r
+                                       tx.replace(t.countre, function() {tc++;}); // count the words\r
+                               }\r
+\r
+                               tinymce.DOM.setHTML(t.id, tc.toString());\r
+\r
+                               setTimeout(function() {t.block = 0;}, 2000);\r
+                       }, 1);\r
+               },\r
+\r
+        getInfo: function() {\r
+                       return {\r
+                               longname : 'Word Count plugin',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/wordcount',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+        }\r
+    });\r
+\r
+    tinymce.PluginManager.add('wordcount', tinymce.plugins.WordCount);\r
+})();\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/abbr.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/abbr.htm
new file mode 100644 (file)
index 0000000..3aeac0d
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#xhtmlxtras_dlg.title_abbr_element}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/element_common.js"></script>\r
+       <script type="text/javascript" src="js/abbr.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertAbbr();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+                                               <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="class" name="class" class="field mceEditableSelect">\r
+                                                               <option value="">{#not_set}</option> \r
+                                                       </select>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="dir" name="dir" class="field"> \r
+                                                               <option value="">{#not_set}</option> \r
+                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+                                                       </select>\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+                                               <td>\r
+                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
+                                               </td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+               <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
+                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
+                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAbbr();" style="display: none;" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/acronym.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/acronym.htm
new file mode 100644 (file)
index 0000000..31ee7b7
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#xhtmlxtras_dlg.title_acronym_element}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/element_common.js"></script>\r
+       <script type="text/javascript" src="js/acronym.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertAcronym();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+                                               <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="class" name="class" class="field mceEditableSelect">\r
+                                                               <option value="">{#not_set}</option> \r
+                                                       </select>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="dir" name="dir" class="field"> \r
+                                                               <option value="">{#not_set}</option> \r
+                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+                                                       </select>\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+                                               <td>\r
+                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
+                                               </td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+               <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
+                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
+                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeAcronym();" style="display: none;" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/attributes.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/attributes.htm
new file mode 100644 (file)
index 0000000..17054da
--- /dev/null
@@ -0,0 +1,148 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#xhtmlxtras_dlg.attribs_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="js/attributes.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/attributes.css" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertAction();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_attrib_tab}</a></span></li>\r
+                       <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.attribute_events_tab}</a></span></li>\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.attribute_attrib_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+                                               <td><input id="title" name="title" type="text" value="" class="mceFocus" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+                                               <td><input id="id" name="id" type="text" value="" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td><label id="classlabel" for="classlist">{#class_name}</label></td>\r
+                                               <td>\r
+                                                       <select id="classlist" name="classlist" class="mceEditableSelect">\r
+                                                               <option value="" selected="selected">{#not_set}</option>\r
+                                                       </select>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="stylelabel" for="style">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+                                               <td><input id="style" name="style" type="text" value="" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="dir" name="dir"> \r
+                                                               <option value="">{#not_set}</option> \r
+                                                               <option value="ltr">{#xhtmlxtras_dlg.option_ltr}</option> \r
+                                                               <option value="rtl">{#xhtmlxtras_dlg.option_rtl}</option> \r
+                                                       </select>\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+                                               <td>\r
+                                                       <input id="lang" name="lang" type="text" value="" />\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                                       <td><label id="tabindexlabel" for="tabindex">{#xhtmlxtras_dlg.attribute_label_tabindex}</label></td>\r
+                                                       <td><input type="text" id="tabindex" name="tabindex" value="" /></td>\r
+                                               </tr>\r
+\r
+                                               <tr>\r
+                                                       <td><label id="accesskeylabel" for="accesskey">{#xhtmlxtras_dlg.attribute_label_accesskey}</label></td>\r
+                                                       <td><input type="text" id="accesskey" name="accesskey" value="" /></td>\r
+                                               </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+               <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.attribute_events_tab}</legend>\r
+\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+                                               <td><input id="onfocus" name="onfocus" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
+                                               <td><input id="onblur" name="onblur" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
+                                               <td><input id="onclick" name="onclick" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/cite.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/cite.htm
new file mode 100644 (file)
index 0000000..d0a3e3a
--- /dev/null
@@ -0,0 +1,141 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#xhtmlxtras_dlg.title_cite_element}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/element_common.js"></script>\r
+       <script type="text/javascript" src="js/cite.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="insertCite();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+                                               <td><input id="title" name="title" type="text" value="" class="field mceFocus" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="class" name="class" class="field mceEditableSelect">\r
+                                                               <option value="">{#not_set}</option> \r
+                                                       </select>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="dir" name="dir" class="field"> \r
+                                                               <option value="">{#not_set}</option> \r
+                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+                                                       </select>\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+                                               <td>\r
+                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
+                                               </td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+               <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
+                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
+                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeCite();" style="display: none;" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/css/attributes.css b/plugins/TinyMCE/js/plugins/xhtmlxtras/css/attributes.css
new file mode 100644 (file)
index 0000000..9a6a235
--- /dev/null
@@ -0,0 +1,11 @@
+.panel_wrapper div.current {\r
+       height: 290px;\r
+}\r
+\r
+#id, #style, #title, #dir, #hreflang, #lang, #classlist, #tabindex, #accesskey {\r
+       width: 200px;\r
+}\r
+\r
+#events_panel input {\r
+       width: 200px;\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/css/popup.css b/plugins/TinyMCE/js/plugins/xhtmlxtras/css/popup.css
new file mode 100644 (file)
index 0000000..e67114d
--- /dev/null
@@ -0,0 +1,9 @@
+input.field, select.field {width:200px;}\r
+input.picker {width:179px; margin-left: 5px;}\r
+input.disabled {border-color:#F2F2F2;}\r
+img.picker {vertical-align:text-bottom; cursor:pointer;}\r
+h1 {padding: 0 0 5px 0;}\r
+.panel_wrapper div.current {height:160px;}\r
+#xhtmlxtrasdel .panel_wrapper div.current, #xhtmlxtrasins .panel_wrapper div.current {height: 230px;}\r
+a.browse span {display:block; width:20px; height:20px; background:url('../../../themes/advanced/img/icons.gif') -140px -20px;}\r
+#datetime {width:180px;}\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/del.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/del.htm
new file mode 100644 (file)
index 0000000..8b07fa8
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#xhtmlxtras_dlg.title_del_element}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/element_common.js"></script>\r
+       <script type="text/javascript" src="js/del.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+</head>\r
+<body id="xhtmlxtrasins" style="display: none">\r
+<form onsubmit="insertDel();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td>\r
+                                               <td>\r
+                                                       <table border="0" cellspacing="0" cellpadding="0">\r
+                                                               <tr> \r
+                                                                       <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
+                                                                       <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
+                                                               </tr>\r
+                                                       </table>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td>\r
+                                               <td><input id="cite" name="cite" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+                                               <td><input id="title" name="title" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="class" name="class" class="field mceEditableSelect">\r
+                                                               <option value="">{#not_set}</option> \r
+                                                       </select>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="dir" name="dir" class="field"> \r
+                                                               <option value="">{#not_set}</option> \r
+                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+                                                       </select>\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+                                               <td>\r
+                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
+                                               </td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+               <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
+                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
+                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeDel();" style="display: none;" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin.js
new file mode 100644 (file)
index 0000000..a9393ad
--- /dev/null
@@ -0,0 +1 @@
+(function(){tinymce.create("tinymce.plugins.XHTMLXtrasPlugin",{init:function(a,b){a.addCommand("mceCite",function(){a.windowManager.open({file:b+"/cite.htm",width:350+parseInt(a.getLang("xhtmlxtras.cite_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.cite_delta_height",0)),inline:1},{plugin_url:b})});a.addCommand("mceAcronym",function(){a.windowManager.open({file:b+"/acronym.htm",width:350+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.acronym_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAbbr",function(){a.windowManager.open({file:b+"/abbr.htm",width:350+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),height:250+parseInt(a.getLang("xhtmlxtras.abbr_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceDel",function(){a.windowManager.open({file:b+"/del.htm",width:340+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.del_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceIns",function(){a.windowManager.open({file:b+"/ins.htm",width:340+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),height:310+parseInt(a.getLang("xhtmlxtras.ins_delta_width",0)),inline:1},{plugin_url:b})});a.addCommand("mceAttributes",function(){a.windowManager.open({file:b+"/attributes.htm",width:380,height:370,inline:1},{plugin_url:b})});a.addButton("cite",{title:"xhtmlxtras.cite_desc",cmd:"mceCite"});a.addButton("acronym",{title:"xhtmlxtras.acronym_desc",cmd:"mceAcronym"});a.addButton("abbr",{title:"xhtmlxtras.abbr_desc",cmd:"mceAbbr"});a.addButton("del",{title:"xhtmlxtras.del_desc",cmd:"mceDel"});a.addButton("ins",{title:"xhtmlxtras.ins_desc",cmd:"mceIns"});a.addButton("attribs",{title:"xhtmlxtras.attribs_desc",cmd:"mceAttributes"});a.onNodeChange.add(function(d,c,f,e){f=d.dom.getParent(f,"CITE,ACRONYM,ABBR,DEL,INS");c.setDisabled("cite",e);c.setDisabled("acronym",e);c.setDisabled("abbr",e);c.setDisabled("del",e);c.setDisabled("ins",e);c.setDisabled("attribs",f&&f.nodeName=="BODY");c.setActive("cite",0);c.setActive("acronym",0);c.setActive("abbr",0);c.setActive("del",0);c.setActive("ins",0);if(f){do{c.setDisabled(f.nodeName.toLowerCase(),0);c.setActive(f.nodeName.toLowerCase(),1)}while(f=f.parentNode)}});a.onPreInit.add(function(){a.dom.create("abbr")})},getInfo:function(){return{longname:"XHTML Xtras Plugin",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",infourl:"http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.PluginManager.add("xhtmlxtras",tinymce.plugins.XHTMLXtrasPlugin)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin_src.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/editor_plugin_src.js
new file mode 100644 (file)
index 0000000..5f9d9bd
--- /dev/null
@@ -0,0 +1,132 @@
+/**\r
+ * editor_plugin_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       tinymce.create('tinymce.plugins.XHTMLXtrasPlugin', {\r
+               init : function(ed, url) {\r
+                       // Register commands\r
+                       ed.addCommand('mceCite', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/cite.htm',\r
+                                       width : 350 + parseInt(ed.getLang('xhtmlxtras.cite_delta_width', 0)),\r
+                                       height : 250 + parseInt(ed.getLang('xhtmlxtras.cite_delta_height', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceAcronym', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/acronym.htm',\r
+                                       width : 350 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),\r
+                                       height : 250 + parseInt(ed.getLang('xhtmlxtras.acronym_delta_width', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceAbbr', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/abbr.htm',\r
+                                       width : 350 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),\r
+                                       height : 250 + parseInt(ed.getLang('xhtmlxtras.abbr_delta_width', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceDel', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/del.htm',\r
+                                       width : 340 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),\r
+                                       height : 310 + parseInt(ed.getLang('xhtmlxtras.del_delta_width', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceIns', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/ins.htm',\r
+                                       width : 340 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),\r
+                                       height : 310 + parseInt(ed.getLang('xhtmlxtras.ins_delta_width', 0)),\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       ed.addCommand('mceAttributes', function() {\r
+                               ed.windowManager.open({\r
+                                       file : url + '/attributes.htm',\r
+                                       width : 380,\r
+                                       height : 370,\r
+                                       inline : 1\r
+                               }, {\r
+                                       plugin_url : url\r
+                               });\r
+                       });\r
+\r
+                       // Register buttons\r
+                       ed.addButton('cite', {title : 'xhtmlxtras.cite_desc', cmd : 'mceCite'});\r
+                       ed.addButton('acronym', {title : 'xhtmlxtras.acronym_desc', cmd : 'mceAcronym'});\r
+                       ed.addButton('abbr', {title : 'xhtmlxtras.abbr_desc', cmd : 'mceAbbr'});\r
+                       ed.addButton('del', {title : 'xhtmlxtras.del_desc', cmd : 'mceDel'});\r
+                       ed.addButton('ins', {title : 'xhtmlxtras.ins_desc', cmd : 'mceIns'});\r
+                       ed.addButton('attribs', {title : 'xhtmlxtras.attribs_desc', cmd : 'mceAttributes'});\r
+\r
+                       ed.onNodeChange.add(function(ed, cm, n, co) {\r
+                               n = ed.dom.getParent(n, 'CITE,ACRONYM,ABBR,DEL,INS');\r
+\r
+                               cm.setDisabled('cite', co);\r
+                               cm.setDisabled('acronym', co);\r
+                               cm.setDisabled('abbr', co);\r
+                               cm.setDisabled('del', co);\r
+                               cm.setDisabled('ins', co);\r
+                               cm.setDisabled('attribs', n && n.nodeName == 'BODY');\r
+                               cm.setActive('cite', 0);\r
+                               cm.setActive('acronym', 0);\r
+                               cm.setActive('abbr', 0);\r
+                               cm.setActive('del', 0);\r
+                               cm.setActive('ins', 0);\r
+\r
+                               // Activate all\r
+                               if (n) {\r
+                                       do {\r
+                                               cm.setDisabled(n.nodeName.toLowerCase(), 0);\r
+                                               cm.setActive(n.nodeName.toLowerCase(), 1);\r
+                                       } while (n = n.parentNode);\r
+                               }\r
+                       });\r
+\r
+                       ed.onPreInit.add(function() {\r
+                               // Fixed IE issue where it can't handle these elements correctly\r
+                               ed.dom.create('abbr');\r
+                       });\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'XHTML Xtras Plugin',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/xhtmlxtras',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       };\r
+               }\r
+       });\r
+\r
+       // Register plugin\r
+       tinymce.PluginManager.add('xhtmlxtras', tinymce.plugins.XHTMLXtrasPlugin);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/ins.htm b/plugins/TinyMCE/js/plugins/xhtmlxtras/ins.htm
new file mode 100644 (file)
index 0000000..6c5470c
--- /dev/null
@@ -0,0 +1,161 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#xhtmlxtras_dlg.title_ins_element}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/editable_selects.js"></script>\r
+       <script type="text/javascript" src="js/element_common.js"></script>\r
+       <script type="text/javascript" src="js/ins.js"></script>\r
+       <link rel="stylesheet" type="text/css" href="css/popup.css" />\r
+</head>\r
+<body id="xhtmlxtrasins" style="display: none">\r
+<form onsubmit="insertIns();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.general_tab}</a></span></li>\r
+                       <!-- <li id="events_tab"><span><a href="javascript:mcTabs.displayTab('events_tab','events_panel');" onmousedown="return false;">{#xhtmlxtras_dlg.events_tab}</a></span></li> -->\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_general_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="datetimelabel" for="datetime">{#xhtmlxtras_dlg.attribute_label_datetime}</label>:</td> \r
+                                               <td>\r
+                                                       <table border="0" cellspacing="0" cellpadding="0">\r
+                                                               <tr> \r
+                                                                       <td><input id="datetime" name="datetime" type="text" value="" maxlength="19" class="field mceFocus" /></td> \r
+                                                                       <td><a href="javascript:insertDateTime('datetime');" onmousedown="return false;" class="browse"><span class="datetime" title="{#xhtmlxtras_dlg.insert_date}"></span></a></td>\r
+                                                               </tr>\r
+                                                       </table>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="citelabel" for="cite">{#xhtmlxtras_dlg.attribute_label_cite}</label>:</td> \r
+                                               <td><input id="cite" name="cite" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_attrib_tab}</legend>\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label id="titlelabel" for="title">{#xhtmlxtras_dlg.attribute_label_title}</label>:</td> \r
+                                               <td><input id="title" name="title" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="idlabel" for="id">{#xhtmlxtras_dlg.attribute_label_id}</label>:</td> \r
+                                               <td><input id="id" name="id" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="classlabel" for="class">{#xhtmlxtras_dlg.attribute_label_class}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="class" name="class" class="field mceEditableSelect">\r
+                                                               <option value="">{#not_set}</option> \r
+                                                       </select>\r
+                                               </td>\r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="stylelabel" for="class">{#xhtmlxtras_dlg.attribute_label_style}</label>:</td> \r
+                                               <td><input id="style" name="style" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="dirlabel" for="dir">{#xhtmlxtras_dlg.attribute_label_langdir}</label>:</td> \r
+                                               <td>\r
+                                                       <select id="dir" name="dir" class="field"> \r
+                                                               <option value="">{#not_set}</option> \r
+                                                               <option value="ltr">{#xhtmlxtras_dlg.attribute_option_ltr}</option> \r
+                                                               <option value="rtl">{#xhtmlxtras_dlg.attribute_option_rtl}</option> \r
+                                                       </select>\r
+                                               </td> \r
+                                       </tr>\r
+                                       <tr>\r
+                                               <td class="label"><label id="langlabel" for="lang">{#xhtmlxtras_dlg.attribute_label_langcode}</label>:</td> \r
+                                               <td>\r
+                                                       <input id="lang" name="lang" type="text" value="" class="field" />\r
+                                               </td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+               <div id="events_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#xhtmlxtras_dlg.fieldset_events_tab}</legend>\r
+\r
+                               <table border="0" cellpadding="0" cellspacing="4">\r
+                                       <tr>\r
+                                               <td class="label"><label for="onfocus">onfocus</label>:</td> \r
+                                               <td><input id="onfocus" name="onfocus" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onblur">onblur</label>:</td> \r
+                                               <td><input id="onblur" name="onblur" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onclick">onclick</label>:</td> \r
+                                               <td><input id="onclick" name="onclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="ondblclick">ondblclick</label>:</td> \r
+                                               <td><input id="ondblclick" name="ondblclick" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousedown">onmousedown</label>:</td> \r
+                                               <td><input id="onmousedown" name="onmousedown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseup">onmouseup</label>:</td> \r
+                                               <td><input id="onmouseup" name="onmouseup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseover">onmouseover</label>:</td> \r
+                                               <td><input id="onmouseover" name="onmouseover" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmousemove">onmousemove</label>:</td> \r
+                                               <td><input id="onmousemove" name="onmousemove" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onmouseout">onmouseout</label>:</td> \r
+                                               <td><input id="onmouseout" name="onmouseout" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeypress">onkeypress</label>:</td> \r
+                                               <td><input id="onkeypress" name="onkeypress" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeydown">onkeydown</label>:</td> \r
+                                               <td><input id="onkeydown" name="onkeydown" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+\r
+                                       <tr>\r
+                                               <td class="label"><label for="onkeyup">onkeyup</label>:</td> \r
+                                               <td><input id="onkeyup" name="onkeyup" type="text" value="" class="field" /></td> \r
+                                       </tr>\r
+                               </table>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="remove" name="remove" class="button" value="{#xhtmlxtras_dlg.remove}" onclick="removeIns();" style="display: none;" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/abbr.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/abbr.js
new file mode 100644 (file)
index 0000000..4b51a25
--- /dev/null
@@ -0,0 +1,28 @@
+/**\r
+ * abbr.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function init() {\r
+       SXE.initElementDialog('abbr');\r
+       if (SXE.currentAction == "update") {\r
+               SXE.showRemoveButton();\r
+       }\r
+}\r
+\r
+function insertAbbr() {\r
+       SXE.insertElement('abbr');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function removeAbbr() {\r
+       SXE.removeElement('abbr');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/acronym.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/acronym.js
new file mode 100644 (file)
index 0000000..6ec2f88
--- /dev/null
@@ -0,0 +1,28 @@
+/**\r
+ * acronym.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function init() {\r
+       SXE.initElementDialog('acronym');\r
+       if (SXE.currentAction == "update") {\r
+               SXE.showRemoveButton();\r
+       }\r
+}\r
+\r
+function insertAcronym() {\r
+       SXE.insertElement('acronym');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function removeAcronym() {\r
+       SXE.removeElement('acronym');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/attributes.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/attributes.js
new file mode 100644 (file)
index 0000000..d62a219
--- /dev/null
@@ -0,0 +1,126 @@
+/**\r
+ * attributes.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function init() {\r
+       tinyMCEPopup.resizeToInnerSize();\r
+       var inst = tinyMCEPopup.editor;\r
+       var dom = inst.dom;\r
+       var elm = inst.selection.getNode();\r
+       var f = document.forms[0];\r
+       var onclick = dom.getAttrib(elm, 'onclick');\r
+\r
+       setFormValue('title', dom.getAttrib(elm, 'title'));\r
+       setFormValue('id', dom.getAttrib(elm, 'id'));\r
+       setFormValue('style', dom.getAttrib(elm, "style"));\r
+       setFormValue('dir', dom.getAttrib(elm, 'dir'));\r
+       setFormValue('lang', dom.getAttrib(elm, 'lang'));\r
+       setFormValue('tabindex', dom.getAttrib(elm, 'tabindex', typeof(elm.tabindex) != "undefined" ? elm.tabindex : ""));\r
+       setFormValue('accesskey', dom.getAttrib(elm, 'accesskey', typeof(elm.accesskey) != "undefined" ? elm.accesskey : ""));\r
+       setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));\r
+       setFormValue('onblur', dom.getAttrib(elm, 'onblur'));\r
+       setFormValue('onclick', onclick);\r
+       setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));\r
+       setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));\r
+       setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));\r
+       setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));\r
+       setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));\r
+       setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));\r
+       setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));\r
+       setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));\r
+       setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));\r
+       className = dom.getAttrib(elm, 'class');\r
+\r
+       addClassesToList('classlist', 'advlink_styles');\r
+       selectByValue(f, 'classlist', className, true);\r
+\r
+       TinyMCE_EditableSelects.init();\r
+}\r
+\r
+function setFormValue(name, value) {\r
+       if(value && document.forms[0].elements[name]){\r
+               document.forms[0].elements[name].value = value;\r
+       }\r
+}\r
+\r
+function insertAction() {\r
+       var inst = tinyMCEPopup.editor;\r
+       var elm = inst.selection.getNode();\r
+\r
+       tinyMCEPopup.execCommand("mceBeginUndoLevel");  \r
+       setAllAttribs(elm);\r
+       tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function setAttrib(elm, attrib, value) {\r
+       var formObj = document.forms[0];\r
+       var valueElm = formObj.elements[attrib.toLowerCase()];\r
+       var inst = tinyMCEPopup.editor;\r
+       var dom = inst.dom;\r
+\r
+       if (typeof(value) == "undefined" || value == null) {\r
+               value = "";\r
+\r
+               if (valueElm)\r
+                       value = valueElm.value;\r
+       }\r
+\r
+       if (value != "") {\r
+               dom.setAttrib(elm, attrib.toLowerCase(), value);\r
+\r
+               if (attrib == "style")\r
+                       attrib = "style.cssText";\r
+\r
+               if (attrib.substring(0, 2) == 'on')\r
+                       value = 'return true;' + value;\r
+\r
+               if (attrib == "class")\r
+                       attrib = "className";\r
+\r
+               elm[attrib]=value;\r
+       } else\r
+               elm.removeAttribute(attrib);\r
+}\r
+\r
+function setAllAttribs(elm) {\r
+       var f = document.forms[0];\r
+\r
+       setAttrib(elm, 'title');\r
+       setAttrib(elm, 'id');\r
+       setAttrib(elm, 'style');\r
+       setAttrib(elm, 'class', getSelectValue(f, 'classlist'));\r
+       setAttrib(elm, 'dir');\r
+       setAttrib(elm, 'lang');\r
+       setAttrib(elm, 'tabindex');\r
+       setAttrib(elm, 'accesskey');\r
+       setAttrib(elm, 'onfocus');\r
+       setAttrib(elm, 'onblur');\r
+       setAttrib(elm, 'onclick');\r
+       setAttrib(elm, 'ondblclick');\r
+       setAttrib(elm, 'onmousedown');\r
+       setAttrib(elm, 'onmouseup');\r
+       setAttrib(elm, 'onmouseover');\r
+       setAttrib(elm, 'onmousemove');\r
+       setAttrib(elm, 'onmouseout');\r
+       setAttrib(elm, 'onkeypress');\r
+       setAttrib(elm, 'onkeydown');\r
+       setAttrib(elm, 'onkeyup');\r
+\r
+       // Refresh in old MSIE\r
+//     if (tinyMCE.isMSIE5)\r
+//             elm.outerHTML = elm.outerHTML;\r
+}\r
+\r
+function insertAttribute() {\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
+tinyMCEPopup.requireLangPack();\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/cite.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/cite.js
new file mode 100644 (file)
index 0000000..009b715
--- /dev/null
@@ -0,0 +1,28 @@
+/**\r
+ * cite.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function init() {\r
+       SXE.initElementDialog('cite');\r
+       if (SXE.currentAction == "update") {\r
+               SXE.showRemoveButton();\r
+       }\r
+}\r
+\r
+function insertCite() {\r
+       SXE.insertElement('cite');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function removeCite() {\r
+       SXE.removeElement('cite');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/del.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/del.js
new file mode 100644 (file)
index 0000000..9e5d8c5
--- /dev/null
@@ -0,0 +1,63 @@
+/**\r
+ * del.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function init() {\r
+       SXE.initElementDialog('del');\r
+       if (SXE.currentAction == "update") {\r
+               setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));\r
+               setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));\r
+               SXE.showRemoveButton();\r
+       }\r
+}\r
+\r
+function setElementAttribs(elm) {\r
+       setAllCommonAttribs(elm);\r
+       setAttrib(elm, 'datetime');\r
+       setAttrib(elm, 'cite');\r
+}\r
+\r
+function insertDel() {\r
+       var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'DEL');\r
+\r
+       tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+       if (elm == null) {\r
+               var s = SXE.inst.selection.getContent();\r
+               if(s.length > 0) {\r
+                       insertInlineElement('del');\r
+                       var elementArray = tinymce.grep(SXE.inst.dom.select('del'), function(n) {return n.id == '#sxe_temp_del#';});\r
+                       for (var i=0; i<elementArray.length; i++) {\r
+                               var elm = elementArray[i];\r
+                               setElementAttribs(elm);\r
+                       }\r
+               }\r
+       } else {\r
+               setElementAttribs(elm);\r
+       }\r
+       tinyMCEPopup.editor.nodeChanged();\r
+       tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function insertInlineElement(en) {\r
+       var ed = tinyMCEPopup.editor, dom = ed.dom;\r
+\r
+       ed.getDoc().execCommand('FontName', false, 'mceinline');\r
+       tinymce.each(dom.select(tinymce.isWebKit ? 'span' : 'font'), function(n) {\r
+               if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')\r
+                       dom.replace(dom.create(en), n, 1);\r
+       });\r
+}\r
+\r
+function removeDel() {\r
+       SXE.removeElement('del');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/element_common.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/element_common.js
new file mode 100644 (file)
index 0000000..5b494a5
--- /dev/null
@@ -0,0 +1,231 @@
+/**\r
+ * element_common.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+tinyMCEPopup.requireLangPack();\r
+\r
+function initCommonAttributes(elm) {\r
+       var formObj = document.forms[0], dom = tinyMCEPopup.editor.dom;\r
+\r
+       // Setup form data for common element attributes\r
+       setFormValue('title', dom.getAttrib(elm, 'title'));\r
+       setFormValue('id', dom.getAttrib(elm, 'id'));\r
+       selectByValue(formObj, 'class', dom.getAttrib(elm, 'class'), true);\r
+       setFormValue('style', dom.getAttrib(elm, 'style'));\r
+       selectByValue(formObj, 'dir', dom.getAttrib(elm, 'dir'));\r
+       setFormValue('lang', dom.getAttrib(elm, 'lang'));\r
+       setFormValue('onfocus', dom.getAttrib(elm, 'onfocus'));\r
+       setFormValue('onblur', dom.getAttrib(elm, 'onblur'));\r
+       setFormValue('onclick', dom.getAttrib(elm, 'onclick'));\r
+       setFormValue('ondblclick', dom.getAttrib(elm, 'ondblclick'));\r
+       setFormValue('onmousedown', dom.getAttrib(elm, 'onmousedown'));\r
+       setFormValue('onmouseup', dom.getAttrib(elm, 'onmouseup'));\r
+       setFormValue('onmouseover', dom.getAttrib(elm, 'onmouseover'));\r
+       setFormValue('onmousemove', dom.getAttrib(elm, 'onmousemove'));\r
+       setFormValue('onmouseout', dom.getAttrib(elm, 'onmouseout'));\r
+       setFormValue('onkeypress', dom.getAttrib(elm, 'onkeypress'));\r
+       setFormValue('onkeydown', dom.getAttrib(elm, 'onkeydown'));\r
+       setFormValue('onkeyup', dom.getAttrib(elm, 'onkeyup'));\r
+}\r
+\r
+function setFormValue(name, value) {\r
+       if(document.forms[0].elements[name]) document.forms[0].elements[name].value = value;\r
+}\r
+\r
+function insertDateTime(id) {\r
+       document.getElementById(id).value = getDateTime(new Date(), "%Y-%m-%dT%H:%M:%S");\r
+}\r
+\r
+function getDateTime(d, fmt) {\r
+       fmt = fmt.replace("%D", "%m/%d/%y");\r
+       fmt = fmt.replace("%r", "%I:%M:%S %p");\r
+       fmt = fmt.replace("%Y", "" + d.getFullYear());\r
+       fmt = fmt.replace("%y", "" + d.getYear());\r
+       fmt = fmt.replace("%m", addZeros(d.getMonth()+1, 2));\r
+       fmt = fmt.replace("%d", addZeros(d.getDate(), 2));\r
+       fmt = fmt.replace("%H", "" + addZeros(d.getHours(), 2));\r
+       fmt = fmt.replace("%M", "" + addZeros(d.getMinutes(), 2));\r
+       fmt = fmt.replace("%S", "" + addZeros(d.getSeconds(), 2));\r
+       fmt = fmt.replace("%I", "" + ((d.getHours() + 11) % 12 + 1));\r
+       fmt = fmt.replace("%p", "" + (d.getHours() < 12 ? "AM" : "PM"));\r
+       fmt = fmt.replace("%%", "%");\r
+\r
+       return fmt;\r
+}\r
+\r
+function addZeros(value, len) {\r
+       var i;\r
+\r
+       value = "" + value;\r
+\r
+       if (value.length < len) {\r
+               for (i=0; i<(len-value.length); i++)\r
+                       value = "0" + value;\r
+       }\r
+\r
+       return value;\r
+}\r
+\r
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
+       if (!form_obj || !form_obj.elements[field_name])\r
+               return;\r
+\r
+       var sel = form_obj.elements[field_name];\r
+\r
+       var found = false;\r
+       for (var i=0; i<sel.options.length; i++) {\r
+               var option = sel.options[i];\r
+\r
+               if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
+                       option.selected = true;\r
+                       found = true;\r
+               } else\r
+                       option.selected = false;\r
+       }\r
+\r
+       if (!found && add_custom && value != '') {\r
+               var option = new Option('Value: ' + value, value);\r
+               option.selected = true;\r
+               sel.options[sel.options.length] = option;\r
+       }\r
+\r
+       return found;\r
+}\r
+\r
+function setAttrib(elm, attrib, value) {\r
+       var formObj = document.forms[0];\r
+       var valueElm = formObj.elements[attrib.toLowerCase()];\r
+       tinyMCEPopup.editor.dom.setAttrib(elm, attrib, value || valueElm.value);\r
+}\r
+\r
+function setAllCommonAttribs(elm) {\r
+       setAttrib(elm, 'title');\r
+       setAttrib(elm, 'id');\r
+       setAttrib(elm, 'class');\r
+       setAttrib(elm, 'style');\r
+       setAttrib(elm, 'dir');\r
+       setAttrib(elm, 'lang');\r
+       /*setAttrib(elm, 'onfocus');\r
+       setAttrib(elm, 'onblur');\r
+       setAttrib(elm, 'onclick');\r
+       setAttrib(elm, 'ondblclick');\r
+       setAttrib(elm, 'onmousedown');\r
+       setAttrib(elm, 'onmouseup');\r
+       setAttrib(elm, 'onmouseover');\r
+       setAttrib(elm, 'onmousemove');\r
+       setAttrib(elm, 'onmouseout');\r
+       setAttrib(elm, 'onkeypress');\r
+       setAttrib(elm, 'onkeydown');\r
+       setAttrib(elm, 'onkeyup');*/\r
+}\r
+\r
+SXE = {\r
+       currentAction : "insert",\r
+       inst : tinyMCEPopup.editor,\r
+       updateElement : null\r
+}\r
+\r
+SXE.focusElement = SXE.inst.selection.getNode();\r
+\r
+SXE.initElementDialog = function(element_name) {\r
+       addClassesToList('class', 'xhtmlxtras_styles');\r
+       TinyMCE_EditableSelects.init();\r
+\r
+       element_name = element_name.toLowerCase();\r
+       var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());\r
+       if (elm != null && elm.nodeName.toUpperCase() == element_name.toUpperCase()) {\r
+               SXE.currentAction = "update";\r
+       }\r
+\r
+       if (SXE.currentAction == "update") {\r
+               initCommonAttributes(elm);\r
+               SXE.updateElement = elm;\r
+       }\r
+\r
+       document.forms[0].insert.value = tinyMCEPopup.getLang(SXE.currentAction, 'Insert', true); \r
+}\r
+\r
+SXE.insertElement = function(element_name) {\r
+       var elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase()), h, tagName;\r
+\r
+       tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+       if (elm == null) {\r
+               var s = SXE.inst.selection.getContent();\r
+               if(s.length > 0) {\r
+                       tagName = element_name;\r
+\r
+                       insertInlineElement(element_name);\r
+                       var elementArray = tinymce.grep(SXE.inst.dom.select(element_name));\r
+                       for (var i=0; i<elementArray.length; i++) {\r
+                               var elm = elementArray[i];\r
+\r
+                               if (SXE.inst.dom.getAttrib(elm, '_mce_new')) {\r
+                                       elm.id = '';\r
+                                       elm.setAttribute('id', '');\r
+                                       elm.removeAttribute('id');\r
+                                       elm.removeAttribute('_mce_new');\r
+\r
+                                       setAllCommonAttribs(elm);\r
+                               }\r
+                       }\r
+               }\r
+       } else {\r
+               setAllCommonAttribs(elm);\r
+       }\r
+       SXE.inst.nodeChanged();\r
+       tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+}\r
+\r
+SXE.removeElement = function(element_name){\r
+       element_name = element_name.toLowerCase();\r
+       elm = SXE.inst.dom.getParent(SXE.focusElement, element_name.toUpperCase());\r
+       if(elm && elm.nodeName.toUpperCase() == element_name.toUpperCase()){\r
+               tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+               tinyMCE.execCommand('mceRemoveNode', false, elm);\r
+               SXE.inst.nodeChanged();\r
+               tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+       }\r
+}\r
+\r
+SXE.showRemoveButton = function() {\r
+               document.getElementById("remove").style.display = '';\r
+}\r
+\r
+SXE.containsClass = function(elm,cl) {\r
+       return (elm.className.indexOf(cl) > -1) ? true : false;\r
+}\r
+\r
+SXE.removeClass = function(elm,cl) {\r
+       if(elm.className == null || elm.className == "" || !SXE.containsClass(elm,cl)) {\r
+               return true;\r
+       }\r
+       var classNames = elm.className.split(" ");\r
+       var newClassNames = "";\r
+       for (var x = 0, cnl = classNames.length; x < cnl; x++) {\r
+               if (classNames[x] != cl) {\r
+                       newClassNames += (classNames[x] + " ");\r
+               }\r
+       }\r
+       elm.className = newClassNames.substring(0,newClassNames.length-1); //removes extra space at the end\r
+}\r
+\r
+SXE.addClass = function(elm,cl) {\r
+       if(!SXE.containsClass(elm,cl)) elm.className ? elm.className += " " + cl : elm.className = cl;\r
+       return true;\r
+}\r
+\r
+function insertInlineElement(en) {\r
+       var ed = tinyMCEPopup.editor, dom = ed.dom;\r
+\r
+       ed.getDoc().execCommand('FontName', false, 'mceinline');\r
+       tinymce.each(dom.select('span,font'), function(n) {\r
+               if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')\r
+                       dom.replace(dom.create(en, {_mce_new : 1}), n, 1);\r
+       });\r
+}\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/js/ins.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/js/ins.js
new file mode 100644 (file)
index 0000000..3774f0a
--- /dev/null
@@ -0,0 +1,62 @@
+/**\r
+ * ins.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function init() {\r
+       SXE.initElementDialog('ins');\r
+       if (SXE.currentAction == "update") {\r
+               setFormValue('datetime', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'datetime'));\r
+               setFormValue('cite', tinyMCEPopup.editor.dom.getAttrib(SXE.updateElement, 'cite'));\r
+               SXE.showRemoveButton();\r
+       }\r
+}\r
+\r
+function setElementAttribs(elm) {\r
+       setAllCommonAttribs(elm);\r
+       setAttrib(elm, 'datetime');\r
+       setAttrib(elm, 'cite');\r
+}\r
+\r
+function insertIns() {\r
+       var elm = tinyMCEPopup.editor.dom.getParent(SXE.focusElement, 'INS');\r
+       tinyMCEPopup.execCommand('mceBeginUndoLevel');\r
+       if (elm == null) {\r
+               var s = SXE.inst.selection.getContent();\r
+               if(s.length > 0) {\r
+                       insertInlineElement('INS');\r
+                       var elementArray = tinymce.grep(SXE.inst.dom.select('ins'), function(n) {return n.id == '#sxe_temp_ins#';});\r
+                       for (var i=0; i<elementArray.length; i++) {\r
+                               var elm = elementArray[i];\r
+                               setElementAttribs(elm);\r
+                       }\r
+               }\r
+       } else {\r
+               setElementAttribs(elm);\r
+       }\r
+       tinyMCEPopup.editor.nodeChanged();\r
+       tinyMCEPopup.execCommand('mceEndUndoLevel');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function removeIns() {\r
+       SXE.removeElement('ins');\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function insertInlineElement(en) {\r
+       var ed = tinyMCEPopup.editor, dom = ed.dom;\r
+\r
+       ed.getDoc().execCommand('FontName', false, 'mceinline');\r
+       tinymce.each(dom.select(tinymce.isWebKit ? 'span' : 'font'), function(n) {\r
+               if (n.style.fontFamily == 'mceinline' || n.face == 'mceinline')\r
+                       dom.replace(dom.create(en), n, 1);\r
+       });\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/plugins/xhtmlxtras/langs/en_dlg.js b/plugins/TinyMCE/js/plugins/xhtmlxtras/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..45b6b26
--- /dev/null
@@ -0,0 +1,32 @@
+tinyMCE.addI18n('en.xhtmlxtras_dlg',{\r
+attribute_label_title:"Title",\r
+attribute_label_id:"ID",\r
+attribute_label_class:"Class",\r
+attribute_label_style:"Style",\r
+attribute_label_cite:"Cite",\r
+attribute_label_datetime:"Date/Time",\r
+attribute_label_langdir:"Text Direction",\r
+attribute_option_ltr:"Left to right",\r
+attribute_option_rtl:"Right to left",\r
+attribute_label_langcode:"Language",\r
+attribute_label_tabindex:"TabIndex",\r
+attribute_label_accesskey:"AccessKey",\r
+attribute_events_tab:"Events",\r
+attribute_attrib_tab:"Attributes",\r
+general_tab:"General",\r
+attrib_tab:"Attributes",\r
+events_tab:"Events",\r
+fieldset_general_tab:"General Settings",\r
+fieldset_attrib_tab:"Element Attributes",\r
+fieldset_events_tab:"Element Events",\r
+title_ins_element:"Insertion Element",\r
+title_del_element:"Deletion Element",\r
+title_acronym_element:"Acronym Element",\r
+title_abbr_element:"Abbreviation Element",\r
+title_cite_element:"Citation Element",\r
+remove:"Remove",\r
+insert_date:"Insert current date/time",\r
+option_ltr:"Left to right",\r
+option_rtl:"Right to left",\r
+attribs_title:"Insert/Edit Attributes"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/about.htm b/plugins/TinyMCE/js/themes/advanced/about.htm
new file mode 100644 (file)
index 0000000..267f837
--- /dev/null
@@ -0,0 +1,54 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.about_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="js/about.js"></script>\r
+</head>\r
+<body id="about" style="display: none">\r
+               <div class="tabs">\r
+                       <ul>\r
+                               <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.about_general}</a></span></li>\r
+                               <li id="help_tab" style="display:none"><span><a href="javascript:mcTabs.displayTab('help_tab','help_panel');" onmousedown="return false;">{#advanced_dlg.about_help}</a></span></li>\r
+                               <li id="plugins_tab"><span><a href="javascript:mcTabs.displayTab('plugins_tab','plugins_panel');" onmousedown="return false;">{#advanced_dlg.about_plugins}</a></span></li>\r
+                       </ul>\r
+               </div>\r
+\r
+               <div class="panel_wrapper">\r
+                       <div id="general_panel" class="panel current">\r
+                               <h3>{#advanced_dlg.about_title}</h3>\r
+                               <p>Version: <span id="version"></span> (<span id="date"></span>)</p>\r
+                               <p>TinyMCE is a platform independent web based Javascript HTML WYSIWYG editor control released as Open Source under <a href="../../license.txt" target="_blank">LGPL</a>\r
+                               by Moxiecode Systems AB. It has the ability to convert HTML TEXTAREA fields or other HTML elements to editor instances.</p>\r
+                               <p>Copyright &copy; 2003-2008, <a href="http://www.moxiecode.com" target="_blank">Moxiecode Systems AB</a>, All rights reserved.</p>\r
+                               <p>For more information about this software visit the <a href="http://tinymce.moxiecode.com" target="_blank">TinyMCE website</a>.</p>\r
+\r
+                               <div id="buttoncontainer">\r
+                                       <a href="http://www.moxiecode.com" target="_blank"><img src="http://tinymce.moxiecode.com/images/gotmoxie.png" alt="Got Moxie?" border="0" /></a>\r
+                                       <a href="http://sourceforge.net/projects/tinymce/" target="_blank"><img src="http://sourceforge.net/sflogo.php?group_id=103281" alt="Hosted By Sourceforge" border="0" /></a>\r
+                                       <a href="http://www.freshmeat.net/projects/tinymce" target="_blank"><img src="http://tinymce.moxiecode.com/images/fm.gif" alt="Also on freshmeat" border="0" /></a>\r
+                               </div>\r
+                       </div>\r
+\r
+                       <div id="plugins_panel" class="panel">\r
+                               <div id="pluginscontainer">\r
+                                       <h3>{#advanced_dlg.about_loaded}</h3>\r
+\r
+                                       <div id="plugintablecontainer">\r
+                                       </div>\r
+\r
+                                       <p>&nbsp;</p>\r
+                               </div>\r
+                       </div>\r
+\r
+                       <div id="help_panel" class="panel noscroll" style="overflow: visible;">\r
+                               <div id="iframecontainer"></div>\r
+                       </div>\r
+               </div>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="button" id="cancel" name="cancel" value="{#close}" onclick="tinyMCEPopup.close();" />\r
+               </div>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/anchor.htm b/plugins/TinyMCE/js/themes/advanced/anchor.htm
new file mode 100644 (file)
index 0000000..2bc63fc
--- /dev/null
@@ -0,0 +1,26 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.anchor_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/anchor.js"></script>\r
+</head>\r
+<body style="display: none">\r
+<form onsubmit="AnchorDialog.update();return false;" action="#">\r
+       <table border="0" cellpadding="4" cellspacing="0">\r
+               <tr>\r
+                       <td colspan="2" class="title">{#advanced_dlg.anchor_title}</td>\r
+               </tr>\r
+               <tr>\r
+                       <td class="nowrap">{#advanced_dlg.anchor_name}:</td>\r
+                       <td><input name="anchorName" type="text" class="mceFocus" id="anchorName" value="" style="width: 200px" /></td>\r
+               </tr>\r
+       </table>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#update}" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/charmap.htm b/plugins/TinyMCE/js/themes/advanced/charmap.htm
new file mode 100644 (file)
index 0000000..3991b81
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.charmap_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/charmap.js"></script>\r
+</head>\r
+<body id="charmap" style="display:none">\r
+<table align="center" border="0" cellspacing="0" cellpadding="2">\r
+    <tr>\r
+        <td colspan="2" class="title">{#advanced_dlg.charmap_title}</td>\r
+    </tr>\r
+    <tr>\r
+        <td id="charmapView" rowspan="2" align="left" valign="top">\r
+                       <!-- Chars will be rendered here -->\r
+        </td>\r
+        <td width="100" align="center" valign="top">\r
+            <table border="0" cellpadding="0" cellspacing="0" width="100" style="height:100px">\r
+                <tr>\r
+                    <td id="codeV">&nbsp;</td>\r
+                </tr>\r
+                <tr>\r
+                    <td id="codeN">&nbsp;</td>\r
+                </tr>\r
+            </table>\r
+        </td>\r
+    </tr>\r
+    <tr>\r
+        <td valign="bottom" style="padding-bottom: 3px;">\r
+            <table width="100" align="center" border="0" cellpadding="2" cellspacing="0">\r
+                <tr>\r
+                    <td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">HTML-Code</td>\r
+                </tr>\r
+                <tr>\r
+                    <td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeA" align="center">&nbsp;</td>\r
+                </tr>\r
+                <tr>\r
+                    <td style="font-size: 1px;">&nbsp;</td>\r
+                </tr>\r
+                <tr>\r
+                    <td align="center" style="border-left: 1px solid #666699; border-top: 1px solid #666699; border-right: 1px solid #666699;">NUM-Code</td>\r
+                </tr>\r
+                <tr>\r
+                    <td style="font-size: 16px; font-weight: bold; border-left: 1px solid #666699; border-bottom: 1px solid #666699; border-right: 1px solid #666699;" id="codeB" align="center">&nbsp;</td>\r
+                </tr>\r
+            </table>\r
+        </td>\r
+    </tr>\r
+</table>\r
+\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/color_picker.htm b/plugins/TinyMCE/js/themes/advanced/color_picker.htm
new file mode 100644 (file)
index 0000000..096e755
--- /dev/null
@@ -0,0 +1,73 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.colorpicker_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="js/color_picker.js"></script>\r
+</head>\r
+<body id="colorpicker" style="display: none">\r
+<form onsubmit="insertAction();return false" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="picker_tab" class="current"><span><a href="javascript:mcTabs.displayTab('picker_tab','picker_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_picker_tab}</a></span></li>\r
+                       <li id="rgb_tab"><span><a href="javascript:;" onclick="generateWebColors();mcTabs.displayTab('rgb_tab','rgb_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_palette_tab}</a></span></li>\r
+                       <li id="named_tab"><span><a  href="javascript:;" onclick="generateNamedColors();javascript:mcTabs.displayTab('named_tab','named_panel');" onmousedown="return false;">{#advanced_dlg.colorpicker_named_tab}</a></span></li>\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="picker_panel" class="panel current">\r
+                       <fieldset>\r
+                               <legend>{#advanced_dlg.colorpicker_picker_title}</legend>\r
+                               <div id="picker">\r
+                                       <img id="colors" src="img/colorpicker.jpg" onclick="computeColor(event)" onmousedown="isMouseDown = true;return false;" onmouseup="isMouseDown = false;" onmousemove="if (isMouseDown && isMouseOver) computeColor(event); return false;" onmouseover="isMouseOver=true;" onmouseout="isMouseOver=false;" alt="" />\r
+\r
+                                       <div id="light">\r
+                                               <!-- Will be filled with divs -->\r
+                                       </div>\r
+\r
+                                       <br style="clear: both" />\r
+                               </div>\r
+                       </fieldset>\r
+               </div>\r
+\r
+               <div id="rgb_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#advanced_dlg.colorpicker_palette_title}</legend>\r
+                               <div id="webcolors">\r
+                                       <!-- Gets filled with web safe colors-->\r
+                               </div>\r
+\r
+                               <br style="clear: both" />\r
+                       </fieldset>\r
+               </div>\r
+\r
+               <div id="named_panel" class="panel">\r
+                       <fieldset>\r
+                               <legend>{#advanced_dlg.colorpicker_named_title}</legend>\r
+                               <div id="namedcolors">\r
+                                       <!-- Gets filled with named colors-->\r
+                               </div>\r
+\r
+                               <br style="clear: both" />\r
+\r
+                               <div id="colornamecontainer">\r
+                                       {#advanced_dlg.colorpicker_name} <span id="colorname"></span>\r
+                               </div>\r
+                       </fieldset>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#apply}" />\r
+\r
+               <div id="preview"></div>\r
+\r
+               <div id="previewblock">\r
+                       <label for="color">{#advanced_dlg.colorpicker_color}</label> <input id="color" type="text" size="8" maxlength="8" class="text mceFocus" />\r
+               </div>\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/editor_template.js b/plugins/TinyMCE/js/themes/advanced/editor_template.js
new file mode 100644 (file)
index 0000000..4c43312
--- /dev/null
@@ -0,0 +1 @@
+(function(e){var d=e.DOM,b=e.dom.Event,h=e.extend,f=e.each,a=e.util.Cookie,g,c=e.explode;e.ThemeManager.requireLangPack("advanced");e.create("tinymce.themes.AdvancedTheme",{sizes:[8,10,12,14,18,24,36],controls:{bold:["bold_desc","Bold"],italic:["italic_desc","Italic"],underline:["underline_desc","Underline"],strikethrough:["striketrough_desc","Strikethrough"],justifyleft:["justifyleft_desc","JustifyLeft"],justifycenter:["justifycenter_desc","JustifyCenter"],justifyright:["justifyright_desc","JustifyRight"],justifyfull:["justifyfull_desc","JustifyFull"],bullist:["bullist_desc","InsertUnorderedList"],numlist:["numlist_desc","InsertOrderedList"],outdent:["outdent_desc","Outdent"],indent:["indent_desc","Indent"],cut:["cut_desc","Cut"],copy:["copy_desc","Copy"],paste:["paste_desc","Paste"],undo:["undo_desc","Undo"],redo:["redo_desc","Redo"],link:["link_desc","mceLink"],unlink:["unlink_desc","unlink"],image:["image_desc","mceImage"],cleanup:["cleanup_desc","mceCleanup"],help:["help_desc","mceHelp"],code:["code_desc","mceCodeEditor"],hr:["hr_desc","InsertHorizontalRule"],removeformat:["removeformat_desc","RemoveFormat"],sub:["sub_desc","subscript"],sup:["sup_desc","superscript"],forecolor:["forecolor_desc","ForeColor"],forecolorpicker:["forecolor_desc","mceForeColor"],backcolor:["backcolor_desc","HiliteColor"],backcolorpicker:["backcolor_desc","mceBackColor"],charmap:["charmap_desc","mceCharMap"],visualaid:["visualaid_desc","mceToggleVisualAid"],anchor:["anchor_desc","mceInsertAnchor"],newdocument:["newdocument_desc","mceNewDocument"],blockquote:["blockquote_desc","mceBlockQuote"]},stateControls:["bold","italic","underline","strikethrough","bullist","numlist","justifyleft","justifycenter","justifyright","justifyfull","sub","sup","blockquote"],init:function(j,k){var l=this,m,i,n;l.editor=j;l.url=k;l.onResolveName=new e.util.Dispatcher(this);l.settings=m=h({theme_advanced_path:true,theme_advanced_toolbar_location:"bottom",theme_advanced_buttons1:"bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",theme_advanced_buttons2:"bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",theme_advanced_buttons3:"hr,removeformat,visualaid,|,sub,sup,|,charmap",theme_advanced_blockformats:"p,address,pre,h1,h2,h3,h4,h5,h6",theme_advanced_toolbar_align:"center",theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",theme_advanced_more_colors:1,theme_advanced_row_height:23,theme_advanced_resize_horizontal:1,theme_advanced_resizing_use_cookie:1,theme_advanced_font_sizes:"1,2,3,4,5,6,7",readonly:j.settings.readonly},j.settings);if(!m.font_size_style_values){m.font_size_style_values="8pt,10pt,12pt,14pt,18pt,24pt,36pt"}if(e.is(m.theme_advanced_font_sizes,"string")){m.font_size_style_values=e.explode(m.font_size_style_values);m.font_size_classes=e.explode(m.font_size_classes||"");n={};j.settings.theme_advanced_font_sizes=m.theme_advanced_font_sizes;f(j.getParam("theme_advanced_font_sizes","","hash"),function(q,p){var o;if(p==q&&q>=1&&q<=7){p=q+" ("+l.sizes[q-1]+"pt)";o=m.font_size_classes[q-1];q=m.font_size_style_values[q-1]||(l.sizes[q-1]+"pt")}if(/^\s*\./.test(q)){o=q.replace(/\./g,"")}n[p]=o?{"class":o}:{fontSize:q}});m.theme_advanced_font_sizes=n}if((i=m.theme_advanced_path_location)&&i!="none"){m.theme_advanced_statusbar_location=m.theme_advanced_path_location}if(m.theme_advanced_statusbar_location=="none"){m.theme_advanced_statusbar_location=0}j.onInit.add(function(){if(!j.settings.readonly){j.onNodeChange.add(l._nodeChanged,l)}if(j.settings.content_css!==false){j.dom.loadCSS(j.baseURI.toAbsolute("themes/advanced/skins/"+j.settings.skin+"/content.css"))}});j.onSetProgressState.add(function(q,o,r){var s,t=q.id,p;if(o){l.progressTimer=setTimeout(function(){s=q.getContainer();s=s.insertBefore(d.create("DIV",{style:"position:relative"}),s.firstChild);p=d.get(q.id+"_tbl");d.add(s,"div",{id:t+"_blocker","class":"mceBlocker",style:{width:p.clientWidth+2,height:p.clientHeight+2}});d.add(s,"div",{id:t+"_progress","class":"mceProgress",style:{left:p.clientWidth/2,top:p.clientHeight/2}})},r||0)}else{d.remove(t+"_blocker");d.remove(t+"_progress");clearTimeout(l.progressTimer)}});d.loadCSS(m.editor_css?j.documentBaseURI.toAbsolute(m.editor_css):k+"/skins/"+j.settings.skin+"/ui.css");if(m.skin_variant){d.loadCSS(k+"/skins/"+j.settings.skin+"/ui_"+m.skin_variant+".css")}},createControl:function(l,i){var j,k;if(k=i.createControl(l)){return k}switch(l){case"styleselect":return this._createStyleSelect();case"formatselect":return this._createBlockFormats();case"fontselect":return this._createFontSelect();case"fontsizeselect":return this._createFontSizeSelect();case"forecolor":return this._createForeColorMenu();case"backcolor":return this._createBackColorMenu()}if((j=this.controls[l])){return i.createButton(l,{title:"advanced."+j[0],cmd:j[1],ui:j[2],value:j[3]})}},execCommand:function(k,j,l){var i=this["_"+k];if(i){i.call(this,j,l);return true}return false},_importClasses:function(k){var i=this.editor,j=i.controlManager.get("styleselect");if(j.getLength()==0){f(i.dom.getClasses(),function(n,l){var m="style_"+l;i.formatter.register(m,{inline:"span",attributes:{"class":n["class"]},selector:"*"});j.add(n["class"],m)})}},_createStyleSelect:function(m){var k=this,i=k.editor,j=i.controlManager,l;l=j.createListBox("styleselect",{title:"advanced.style_select",onselect:function(o){var p,n=[];f(l.items,function(q){n.push(q.value)});i.focus();i.undoManager.add();p=i.formatter.matchAll(n);if(!o||p[0]==o){i.formatter.remove(p[0])}else{i.formatter.apply(o)}i.undoManager.add();i.nodeChanged();return false}});i.onInit.add(function(){var o=0,n=i.getParam("style_formats");if(n){f(n,function(p){var q,r=0;f(p,function(){r++});if(r>1){q=p.name=p.name||"style_"+(o++);i.formatter.register(q,p);l.add(p.title,q)}else{l.add(p.title)}})}else{f(i.getParam("theme_advanced_styles","","hash"),function(r,q){var p;if(r){p="style_"+(o++);i.formatter.register(p,{inline:"span",classes:r,selector:"*"});l.add(k.editor.translate(q),p)}})}});if(l.getLength()==0){l.onPostRender.add(function(o,p){if(!l.NativeListBox){b.add(p.id+"_text","focus",k._importClasses,k);b.add(p.id+"_text","mousedown",k._importClasses,k);b.add(p.id+"_open","focus",k._importClasses,k);b.add(p.id+"_open","mousedown",k._importClasses,k)}else{b.add(p.id,"focus",k._importClasses,k)}})}return l},_createFontSelect:function(){var k,j=this,i=j.editor;k=i.controlManager.createListBox("fontselect",{title:"advanced.fontdefault",onselect:function(l){var m=k.items[k.selectedIndex];if(!l&&m){i.execCommand("FontName",false,m.value);return}i.execCommand("FontName",false,l);k.select(function(n){return l==n});return false}});if(k){f(i.getParam("theme_advanced_fonts",j.settings.theme_advanced_fonts,"hash"),function(m,l){k.add(i.translate(l),m,{style:m.indexOf("dings")==-1?"font-family:"+m:""})})}return k},_createFontSizeSelect:function(){var m=this,k=m.editor,n,l=0,j=[];n=k.controlManager.createListBox("fontsizeselect",{title:"advanced.font_size",onselect:function(i){var o=n.items[n.selectedIndex];if(!i&&o){o=o.value;if(o["class"]){k.formatter.toggle("fontsize_class",{value:o["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,o.fontSize)}return}if(i["class"]){k.focus();k.undoManager.add();k.formatter.toggle("fontsize_class",{value:i["class"]});k.undoManager.add();k.nodeChanged()}else{k.execCommand("FontSize",false,i.fontSize)}n.select(function(p){return i==p});return false}});if(n){f(m.settings.theme_advanced_font_sizes,function(o,i){var p=o.fontSize;if(p>=1&&p<=7){p=m.sizes[parseInt(p)-1]+"pt"}n.add(i,o,{style:"font-size:"+p,"class":"mceFontSize"+(l++)+(" "+(o["class"]||""))})})}return n},_createBlockFormats:function(){var k,i={p:"advanced.paragraph",address:"advanced.address",pre:"advanced.pre",h1:"advanced.h1",h2:"advanced.h2",h3:"advanced.h3",h4:"advanced.h4",h5:"advanced.h5",h6:"advanced.h6",div:"advanced.div",blockquote:"advanced.blockquote",code:"advanced.code",dt:"advanced.dt",dd:"advanced.dd",samp:"advanced.samp"},j=this;k=j.editor.controlManager.createListBox("formatselect",{title:"advanced.block",cmd:"FormatBlock"});if(k){f(j.editor.getParam("theme_advanced_blockformats",j.settings.theme_advanced_blockformats,"hash"),function(m,l){k.add(j.editor.translate(l!=m?l:i[m]),m,{"class":"mce_formatPreview mce_"+m})})}return k},_createForeColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_text_colors){l.colors=i}if(k.theme_advanced_default_foreground_color){l.default_color=k.theme_advanced_default_foreground_color}l.title="advanced.forecolor_desc";l.cmd="ForeColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("forecolor",l);return m},_createBackColorMenu:function(){var m,j=this,k=j.settings,l={},i;if(k.theme_advanced_more_colors){l.more_colors_func=function(){j._mceColorPicker(0,{color:m.value,func:function(n){m.setColor(n)}})}}if(i=k.theme_advanced_background_colors){l.colors=i}if(k.theme_advanced_default_background_color){l.default_color=k.theme_advanced_default_background_color}l.title="advanced.backcolor_desc";l.cmd="HiliteColor";l.scope=this;m=j.editor.controlManager.createColorSplitButton("backcolor",l);return m},renderUI:function(k){var m,l,q,v=this,r=v.editor,w=v.settings,u,j,i;m=j=d.create("span",{id:r.id+"_parent","class":"mceEditor "+r.settings.skin+"Skin"+(w.skin_variant?" "+r.settings.skin+"Skin"+v._ufirst(w.skin_variant):"")});if(!d.boxModel){m=d.add(m,"div",{"class":"mceOldBoxModel"})}m=u=d.add(m,"table",{id:r.id+"_tbl","class":"mceLayout",cellSpacing:0,cellPadding:0});m=q=d.add(m,"tbody");switch((w.theme_advanced_layout_manager||"").toLowerCase()){case"rowlayout":l=v._rowLayout(w,q,k);break;case"customlayout":l=r.execCallback("theme_advanced_custom_layout",w,q,k,j);break;default:l=v._simpleLayout(w,q,k,j)}m=k.targetNode;i=d.stdMode?u.getElementsByTagName("tr"):u.rows;d.addClass(i[0],"mceFirst");d.addClass(i[i.length-1],"mceLast");f(d.select("tr",q),function(o){d.addClass(o.firstChild,"mceFirst");d.addClass(o.childNodes[o.childNodes.length-1],"mceLast")});if(d.get(w.theme_advanced_toolbar_container)){d.get(w.theme_advanced_toolbar_container).appendChild(j)}else{d.insertAfter(j,m)}b.add(r.id+"_path_row","click",function(n){n=n.target;if(n.nodeName=="A"){v._sel(n.className.replace(/^.*mcePath_([0-9]+).*$/,"$1"));return b.cancel(n)}});if(!r.getParam("accessibility_focus")){b.add(d.add(j,"a",{href:"#"},"<!-- IE -->"),"focus",function(){tinyMCE.get(r.id).focus()})}if(w.theme_advanced_toolbar_location=="external"){k.deltaHeight=0}v.deltaHeight=k.deltaHeight;k.targetNode=null;return{iframeContainer:l,editorContainer:r.id+"_parent",sizeContainer:u,deltaHeight:k.deltaHeight}},getInfo:function(){return{longname:"Advanced theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:e.majorVersion+"."+e.minorVersion}},resizeBy:function(i,j){var k=d.get(this.editor.id+"_tbl");this.resizeTo(k.clientWidth+i,k.clientHeight+j)},resizeTo:function(i,l){var j=this.editor,k=this.settings,m=d.get(j.id+"_tbl"),n=d.get(j.id+"_ifr");i=Math.max(k.theme_advanced_resizing_min_width||100,i);l=Math.max(k.theme_advanced_resizing_min_height||100,l);i=Math.min(k.theme_advanced_resizing_max_width||65535,i);l=Math.min(k.theme_advanced_resizing_max_height||65535,l);d.setStyle(m,"height","");d.setStyle(n,"height",l);if(k.theme_advanced_resize_horizontal){d.setStyle(m,"width","");d.setStyle(n,"width",i);if(i<m.clientWidth){d.setStyle(n,"width",m.clientWidth)}}},destroy:function(){var i=this.editor.id;b.clear(i+"_resize");b.clear(i+"_path_row");b.clear(i+"_external_close")},_simpleLayout:function(y,r,k,i){var x=this,u=x.editor,v=y.theme_advanced_toolbar_location,m=y.theme_advanced_statusbar_location,l,j,q,w;if(y.readonly){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});return j}if(v=="top"){x._addToolbars(r,k)}if(v=="external"){l=w=d.create("div",{style:"position:relative"});l=d.add(l,"div",{id:u.id+"_external","class":"mceExternalToolbar"});d.add(l,"a",{id:u.id+"_external_close",href:"javascript:;","class":"mceExternalClose"});l=d.add(l,"table",{id:u.id+"_tblext",cellSpacing:0,cellPadding:0});q=d.add(l,"tbody");if(i.firstChild.className=="mceOldBoxModel"){i.firstChild.appendChild(w)}else{i.insertBefore(w,i.firstChild)}x._addToolbars(q,k);u.onMouseUp.add(function(){var o=d.get(u.id+"_external");d.show(o);d.hide(g);var n=b.add(u.id+"_external_close","click",function(){d.hide(u.id+"_external");b.remove(u.id+"_external_close","click",n)});d.show(o);d.setStyle(o,"top",0-d.getRect(u.id+"_tblext").h-1);d.hide(o);d.show(o);o.style.filter="";g=u.id+"_external";o=null})}if(m=="top"){x._addStatusBar(r,k)}if(!y.theme_advanced_toolbar_container){l=d.add(r,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"})}if(v=="bottom"){x._addToolbars(r,k)}if(m=="bottom"){x._addStatusBar(r,k)}return j},_rowLayout:function(w,m,k){var v=this,p=v.editor,u,x,i=p.controlManager,l,j,r,q;u=w.theme_advanced_containers_default_class||"";x=w.theme_advanced_containers_default_align||"center";f(c(w.theme_advanced_containers||""),function(s,o){var n=w["theme_advanced_container_"+s]||"";switch(n.toLowerCase()){case"mceeditor":l=d.add(m,"tr");l=j=d.add(l,"td",{"class":"mceIframeContainer"});break;case"mceelementpath":v._addStatusBar(m,k);break;default:q=(w["theme_advanced_container_"+s+"_align"]||x).toLowerCase();q="mce"+v._ufirst(q);l=d.add(d.add(m,"tr"),"td",{"class":"mceToolbar "+(w["theme_advanced_container_"+s+"_class"]||u)+" "+q||x});r=i.createToolbar("toolbar"+o);v._addControls(n,r);d.setHTML(l,r.renderHTML());k.deltaHeight-=w.theme_advanced_row_height}});return j},_addControls:function(j,i){var k=this,l=k.settings,m,n=k.editor.controlManager;if(l.theme_advanced_disable&&!k._disabled){m={};f(c(l.theme_advanced_disable),function(o){m[o]=1});k._disabled=m}else{m=k._disabled}f(c(j),function(p){var o;if(m&&m[p]){return}if(p=="tablecontrols"){f(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"],function(q){q=k.createControl(q,n);if(q){i.add(q)}});return}o=k.createControl(p,n);if(o){i.add(o)}})},_addToolbars:function(w,k){var z=this,p,m,r=z.editor,A=z.settings,y,j=r.controlManager,u,l,q=[],x;x=A.theme_advanced_toolbar_align.toLowerCase();x="mce"+z._ufirst(x);l=d.add(d.add(w,"tr"),"td",{"class":"mceToolbar "+x});if(!r.getParam("accessibility_focus")){q.push(d.createHTML("a",{href:"#",onfocus:"tinyMCE.get('"+r.id+"').focus();"},"<!-- IE -->"))}q.push(d.createHTML("a",{href:"#",accesskey:"q",title:r.getLang("advanced.toolbar_focus")},"<!-- IE -->"));for(p=1;(y=A["theme_advanced_buttons"+p]);p++){m=j.createToolbar("toolbar"+p,{"class":"mceToolbarRow"+p});if(A["theme_advanced_buttons"+p+"_add"]){y+=","+A["theme_advanced_buttons"+p+"_add"]}if(A["theme_advanced_buttons"+p+"_add_before"]){y=A["theme_advanced_buttons"+p+"_add_before"]+","+y}z._addControls(y,m);q.push(m.renderHTML());k.deltaHeight-=A.theme_advanced_row_height}q.push(d.createHTML("a",{href:"#",accesskey:"z",title:r.getLang("advanced.toolbar_focus"),onfocus:"tinyMCE.getInstanceById('"+r.id+"').focus();"},"<!-- IE -->"));d.setHTML(l,q.join(""))},_addStatusBar:function(m,j){var k,v=this,p=v.editor,w=v.settings,i,q,u,l;k=d.add(m,"tr");k=l=d.add(k,"td",{"class":"mceStatusbar"});k=d.add(k,"div",{id:p.id+"_path_row"},w.theme_advanced_path?p.translate("advanced.path")+": ":"&#160;");d.add(k,"a",{href:"#",accesskey:"x"});if(w.theme_advanced_resizing){d.add(l,"a",{id:p.id+"_resize",href:"javascript:;",onclick:"return false;","class":"mceResize"});if(w.theme_advanced_resizing_use_cookie){p.onPostRender.add(function(){var n=a.getHash("TinyMCE_"+p.id+"_size"),r=d.get(p.id+"_tbl");if(!n){return}v.resizeTo(n.cw,n.ch)})}p.onPostRender.add(function(){b.add(p.id+"_resize","mousedown",function(D){var t,r,s,o,C,z,A,F,n,E,x;function y(G){n=A+(G.screenX-C);E=F+(G.screenY-z);v.resizeTo(n,E)}function B(G){b.remove(d.doc,"mousemove",t);b.remove(p.getDoc(),"mousemove",r);b.remove(d.doc,"mouseup",s);b.remove(p.getDoc(),"mouseup",o);if(w.theme_advanced_resizing_use_cookie){a.setHash("TinyMCE_"+p.id+"_size",{cw:n,ch:E})}}D.preventDefault();C=D.screenX;z=D.screenY;x=d.get(v.editor.id+"_ifr");A=n=x.clientWidth;F=E=x.clientHeight;t=b.add(d.doc,"mousemove",y);r=b.add(p.getDoc(),"mousemove",y);s=b.add(d.doc,"mouseup",B);o=b.add(p.getDoc(),"mouseup",B)})})}j.deltaHeight-=21;k=m=null},_nodeChanged:function(r,z,l,x,j){var C=this,i,y=0,B,u,D=C.settings,A,k,w,m,q;e.each(C.stateControls,function(n){z.setActive(n,r.queryCommandState(C.controls[n][1]))});function o(p){var s,n=j.parents,t=p;if(typeof(p)=="string"){t=function(v){return v.nodeName==p}}for(s=0;s<n.length;s++){if(t(n[s])){return n[s]}}}z.setActive("visualaid",r.hasVisual);z.setDisabled("undo",!r.undoManager.hasUndo()&&!r.typing);z.setDisabled("redo",!r.undoManager.hasRedo());z.setDisabled("outdent",!r.queryCommandState("Outdent"));i=o("A");if(u=z.get("link")){if(!i||!i.name){u.setDisabled(!i&&x);u.setActive(!!i)}}if(u=z.get("unlink")){u.setDisabled(!i&&x);u.setActive(!!i&&!i.name)}if(u=z.get("anchor")){u.setActive(!!i&&i.name)}i=o("IMG");if(u=z.get("image")){u.setActive(!!i&&l.className.indexOf("mceItem")==-1)}if(u=z.get("styleselect")){C._importClasses();m=[];f(u.items,function(n){m.push(n.value)});q=r.formatter.matchAll(m);u.select(q[0])}if(u=z.get("formatselect")){i=o(d.isBlock);if(i){u.select(i.nodeName.toLowerCase())}}o(function(p){if(p.nodeName==="SPAN"){if(!A&&p.className){A=p.className}if(!k&&p.style.fontSize){k=p.style.fontSize}if(!w&&p.style.fontFamily){w=p.style.fontFamily.replace(/[\"\']+/g,"").replace(/^([^,]+).*/,"$1").toLowerCase()}}return false});if(u=z.get("fontselect")){u.select(function(n){return n.replace(/^([^,]+).*/,"$1").toLowerCase()==w})}if(u=z.get("fontsizeselect")){if(D.theme_advanced_runtime_fontsize&&!k&&!A){k=r.dom.getStyle(l,"fontSize",true)}u.select(function(n){if(n.fontSize&&n.fontSize===k){return true}if(n["class"]&&n["class"]===A){return true}})}if(D.theme_advanced_path&&D.theme_advanced_statusbar_location){i=d.get(r.id+"_path")||d.add(r.id+"_path_row","span",{id:r.id+"_path"});d.setHTML(i,"");o(function(E){var p=E.nodeName.toLowerCase(),s,v,t="";if(E.nodeType!=1||E.nodeName==="BR"||(d.hasClass(E,"mceItemHidden")||d.hasClass(E,"mceItemRemoved"))){return}if(B=d.getAttrib(E,"mce_name")){p=B}if(e.isIE&&E.scopeName!=="HTML"){p=E.scopeName+":"+p}p=p.replace(/mce\:/g,"");switch(p){case"b":p="strong";break;case"i":p="em";break;case"img":if(B=d.getAttrib(E,"src")){t+="src: "+B+" "}break;case"a":if(B=d.getAttrib(E,"name")){t+="name: "+B+" ";p+="#"+B}if(B=d.getAttrib(E,"href")){t+="href: "+B+" "}break;case"font":if(B=d.getAttrib(E,"face")){t+="font: "+B+" "}if(B=d.getAttrib(E,"size")){t+="size: "+B+" "}if(B=d.getAttrib(E,"color")){t+="color: "+B+" "}break;case"span":if(B=d.getAttrib(E,"style")){t+="style: "+B+" "}break}if(B=d.getAttrib(E,"id")){t+="id: "+B+" "}if(B=E.className){B=B.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g,"");if(B){t+="class: "+B+" ";if(d.isBlock(E)||p=="img"||p=="span"){p+="."+B}}}p=p.replace(/(html:)/g,"");p={name:p,node:E,title:t};C.onResolveName.dispatch(C,p);t=p.title;p=p.name;v=d.create("a",{href:"javascript:;",onmousedown:"return false;",title:t,"class":"mcePath_"+(y++)},p);if(i.hasChildNodes()){i.insertBefore(d.doc.createTextNode(" \u00bb "),i.firstChild);i.insertBefore(v,i.firstChild)}else{i.appendChild(v)}},r.getBody())}},_sel:function(i){this.editor.execCommand("mceSelectNodeDepth",false,i)},_mceInsertAnchor:function(k,j){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/anchor.htm",width:320+parseInt(i.getLang("advanced.anchor_delta_width",0)),height:90+parseInt(i.getLang("advanced.anchor_delta_height",0)),inline:true},{theme_url:this.url})},_mceCharMap:function(){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/charmap.htm",width:550+parseInt(i.getLang("advanced.charmap_delta_width",0)),height:250+parseInt(i.getLang("advanced.charmap_delta_height",0)),inline:true},{theme_url:this.url})},_mceHelp:function(){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/about.htm",width:480,height:380,inline:true},{theme_url:this.url})},_mceColorPicker:function(k,j){var i=this.editor;j=j||{};i.windowManager.open({url:e.baseURL+"/themes/advanced/color_picker.htm",width:375+parseInt(i.getLang("advanced.colorpicker_delta_width",0)),height:250+parseInt(i.getLang("advanced.colorpicker_delta_height",0)),close_previous:false,inline:true},{input_color:j.color,func:j.func,theme_url:this.url})},_mceCodeEditor:function(j,k){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/source_editor.htm",width:parseInt(i.getParam("theme_advanced_source_editor_width",720)),height:parseInt(i.getParam("theme_advanced_source_editor_height",580)),inline:true,resizable:true,maximizable:true},{theme_url:this.url})},_mceImage:function(j,k){var i=this.editor;if(i.dom.getAttrib(i.selection.getNode(),"class").indexOf("mceItem")!=-1){return}i.windowManager.open({url:e.baseURL+"/themes/advanced/image.htm",width:355+parseInt(i.getLang("advanced.image_delta_width",0)),height:275+parseInt(i.getLang("advanced.image_delta_height",0)),inline:true},{theme_url:this.url})},_mceLink:function(j,k){var i=this.editor;i.windowManager.open({url:e.baseURL+"/themes/advanced/link.htm",width:310+parseInt(i.getLang("advanced.link_delta_width",0)),height:200+parseInt(i.getLang("advanced.link_delta_height",0)),inline:true},{theme_url:this.url})},_mceNewDocument:function(){var i=this.editor;i.windowManager.confirm("advanced.newdocument",function(j){if(j){i.execCommand("mceSetContent",false,"")}})},_mceForeColor:function(){var i=this;this._mceColorPicker(0,{color:i.fgColor,func:function(j){i.fgColor=j;i.editor.execCommand("ForeColor",false,j)}})},_mceBackColor:function(){var i=this;this._mceColorPicker(0,{color:i.bgColor,func:function(j){i.bgColor=j;i.editor.execCommand("HiliteColor",false,j)}})},_ufirst:function(i){return i.substring(0,1).toUpperCase()+i.substring(1)}});e.ThemeManager.add("advanced",e.themes.AdvancedTheme)}(tinymce));
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/editor_template_src.js b/plugins/TinyMCE/js/themes/advanced/editor_template_src.js
new file mode 100644 (file)
index 0000000..e0d4dac
--- /dev/null
@@ -0,0 +1,1217 @@
+/**\r
+ * editor_template_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode;\r
+\r
+       // Tell it to load theme specific language pack(s)\r
+       tinymce.ThemeManager.requireLangPack('advanced');\r
+\r
+       tinymce.create('tinymce.themes.AdvancedTheme', {\r
+               sizes : [8, 10, 12, 14, 18, 24, 36],\r
+\r
+               // Control name lookup, format: title, command\r
+               controls : {\r
+                       bold : ['bold_desc', 'Bold'],\r
+                       italic : ['italic_desc', 'Italic'],\r
+                       underline : ['underline_desc', 'Underline'],\r
+                       strikethrough : ['striketrough_desc', 'Strikethrough'],\r
+                       justifyleft : ['justifyleft_desc', 'JustifyLeft'],\r
+                       justifycenter : ['justifycenter_desc', 'JustifyCenter'],\r
+                       justifyright : ['justifyright_desc', 'JustifyRight'],\r
+                       justifyfull : ['justifyfull_desc', 'JustifyFull'],\r
+                       bullist : ['bullist_desc', 'InsertUnorderedList'],\r
+                       numlist : ['numlist_desc', 'InsertOrderedList'],\r
+                       outdent : ['outdent_desc', 'Outdent'],\r
+                       indent : ['indent_desc', 'Indent'],\r
+                       cut : ['cut_desc', 'Cut'],\r
+                       copy : ['copy_desc', 'Copy'],\r
+                       paste : ['paste_desc', 'Paste'],\r
+                       undo : ['undo_desc', 'Undo'],\r
+                       redo : ['redo_desc', 'Redo'],\r
+                       link : ['link_desc', 'mceLink'],\r
+                       unlink : ['unlink_desc', 'unlink'],\r
+                       image : ['image_desc', 'mceImage'],\r
+                       cleanup : ['cleanup_desc', 'mceCleanup'],\r
+                       help : ['help_desc', 'mceHelp'],\r
+                       code : ['code_desc', 'mceCodeEditor'],\r
+                       hr : ['hr_desc', 'InsertHorizontalRule'],\r
+                       removeformat : ['removeformat_desc', 'RemoveFormat'],\r
+                       sub : ['sub_desc', 'subscript'],\r
+                       sup : ['sup_desc', 'superscript'],\r
+                       forecolor : ['forecolor_desc', 'ForeColor'],\r
+                       forecolorpicker : ['forecolor_desc', 'mceForeColor'],\r
+                       backcolor : ['backcolor_desc', 'HiliteColor'],\r
+                       backcolorpicker : ['backcolor_desc', 'mceBackColor'],\r
+                       charmap : ['charmap_desc', 'mceCharMap'],\r
+                       visualaid : ['visualaid_desc', 'mceToggleVisualAid'],\r
+                       anchor : ['anchor_desc', 'mceInsertAnchor'],\r
+                       newdocument : ['newdocument_desc', 'mceNewDocument'],\r
+                       blockquote : ['blockquote_desc', 'mceBlockQuote']\r
+               },\r
+\r
+               stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'],\r
+\r
+               init : function(ed, url) {\r
+                       var t = this, s, v, o;\r
+       \r
+                       t.editor = ed;\r
+                       t.url = url;\r
+                       t.onResolveName = new tinymce.util.Dispatcher(this);\r
+\r
+                       // Default settings\r
+                       t.settings = s = extend({\r
+                               theme_advanced_path : true,\r
+                               theme_advanced_toolbar_location : 'bottom',\r
+                               theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect",\r
+                               theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code",\r
+                               theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap",\r
+                               theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6",\r
+                               theme_advanced_toolbar_align : "center",\r
+                               theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats",\r
+                               theme_advanced_more_colors : 1,\r
+                               theme_advanced_row_height : 23,\r
+                               theme_advanced_resize_horizontal : 1,\r
+                               theme_advanced_resizing_use_cookie : 1,\r
+                               theme_advanced_font_sizes : "1,2,3,4,5,6,7",\r
+                               readonly : ed.settings.readonly\r
+                       }, ed.settings);\r
+\r
+                       // Setup default font_size_style_values\r
+                       if (!s.font_size_style_values)\r
+                               s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt";\r
+\r
+                       if (tinymce.is(s.theme_advanced_font_sizes, 'string')) {\r
+                               s.font_size_style_values = tinymce.explode(s.font_size_style_values);\r
+                               s.font_size_classes = tinymce.explode(s.font_size_classes || '');\r
+\r
+                               // Parse string value\r
+                               o = {};\r
+                               ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes;\r
+                               each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) {\r
+                                       var cl;\r
+\r
+                                       if (k == v && v >= 1 && v <= 7) {\r
+                                               k = v + ' (' + t.sizes[v - 1] + 'pt)';\r
+                                               cl = s.font_size_classes[v - 1];\r
+                                               v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt');\r
+                                       }\r
+\r
+                                       if (/^\s*\./.test(v))\r
+                                               cl = v.replace(/\./g, '');\r
+\r
+                                       o[k] = cl ? {'class' : cl} : {fontSize : v};\r
+                               });\r
+\r
+                               s.theme_advanced_font_sizes = o;\r
+                       }\r
+\r
+                       if ((v = s.theme_advanced_path_location) && v != 'none')\r
+                               s.theme_advanced_statusbar_location = s.theme_advanced_path_location;\r
+\r
+                       if (s.theme_advanced_statusbar_location == 'none')\r
+                               s.theme_advanced_statusbar_location = 0;\r
+\r
+                       // Init editor\r
+                       ed.onInit.add(function() {\r
+                               if (!ed.settings.readonly)\r
+                                       ed.onNodeChange.add(t._nodeChanged, t);\r
+\r
+                               if (ed.settings.content_css !== false)\r
+                                       ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css"));\r
+                       });\r
+\r
+                       ed.onSetProgressState.add(function(ed, b, ti) {\r
+                               var co, id = ed.id, tb;\r
+\r
+                               if (b) {\r
+                                       t.progressTimer = setTimeout(function() {\r
+                                               co = ed.getContainer();\r
+                                               co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild);\r
+                                               tb = DOM.get(ed.id + '_tbl');\r
+\r
+                                               DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}});\r
+                                               DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}});\r
+                                       }, ti || 0);\r
+                               } else {\r
+                                       DOM.remove(id + '_blocker');\r
+                                       DOM.remove(id + '_progress');\r
+                                       clearTimeout(t.progressTimer);\r
+                               }\r
+                       });\r
+\r
+                       DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css");\r
+\r
+                       if (s.skin_variant)\r
+                               DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css");\r
+               },\r
+\r
+               createControl : function(n, cf) {\r
+                       var cd, c;\r
+\r
+                       if (c = cf.createControl(n))\r
+                               return c;\r
+\r
+                       switch (n) {\r
+                               case "styleselect":\r
+                                       return this._createStyleSelect();\r
+\r
+                               case "formatselect":\r
+                                       return this._createBlockFormats();\r
+\r
+                               case "fontselect":\r
+                                       return this._createFontSelect();\r
+\r
+                               case "fontsizeselect":\r
+                                       return this._createFontSizeSelect();\r
+\r
+                               case "forecolor":\r
+                                       return this._createForeColorMenu();\r
+\r
+                               case "backcolor":\r
+                                       return this._createBackColorMenu();\r
+                       }\r
+\r
+                       if ((cd = this.controls[n]))\r
+                               return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]});\r
+               },\r
+\r
+               execCommand : function(cmd, ui, val) {\r
+                       var f = this['_' + cmd];\r
+\r
+                       if (f) {\r
+                               f.call(this, ui, val);\r
+                               return true;\r
+                       }\r
+\r
+                       return false;\r
+               },\r
+\r
+               _importClasses : function(e) {\r
+                       var ed = this.editor, ctrl = ed.controlManager.get('styleselect');\r
+\r
+                       if (ctrl.getLength() == 0) {\r
+                               each(ed.dom.getClasses(), function(o, idx) {\r
+                                       var name = 'style_' + idx;\r
+\r
+                                       ed.formatter.register(name, {\r
+                                               inline : 'span',\r
+                                               attributes : {'class' : o['class']},\r
+                                               selector : '*'\r
+                                       });\r
+\r
+                                       ctrl.add(o['class'], name);\r
+                               });\r
+                       }\r
+               },\r
+\r
+               _createStyleSelect : function(n) {\r
+                       var t = this, ed = t.editor, ctrlMan = ed.controlManager, ctrl;\r
+\r
+                       // Setup style select box\r
+                       ctrl = ctrlMan.createListBox('styleselect', {\r
+                               title : 'advanced.style_select',\r
+                               onselect : function(name) {\r
+                                       var matches, formatNames = [];\r
+\r
+                                       each(ctrl.items, function(item) {\r
+                                               formatNames.push(item.value);\r
+                                       });\r
+\r
+                                       ed.focus();\r
+                                       ed.undoManager.add();\r
+\r
+                                       // Toggle off the current format\r
+                                       matches = ed.formatter.matchAll(formatNames);\r
+                                       if (!name || matches[0] == name)\r
+                                               ed.formatter.remove(matches[0]);\r
+                                       else\r
+                                               ed.formatter.apply(name);\r
+\r
+                                       ed.undoManager.add();\r
+                                       ed.nodeChanged();\r
+\r
+                                       return false; // No auto select\r
+                               }\r
+                       });\r
+\r
+                       // Handle specified format\r
+                       ed.onInit.add(function() {\r
+                               var counter = 0, formats = ed.getParam('style_formats');\r
+\r
+                               if (formats) {\r
+                                       each(formats, function(fmt) {\r
+                                               var name, keys = 0;\r
+\r
+                                               each(fmt, function() {keys++;});\r
+\r
+                                               if (keys > 1) {\r
+                                                       name = fmt.name = fmt.name || 'style_' + (counter++);\r
+                                                       ed.formatter.register(name, fmt);\r
+                                                       ctrl.add(fmt.title, name);\r
+                                               } else\r
+                                                       ctrl.add(fmt.title);\r
+                                       });\r
+                               } else {\r
+                                       each(ed.getParam('theme_advanced_styles', '', 'hash'), function(val, key) {\r
+                                               var name;\r
+\r
+                                               if (val) {\r
+                                                       name = 'style_' + (counter++);\r
+\r
+                                                       ed.formatter.register(name, {\r
+                                                               inline : 'span',\r
+                                                               classes : val,\r
+                                                               selector : '*'\r
+                                                       });\r
+\r
+                                                       ctrl.add(t.editor.translate(key), name);\r
+                                               }\r
+                                       });\r
+                               }\r
+                       });\r
+\r
+                       // Auto import classes if the ctrl box is empty\r
+                       if (ctrl.getLength() == 0) {\r
+                               ctrl.onPostRender.add(function(ed, n) {\r
+                                       if (!ctrl.NativeListBox) {\r
+                                               Event.add(n.id + '_text', 'focus', t._importClasses, t);\r
+                                               Event.add(n.id + '_text', 'mousedown', t._importClasses, t);\r
+                                               Event.add(n.id + '_open', 'focus', t._importClasses, t);\r
+                                               Event.add(n.id + '_open', 'mousedown', t._importClasses, t);\r
+                                       } else\r
+                                               Event.add(n.id, 'focus', t._importClasses, t);\r
+                               });\r
+                       }\r
+\r
+                       return ctrl;\r
+               },\r
+\r
+               _createFontSelect : function() {\r
+                       var c, t = this, ed = t.editor;\r
+\r
+                       c = ed.controlManager.createListBox('fontselect', {\r
+                               title : 'advanced.fontdefault',\r
+                               onselect : function(v) {\r
+                                       var cur = c.items[c.selectedIndex];\r
+\r
+                                       if (!v && cur) {\r
+                                               ed.execCommand('FontName', false, cur.value);\r
+                                               return;\r
+                                       }\r
+\r
+                                       ed.execCommand('FontName', false, v);\r
+\r
+                                       // Fake selection, execCommand will fire a nodeChange and update the selection\r
+                                       c.select(function(sv) {\r
+                                               return v == sv;\r
+                                       });\r
+\r
+                                       return false; // No auto select\r
+                               }\r
+                       });\r
+\r
+                       if (c) {\r
+                               each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) {\r
+                                       c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''});\r
+                               });\r
+                       }\r
+\r
+                       return c;\r
+               },\r
+\r
+               _createFontSizeSelect : function() {\r
+                       var t = this, ed = t.editor, c, i = 0, cl = [];\r
+\r
+                       c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) {\r
+                               var cur = c.items[c.selectedIndex];\r
+\r
+                               if (!v && cur) {\r
+                                       cur = cur.value;\r
+\r
+                                       if (cur['class']) {\r
+                                               ed.formatter.toggle('fontsize_class', {value : cur['class']});\r
+                                               ed.undoManager.add();\r
+                                               ed.nodeChanged();\r
+                                       } else {\r
+                                               ed.execCommand('FontSize', false, cur.fontSize);\r
+                                       }\r
+\r
+                                       return;\r
+                               }\r
+\r
+                               if (v['class']) {\r
+                                       ed.focus();\r
+                                       ed.undoManager.add();\r
+                                       ed.formatter.toggle('fontsize_class', {value : v['class']});\r
+                                       ed.undoManager.add();\r
+                                       ed.nodeChanged();\r
+                               } else\r
+                                       ed.execCommand('FontSize', false, v.fontSize);\r
+\r
+                               // Fake selection, execCommand will fire a nodeChange and update the selection\r
+                               c.select(function(sv) {\r
+                                       return v == sv;\r
+                               });\r
+\r
+                               return false; // No auto select\r
+                       }});\r
+\r
+                       if (c) {\r
+                               each(t.settings.theme_advanced_font_sizes, function(v, k) {\r
+                                       var fz = v.fontSize;\r
+\r
+                                       if (fz >= 1 && fz <= 7)\r
+                                               fz = t.sizes[parseInt(fz) - 1] + 'pt';\r
+\r
+                                       c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))});\r
+                               });\r
+                       }\r
+\r
+                       return c;\r
+               },\r
+\r
+               _createBlockFormats : function() {\r
+                       var c, fmts = {\r
+                               p : 'advanced.paragraph',\r
+                               address : 'advanced.address',\r
+                               pre : 'advanced.pre',\r
+                               h1 : 'advanced.h1',\r
+                               h2 : 'advanced.h2',\r
+                               h3 : 'advanced.h3',\r
+                               h4 : 'advanced.h4',\r
+                               h5 : 'advanced.h5',\r
+                               h6 : 'advanced.h6',\r
+                               div : 'advanced.div',\r
+                               blockquote : 'advanced.blockquote',\r
+                               code : 'advanced.code',\r
+                               dt : 'advanced.dt',\r
+                               dd : 'advanced.dd',\r
+                               samp : 'advanced.samp'\r
+                       }, t = this;\r
+\r
+                       c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'});\r
+                       if (c) {\r
+                               each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) {\r
+                                       c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v});\r
+                               });\r
+                       }\r
+\r
+                       return c;\r
+               },\r
+\r
+               _createForeColorMenu : function() {\r
+                       var c, t = this, s = t.settings, o = {}, v;\r
+\r
+                       if (s.theme_advanced_more_colors) {\r
+                               o.more_colors_func = function() {\r
+                                       t._mceColorPicker(0, {\r
+                                               color : c.value,\r
+                                               func : function(co) {\r
+                                                       c.setColor(co);\r
+                                               }\r
+                                       });\r
+                               };\r
+                       }\r
+\r
+                       if (v = s.theme_advanced_text_colors)\r
+                               o.colors = v;\r
+\r
+                       if (s.theme_advanced_default_foreground_color)\r
+                               o.default_color = s.theme_advanced_default_foreground_color;\r
+\r
+                       o.title = 'advanced.forecolor_desc';\r
+                       o.cmd = 'ForeColor';\r
+                       o.scope = this;\r
+\r
+                       c = t.editor.controlManager.createColorSplitButton('forecolor', o);\r
+\r
+                       return c;\r
+               },\r
+\r
+               _createBackColorMenu : function() {\r
+                       var c, t = this, s = t.settings, o = {}, v;\r
+\r
+                       if (s.theme_advanced_more_colors) {\r
+                               o.more_colors_func = function() {\r
+                                       t._mceColorPicker(0, {\r
+                                               color : c.value,\r
+                                               func : function(co) {\r
+                                                       c.setColor(co);\r
+                                               }\r
+                                       });\r
+                               };\r
+                       }\r
+\r
+                       if (v = s.theme_advanced_background_colors)\r
+                               o.colors = v;\r
+\r
+                       if (s.theme_advanced_default_background_color)\r
+                               o.default_color = s.theme_advanced_default_background_color;\r
+\r
+                       o.title = 'advanced.backcolor_desc';\r
+                       o.cmd = 'HiliteColor';\r
+                       o.scope = this;\r
+\r
+                       c = t.editor.controlManager.createColorSplitButton('backcolor', o);\r
+\r
+                       return c;\r
+               },\r
+\r
+               renderUI : function(o) {\r
+                       var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl;\r
+\r
+                       n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')});\r
+\r
+                       if (!DOM.boxModel)\r
+                               n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'});\r
+\r
+                       n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0});\r
+                       n = tb = DOM.add(n, 'tbody');\r
+\r
+                       switch ((s.theme_advanced_layout_manager || '').toLowerCase()) {\r
+                               case "rowlayout":\r
+                                       ic = t._rowLayout(s, tb, o);\r
+                                       break;\r
+\r
+                               case "customlayout":\r
+                                       ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p);\r
+                                       break;\r
+\r
+                               default:\r
+                                       ic = t._simpleLayout(s, tb, o, p);\r
+                       }\r
+\r
+                       n = o.targetNode;\r
+\r
+                       // Add classes to first and last TRs\r
+                       nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8\r
+                       DOM.addClass(nl[0], 'mceFirst');\r
+                       DOM.addClass(nl[nl.length - 1], 'mceLast');\r
+\r
+                       // Add classes to first and last TDs\r
+                       each(DOM.select('tr', tb), function(n) {\r
+                               DOM.addClass(n.firstChild, 'mceFirst');\r
+                               DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast');\r
+                       });\r
+\r
+                       if (DOM.get(s.theme_advanced_toolbar_container))\r
+                               DOM.get(s.theme_advanced_toolbar_container).appendChild(p);\r
+                       else\r
+                               DOM.insertAfter(p, n);\r
+\r
+                       Event.add(ed.id + '_path_row', 'click', function(e) {\r
+                               e = e.target;\r
+\r
+                               if (e.nodeName == 'A') {\r
+                                       t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1'));\r
+\r
+                                       return Event.cancel(e);\r
+                               }\r
+                       });\r
+/*\r
+                       if (DOM.get(ed.id + '_path_row')) {\r
+                               Event.add(ed.id + '_tbl', 'mouseover', function(e) {\r
+                                       var re;\r
+       \r
+                                       e = e.target;\r
+\r
+                                       if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) {\r
+                                               re = DOM.get(ed.id + '_path_row');\r
+                                               t.lastPath = re.innerHTML;\r
+                                               DOM.setHTML(re, e.parentNode.title);\r
+                                       }\r
+                               });\r
+\r
+                               Event.add(ed.id + '_tbl', 'mouseout', function(e) {\r
+                                       if (t.lastPath) {\r
+                                               DOM.setHTML(ed.id + '_path_row', t.lastPath);\r
+                                               t.lastPath = 0;\r
+                                       }\r
+                               });\r
+                       }\r
+*/\r
+\r
+                       if (!ed.getParam('accessibility_focus'))\r
+                               Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();});\r
+\r
+                       if (s.theme_advanced_toolbar_location == 'external')\r
+                               o.deltaHeight = 0;\r
+\r
+                       t.deltaHeight = o.deltaHeight;\r
+                       o.targetNode = null;\r
+\r
+                       return {\r
+                               iframeContainer : ic,\r
+                               editorContainer : ed.id + '_parent',\r
+                               sizeContainer : sc,\r
+                               deltaHeight : o.deltaHeight\r
+                       };\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Advanced theme',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       }\r
+               },\r
+\r
+               resizeBy : function(dw, dh) {\r
+                       var e = DOM.get(this.editor.id + '_tbl');\r
+\r
+                       this.resizeTo(e.clientWidth + dw, e.clientHeight + dh);\r
+               },\r
+\r
+               resizeTo : function(w, h) {\r
+                       var ed = this.editor, s = this.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr');\r
+\r
+                       // Boundery fix box\r
+                       w = Math.max(s.theme_advanced_resizing_min_width || 100, w);\r
+                       h = Math.max(s.theme_advanced_resizing_min_height || 100, h);\r
+                       w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w);\r
+                       h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h);\r
+\r
+                       // Resize iframe and container\r
+                       DOM.setStyle(e, 'height', '');\r
+                       DOM.setStyle(ifr, 'height', h);\r
+\r
+                       if (s.theme_advanced_resize_horizontal) {\r
+                               DOM.setStyle(e, 'width', '');\r
+                               DOM.setStyle(ifr, 'width', w);\r
+\r
+                               // Make sure that the size is never smaller than the over all ui\r
+                               if (w < e.clientWidth)\r
+                                       DOM.setStyle(ifr, 'width', e.clientWidth);\r
+                       }\r
+               },\r
+\r
+               destroy : function() {\r
+                       var id = this.editor.id;\r
+\r
+                       Event.clear(id + '_resize');\r
+                       Event.clear(id + '_path_row');\r
+                       Event.clear(id + '_external_close');\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _simpleLayout : function(s, tb, o, p) {\r
+                       var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c;\r
+\r
+                       if (s.readonly) {\r
+                               n = DOM.add(tb, 'tr');\r
+                               n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
+                               return ic;\r
+                       }\r
+\r
+                       // Create toolbar container at top\r
+                       if (lo == 'top')\r
+                               t._addToolbars(tb, o);\r
+\r
+                       // Create external toolbar\r
+                       if (lo == 'external') {\r
+                               n = c = DOM.create('div', {style : 'position:relative'});\r
+                               n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'});\r
+                               DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'});\r
+                               n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0});\r
+                               etb = DOM.add(n, 'tbody');\r
+\r
+                               if (p.firstChild.className == 'mceOldBoxModel')\r
+                                       p.firstChild.appendChild(c);\r
+                               else\r
+                                       p.insertBefore(c, p.firstChild);\r
+\r
+                               t._addToolbars(etb, o);\r
+\r
+                               ed.onMouseUp.add(function() {\r
+                                       var e = DOM.get(ed.id + '_external');\r
+                                       DOM.show(e);\r
+\r
+                                       DOM.hide(lastExtID);\r
+\r
+                                       var f = Event.add(ed.id + '_external_close', 'click', function() {\r
+                                               DOM.hide(ed.id + '_external');\r
+                                               Event.remove(ed.id + '_external_close', 'click', f);\r
+                                       });\r
+\r
+                                       DOM.show(e);\r
+                                       DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1);\r
+\r
+                                       // Fixes IE rendering bug\r
+                                       DOM.hide(e);\r
+                                       DOM.show(e);\r
+                                       e.style.filter = '';\r
+\r
+                                       lastExtID = ed.id + '_external';\r
+\r
+                                       e = null;\r
+                               });\r
+                       }\r
+\r
+                       if (sl == 'top')\r
+                               t._addStatusBar(tb, o);\r
+\r
+                       // Create iframe container\r
+                       if (!s.theme_advanced_toolbar_container) {\r
+                               n = DOM.add(tb, 'tr');\r
+                               n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
+                       }\r
+\r
+                       // Create toolbar container at bottom\r
+                       if (lo == 'bottom')\r
+                               t._addToolbars(tb, o);\r
+\r
+                       if (sl == 'bottom')\r
+                               t._addStatusBar(tb, o);\r
+\r
+                       return ic;\r
+               },\r
+\r
+               _rowLayout : function(s, tb, o) {\r
+                       var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a;\r
+\r
+                       dc = s.theme_advanced_containers_default_class || '';\r
+                       da = s.theme_advanced_containers_default_align || 'center';\r
+\r
+                       each(explode(s.theme_advanced_containers || ''), function(c, i) {\r
+                               var v = s['theme_advanced_container_' + c] || '';\r
+\r
+                               switch (v.toLowerCase()) {\r
+                                       case 'mceeditor':\r
+                                               n = DOM.add(tb, 'tr');\r
+                                               n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'});\r
+                                               break;\r
+\r
+                                       case 'mceelementpath':\r
+                                               t._addStatusBar(tb, o);\r
+                                               break;\r
+\r
+                                       default:\r
+                                               a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase();\r
+                                               a = 'mce' + t._ufirst(a);\r
+\r
+                                               n = DOM.add(DOM.add(tb, 'tr'), 'td', {\r
+                                                       'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da\r
+                                               });\r
+\r
+                                               to = cf.createToolbar("toolbar" + i);\r
+                                               t._addControls(v, to);\r
+                                               DOM.setHTML(n, to.renderHTML());\r
+                                               o.deltaHeight -= s.theme_advanced_row_height;\r
+                               }\r
+                       });\r
+\r
+                       return ic;\r
+               },\r
+\r
+               _addControls : function(v, tb) {\r
+                       var t = this, s = t.settings, di, cf = t.editor.controlManager;\r
+\r
+                       if (s.theme_advanced_disable && !t._disabled) {\r
+                               di = {};\r
+\r
+                               each(explode(s.theme_advanced_disable), function(v) {\r
+                                       di[v] = 1;\r
+                               });\r
+\r
+                               t._disabled = di;\r
+                       } else\r
+                               di = t._disabled;\r
+\r
+                       each(explode(v), function(n) {\r
+                               var c;\r
+\r
+                               if (di && di[n])\r
+                                       return;\r
+\r
+                               // Compatiblity with 2.x\r
+                               if (n == 'tablecontrols') {\r
+                                       each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) {\r
+                                               n = t.createControl(n, cf);\r
+\r
+                                               if (n)\r
+                                                       tb.add(n);\r
+                                       });\r
+\r
+                                       return;\r
+                               }\r
+\r
+                               c = t.createControl(n, cf);\r
+\r
+                               if (c)\r
+                                       tb.add(c);\r
+                       });\r
+               },\r
+\r
+               _addToolbars : function(c, o) {\r
+                       var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a;\r
+\r
+                       a = s.theme_advanced_toolbar_align.toLowerCase();\r
+                       a = 'mce' + t._ufirst(a);\r
+\r
+                       n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a});\r
+\r
+                       if (!ed.getParam('accessibility_focus'))\r
+                               h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));\r
+\r
+                       h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->'));\r
+\r
+                       // Create toolbar and add the controls\r
+                       for (i=1; (v = s['theme_advanced_buttons' + i]); i++) {\r
+                               tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i});\r
+\r
+                               if (s['theme_advanced_buttons' + i + '_add'])\r
+                                       v += ',' + s['theme_advanced_buttons' + i + '_add'];\r
+\r
+                               if (s['theme_advanced_buttons' + i + '_add_before'])\r
+                                       v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v;\r
+\r
+                               t._addControls(v, tb);\r
+\r
+                               //n.appendChild(n = tb.render());\r
+                               h.push(tb.renderHTML());\r
+\r
+                               o.deltaHeight -= s.theme_advanced_row_height;\r
+                       }\r
+\r
+                       h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->'));\r
+                       DOM.setHTML(n, h.join(''));\r
+               },\r
+\r
+               _addStatusBar : function(tb, o) {\r
+                       var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td;\r
+\r
+                       n = DOM.add(tb, 'tr');\r
+                       n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'});\r
+                       n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : '&#160;');\r
+                       DOM.add(n, 'a', {href : '#', accesskey : 'x'});\r
+\r
+                       if (s.theme_advanced_resizing) {\r
+                               DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'});\r
+\r
+                               if (s.theme_advanced_resizing_use_cookie) {\r
+                                       ed.onPostRender.add(function() {\r
+                                               var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl');\r
+\r
+                                               if (!o)\r
+                                                       return;\r
+\r
+                                               t.resizeTo(o.cw, o.ch);\r
+                                       });\r
+                               }\r
+\r
+                               ed.onPostRender.add(function() {\r
+                                       Event.add(ed.id + '_resize', 'mousedown', function(e) {\r
+                                               var mouseMoveHandler1, mouseMoveHandler2,\r
+                                                       mouseUpHandler1, mouseUpHandler2,\r
+                                                       startX, startY, startWidth, startHeight, width, height, ifrElm;\r
+\r
+                                               function resizeOnMove(e) {\r
+                                                       width = startWidth + (e.screenX - startX);\r
+                                                       height = startHeight + (e.screenY - startY);\r
+\r
+                                                       t.resizeTo(width, height);\r
+                                               };\r
+\r
+                                               function endResize(e) {\r
+                                                       // Stop listening\r
+                                                       Event.remove(DOM.doc, 'mousemove', mouseMoveHandler1);\r
+                                                       Event.remove(ed.getDoc(), 'mousemove', mouseMoveHandler2);\r
+                                                       Event.remove(DOM.doc, 'mouseup', mouseUpHandler1);\r
+                                                       Event.remove(ed.getDoc(), 'mouseup', mouseUpHandler2);\r
+\r
+                                                       // Store away the size\r
+                                                       if (s.theme_advanced_resizing_use_cookie) {\r
+                                                               Cookie.setHash("TinyMCE_" + ed.id + "_size", {\r
+                                                                       cw : width,\r
+                                                                       ch : height\r
+                                                               });\r
+                                                       }\r
+                                               };\r
+\r
+                                               e.preventDefault();\r
+\r
+                                               // Get the current rect size\r
+                                               startX = e.screenX;\r
+                                               startY = e.screenY;\r
+                                               ifrElm = DOM.get(t.editor.id + '_ifr');\r
+                                               startWidth = width = ifrElm.clientWidth;\r
+                                               startHeight = height = ifrElm.clientHeight;\r
+\r
+                                               // Register envent handlers\r
+                                               mouseMoveHandler1 = Event.add(DOM.doc, 'mousemove', resizeOnMove);\r
+                                               mouseMoveHandler2 = Event.add(ed.getDoc(), 'mousemove', resizeOnMove);\r
+                                               mouseUpHandler1 = Event.add(DOM.doc, 'mouseup', endResize);\r
+                                               mouseUpHandler2 = Event.add(ed.getDoc(), 'mouseup', endResize);\r
+                                       });\r
+                               });\r
+                       }\r
+\r
+                       o.deltaHeight -= 21;\r
+                       n = tb = null;\r
+               },\r
+\r
+               _nodeChanged : function(ed, cm, n, co, ob) {\r
+                       var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn, formatNames, matches;\r
+\r
+                       tinymce.each(t.stateControls, function(c) {\r
+                               cm.setActive(c, ed.queryCommandState(t.controls[c][1]));\r
+                       });\r
+\r
+                       function getParent(name) {\r
+                               var i, parents = ob.parents, func = name;\r
+\r
+                               if (typeof(name) == 'string') {\r
+                                       func = function(node) {\r
+                                               return node.nodeName == name;\r
+                                       };\r
+                               }\r
+\r
+                               for (i = 0; i < parents.length; i++) {\r
+                                       if (func(parents[i]))\r
+                                               return parents[i];\r
+                               }\r
+                       };\r
+\r
+                       cm.setActive('visualaid', ed.hasVisual);\r
+                       cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing);\r
+                       cm.setDisabled('redo', !ed.undoManager.hasRedo());\r
+                       cm.setDisabled('outdent', !ed.queryCommandState('Outdent'));\r
+\r
+                       p = getParent('A');\r
+                       if (c = cm.get('link')) {\r
+                               if (!p || !p.name) {\r
+                                       c.setDisabled(!p && co);\r
+                                       c.setActive(!!p);\r
+                               }\r
+                       }\r
+\r
+                       if (c = cm.get('unlink')) {\r
+                               c.setDisabled(!p && co);\r
+                               c.setActive(!!p && !p.name);\r
+                       }\r
+\r
+                       if (c = cm.get('anchor')) {\r
+                               c.setActive(!!p && p.name);\r
+                       }\r
+\r
+                       p = getParent('IMG');\r
+                       if (c = cm.get('image'))\r
+                               c.setActive(!!p && n.className.indexOf('mceItem') == -1);\r
+\r
+                       if (c = cm.get('styleselect')) {\r
+                               t._importClasses();\r
+\r
+                               formatNames = [];\r
+                               each(c.items, function(item) {\r
+                                       formatNames.push(item.value);\r
+                               });\r
+\r
+                               matches = ed.formatter.matchAll(formatNames);\r
+                               c.select(matches[0]);\r
+                       }\r
+\r
+                       if (c = cm.get('formatselect')) {\r
+                               p = getParent(DOM.isBlock);\r
+\r
+                               if (p)\r
+                                       c.select(p.nodeName.toLowerCase());\r
+                       }\r
+\r
+                       // Find out current fontSize, fontFamily and fontClass\r
+                       getParent(function(n) {\r
+                               if (n.nodeName === 'SPAN') {\r
+                                       if (!cl && n.className)\r
+                                               cl = n.className;\r
+\r
+                                       if (!fz && n.style.fontSize)\r
+                                               fz = n.style.fontSize;\r
+\r
+                                       if (!fn && n.style.fontFamily)\r
+                                               fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase();\r
+                               }\r
+\r
+                               return false;\r
+                       });\r
+\r
+                       if (c = cm.get('fontselect')) {\r
+                               c.select(function(v) {\r
+                                       return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn;\r
+                               });\r
+                       }\r
+\r
+                       // Select font size\r
+                       if (c = cm.get('fontsizeselect')) {\r
+                               // Use computed style\r
+                               if (s.theme_advanced_runtime_fontsize && !fz && !cl)\r
+                                       fz = ed.dom.getStyle(n, 'fontSize', true);\r
+\r
+                               c.select(function(v) {\r
+                                       if (v.fontSize && v.fontSize === fz)\r
+                                               return true;\r
+\r
+                                       if (v['class'] && v['class'] === cl)\r
+                                               return true;\r
+                               });\r
+                       }\r
+\r
+                       if (s.theme_advanced_path && s.theme_advanced_statusbar_location) {\r
+                               p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'});\r
+                               DOM.setHTML(p, '');\r
+\r
+                               getParent(function(n) {\r
+                                       var na = n.nodeName.toLowerCase(), u, pi, ti = '';\r
+\r
+                                       /*if (n.getAttribute('_mce_bogus'))\r
+                                               return;\r
+*/\r
+                                       // Ignore non element and hidden elements\r
+                                       if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved')))\r
+                                               return;\r
+\r
+                                       // Fake name\r
+                                       if (v = DOM.getAttrib(n, 'mce_name'))\r
+                                               na = v;\r
+\r
+                                       // Handle prefix\r
+                                       if (tinymce.isIE && n.scopeName !== 'HTML')\r
+                                               na = n.scopeName + ':' + na;\r
+\r
+                                       // Remove internal prefix\r
+                                       na = na.replace(/mce\:/g, '');\r
+\r
+                                       // Handle node name\r
+                                       switch (na) {\r
+                                               case 'b':\r
+                                                       na = 'strong';\r
+                                                       break;\r
+\r
+                                               case 'i':\r
+                                                       na = 'em';\r
+                                                       break;\r
+\r
+                                               case 'img':\r
+                                                       if (v = DOM.getAttrib(n, 'src'))\r
+                                                               ti += 'src: ' + v + ' ';\r
+\r
+                                                       break;\r
+\r
+                                               case 'a':\r
+                                                       if (v = DOM.getAttrib(n, 'name')) {\r
+                                                               ti += 'name: ' + v + ' ';\r
+                                                               na += '#' + v;\r
+                                                       }\r
+\r
+                                                       if (v = DOM.getAttrib(n, 'href'))\r
+                                                               ti += 'href: ' + v + ' ';\r
+\r
+                                                       break;\r
+\r
+                                               case 'font':\r
+                                                       if (v = DOM.getAttrib(n, 'face'))\r
+                                                               ti += 'font: ' + v + ' ';\r
+\r
+                                                       if (v = DOM.getAttrib(n, 'size'))\r
+                                                               ti += 'size: ' + v + ' ';\r
+\r
+                                                       if (v = DOM.getAttrib(n, 'color'))\r
+                                                               ti += 'color: ' + v + ' ';\r
+\r
+                                                       break;\r
+\r
+                                               case 'span':\r
+                                                       if (v = DOM.getAttrib(n, 'style'))\r
+                                                               ti += 'style: ' + v + ' ';\r
+\r
+                                                       break;\r
+                                       }\r
+\r
+                                       if (v = DOM.getAttrib(n, 'id'))\r
+                                               ti += 'id: ' + v + ' ';\r
+\r
+                                       if (v = n.className) {\r
+                                               v = v.replace(/\b\s*(webkit|mce|Apple-)\w+\s*\b/g, '')\r
+\r
+                                               if (v) {\r
+                                                       ti += 'class: ' + v + ' ';\r
+\r
+                                                       if (DOM.isBlock(n) || na == 'img' || na == 'span')\r
+                                                               na += '.' + v;\r
+                                               }\r
+                                       }\r
+\r
+                                       na = na.replace(/(html:)/g, '');\r
+                                       na = {name : na, node : n, title : ti};\r
+                                       t.onResolveName.dispatch(t, na);\r
+                                       ti = na.title;\r
+                                       na = na.name;\r
+\r
+                                       //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');";\r
+                                       pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na);\r
+\r
+                                       if (p.hasChildNodes()) {\r
+                                               p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild);\r
+                                               p.insertBefore(pi, p.firstChild);\r
+                                       } else\r
+                                               p.appendChild(pi);\r
+                               }, ed.getBody());\r
+                       }\r
+               },\r
+\r
+               // Commands gets called by execCommand\r
+\r
+               _sel : function(v) {\r
+                       this.editor.execCommand('mceSelectNodeDepth', false, v);\r
+               },\r
+\r
+               _mceInsertAnchor : function(ui, v) {\r
+                       var ed = this.editor;\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/anchor.htm',\r
+                               width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)),\r
+                               height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)),\r
+                               inline : true\r
+                       }, {\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceCharMap : function() {\r
+                       var ed = this.editor;\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/charmap.htm',\r
+                               width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)),\r
+                               height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)),\r
+                               inline : true\r
+                       }, {\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceHelp : function() {\r
+                       var ed = this.editor;\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/about.htm',\r
+                               width : 480,\r
+                               height : 380,\r
+                               inline : true\r
+                       }, {\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceColorPicker : function(u, v) {\r
+                       var ed = this.editor;\r
+\r
+                       v = v || {};\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/color_picker.htm',\r
+                               width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)),\r
+                               height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)),\r
+                               close_previous : false,\r
+                               inline : true\r
+                       }, {\r
+                               input_color : v.color,\r
+                               func : v.func,\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceCodeEditor : function(ui, val) {\r
+                       var ed = this.editor;\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/source_editor.htm',\r
+                               width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)),\r
+                               height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)),\r
+                               inline : true,\r
+                               resizable : true,\r
+                               maximizable : true\r
+                       }, {\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceImage : function(ui, val) {\r
+                       var ed = this.editor;\r
+\r
+                       // Internal image object like a flash placeholder\r
+                       if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1)\r
+                               return;\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/image.htm',\r
+                               width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)),\r
+                               height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)),\r
+                               inline : true\r
+                       }, {\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceLink : function(ui, val) {\r
+                       var ed = this.editor;\r
+\r
+                       ed.windowManager.open({\r
+                               url : tinymce.baseURL + '/themes/advanced/link.htm',\r
+                               width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)),\r
+                               height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)),\r
+                               inline : true\r
+                       }, {\r
+                               theme_url : this.url\r
+                       });\r
+               },\r
+\r
+               _mceNewDocument : function() {\r
+                       var ed = this.editor;\r
+\r
+                       ed.windowManager.confirm('advanced.newdocument', function(s) {\r
+                               if (s)\r
+                                       ed.execCommand('mceSetContent', false, '');\r
+                       });\r
+               },\r
+\r
+               _mceForeColor : function() {\r
+                       var t = this;\r
+\r
+                       this._mceColorPicker(0, {\r
+                               color: t.fgColor,\r
+                               func : function(co) {\r
+                                       t.fgColor = co;\r
+                                       t.editor.execCommand('ForeColor', false, co);\r
+                               }\r
+                       });\r
+               },\r
+\r
+               _mceBackColor : function() {\r
+                       var t = this;\r
+\r
+                       this._mceColorPicker(0, {\r
+                               color: t.bgColor,\r
+                               func : function(co) {\r
+                                       t.bgColor = co;\r
+                                       t.editor.execCommand('HiliteColor', false, co);\r
+                               }\r
+                       });\r
+               },\r
+\r
+               _ufirst : function(s) {\r
+                       return s.substring(0, 1).toUpperCase() + s.substring(1);\r
+               }\r
+       });\r
+\r
+       tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme);\r
+}(tinymce));
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/image.htm b/plugins/TinyMCE/js/themes/advanced/image.htm
new file mode 100644 (file)
index 0000000..f30d670
--- /dev/null
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.image_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="js/image.js"></script>\r
+</head>\r
+<body id="image" style="display: none">\r
+<form onsubmit="ImageDialog.update();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.image_title}</a></span></li>\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+     <table border="0" cellpadding="4" cellspacing="0">\r
+          <tr>\r
+            <td class="nowrap"><label for="src">{#advanced_dlg.image_src}</label></td>\r
+            <td><table border="0" cellspacing="0" cellpadding="0">\r
+                <tr>\r
+                  <td><input id="src" name="src" type="text" class="mceFocus" value="" style="width: 200px" onchange="ImageDialog.getImageData();" /></td>\r
+                  <td id="srcbrowsercontainer">&nbsp;</td>\r
+                </tr>\r
+              </table></td>\r
+          </tr>\r
+                 <tr>\r
+                       <td><label for="image_list">{#advanced_dlg.image_list}</label></td>\r
+                       <td><select id="image_list" name="image_list" onchange="document.getElementById('src').value=this.options[this.selectedIndex].value;document.getElementById('alt').value=this.options[this.selectedIndex].text;"></select></td>\r
+                 </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="alt">{#advanced_dlg.image_alt}</label></td>\r
+            <td><input id="alt" name="alt" type="text" value="" style="width: 200px" /></td>\r
+          </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="align">{#advanced_dlg.image_align}</label></td>\r
+            <td><select id="align" name="align" onchange="ImageDialog.updateStyle();">\r
+                <option value="">{#not_set}</option>\r
+                <option value="baseline">{#advanced_dlg.image_align_baseline}</option>\r
+                <option value="top">{#advanced_dlg.image_align_top}</option>\r
+                <option value="middle">{#advanced_dlg.image_align_middle}</option>\r
+                <option value="bottom">{#advanced_dlg.image_align_bottom}</option>\r
+                <option value="text-top">{#advanced_dlg.image_align_texttop}</option>\r
+                <option value="text-bottom">{#advanced_dlg.image_align_textbottom}</option>\r
+                <option value="left">{#advanced_dlg.image_align_left}</option>\r
+                <option value="right">{#advanced_dlg.image_align_right}</option>\r
+              </select></td>\r
+          </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="width">{#advanced_dlg.image_dimensions}</label></td>\r
+            <td><input id="width" name="width" type="text" value="" size="3" maxlength="5" />\r
+              x\r
+              <input id="height" name="height" type="text" value="" size="3" maxlength="5" /></td>\r
+          </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="border">{#advanced_dlg.image_border}</label></td>\r
+            <td><input id="border" name="border" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
+          </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="vspace">{#advanced_dlg.image_vspace}</label></td>\r
+            <td><input id="vspace" name="vspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
+          </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="hspace">{#advanced_dlg.image_hspace}</label></td>\r
+            <td><input id="hspace" name="hspace" type="text" value="" size="3" maxlength="3" onchange="ImageDialog.updateStyle();" /></td>\r
+          </tr>\r
+        </table>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg b/plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg
new file mode 100644 (file)
index 0000000..b4c542d
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/img/colorpicker.jpg differ
diff --git a/plugins/TinyMCE/js/themes/advanced/img/icons.gif b/plugins/TinyMCE/js/themes/advanced/img/icons.gif
new file mode 100644 (file)
index 0000000..e46de53
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/img/icons.gif differ
diff --git a/plugins/TinyMCE/js/themes/advanced/js/about.js b/plugins/TinyMCE/js/themes/advanced/js/about.js
new file mode 100644 (file)
index 0000000..5cee9ed
--- /dev/null
@@ -0,0 +1,72 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+function init() {\r
+       var ed, tcont;\r
+\r
+       tinyMCEPopup.resizeToInnerSize();\r
+       ed = tinyMCEPopup.editor;\r
+\r
+       // Give FF some time\r
+       window.setTimeout(insertHelpIFrame, 10);\r
+\r
+       tcont = document.getElementById('plugintablecontainer');\r
+       document.getElementById('plugins_tab').style.display = 'none';\r
+\r
+       var html = "";\r
+       html += '<table id="plugintable">';\r
+       html += '<thead>';\r
+       html += '<tr>';\r
+       html += '<td>' + ed.getLang('advanced_dlg.about_plugin') + '</td>';\r
+       html += '<td>' + ed.getLang('advanced_dlg.about_author') + '</td>';\r
+       html += '<td>' + ed.getLang('advanced_dlg.about_version') + '</td>';\r
+       html += '</tr>';\r
+       html += '</thead>';\r
+       html += '<tbody>';\r
+\r
+       tinymce.each(ed.plugins, function(p, n) {\r
+               var info;\r
+\r
+               if (!p.getInfo)\r
+                       return;\r
+\r
+               html += '<tr>';\r
+\r
+               info = p.getInfo();\r
+\r
+               if (info.infourl != null && info.infourl != '')\r
+                       html += '<td width="50%" title="' + n + '"><a href="' + info.infourl + '" target="_blank">' + info.longname + '</a></td>';\r
+               else\r
+                       html += '<td width="50%" title="' + n + '">' + info.longname + '</td>';\r
+\r
+               if (info.authorurl != null && info.authorurl != '')\r
+                       html += '<td width="35%"><a href="' + info.authorurl + '" target="_blank">' + info.author + '</a></td>';\r
+               else\r
+                       html += '<td width="35%">' + info.author + '</td>';\r
+\r
+               html += '<td width="15%">' + info.version + '</td>';\r
+               html += '</tr>';\r
+\r
+               document.getElementById('plugins_tab').style.display = '';\r
+\r
+       });\r
+\r
+       html += '</tbody>';\r
+       html += '</table>';\r
+\r
+       tcont.innerHTML = html;\r
+\r
+       tinyMCEPopup.dom.get('version').innerHTML = tinymce.majorVersion + "." + tinymce.minorVersion;\r
+       tinyMCEPopup.dom.get('date').innerHTML = tinymce.releaseDate;\r
+}\r
+\r
+function insertHelpIFrame() {\r
+       var html;\r
+\r
+       if (tinyMCEPopup.getParam('docs_url')) {\r
+               html = '<iframe width="100%" height="300" src="' + tinyMCEPopup.editor.baseURI.toAbsolute(tinyMCEPopup.getParam('docs_url')) + '"></iframe>';\r
+               document.getElementById('iframecontainer').innerHTML = html;\r
+               document.getElementById('help_tab').style.display = 'block';\r
+       }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/anchor.js b/plugins/TinyMCE/js/themes/advanced/js/anchor.js
new file mode 100644 (file)
index 0000000..7fe7810
--- /dev/null
@@ -0,0 +1,37 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var AnchorDialog = {\r
+       init : function(ed) {\r
+               var action, elm, f = document.forms[0];\r
+\r
+               this.editor = ed;\r
+               elm = ed.dom.getParent(ed.selection.getNode(), 'A');\r
+               v = ed.dom.getAttrib(elm, 'name');\r
+\r
+               if (v) {\r
+                       this.action = 'update';\r
+                       f.anchorName.value = v;\r
+               }\r
+\r
+               f.insert.value = ed.getLang(elm ? 'update' : 'insert');\r
+       },\r
+\r
+       update : function() {\r
+               var ed = this.editor, elm, name = document.forms[0].anchorName.value;\r
+\r
+               tinyMCEPopup.restoreSelection();\r
+\r
+               if (this.action != 'update')\r
+                       ed.selection.collapse(1);\r
+\r
+               elm = ed.dom.getParent(ed.selection.getNode(), 'A');\r
+               if (elm)\r
+                       elm.name = name;\r
+               else\r
+                       ed.execCommand('mceInsertContent', 0, ed.dom.createHTML('a', {name : name, 'class' : 'mceItemAnchor'}, ''));\r
+\r
+               tinyMCEPopup.close();\r
+       }\r
+};\r
+\r
+tinyMCEPopup.onInit.add(AnchorDialog.init, AnchorDialog);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/charmap.js b/plugins/TinyMCE/js/themes/advanced/js/charmap.js
new file mode 100644 (file)
index 0000000..8c5aea1
--- /dev/null
@@ -0,0 +1,335 @@
+/**\r
+ * charmap.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+tinyMCEPopup.requireLangPack();\r
+\r
+var charmap = [\r
+       ['&nbsp;',    '&#160;',  true, 'no-break space'],\r
+       ['&amp;',     '&#38;',   true, 'ampersand'],\r
+       ['&quot;',    '&#34;',   true, 'quotation mark'],\r
+// finance\r
+       ['&cent;',    '&#162;',  true, 'cent sign'],\r
+       ['&euro;',    '&#8364;', true, 'euro sign'],\r
+       ['&pound;',   '&#163;',  true, 'pound sign'],\r
+       ['&yen;',     '&#165;',  true, 'yen sign'],\r
+// signs\r
+       ['&copy;',    '&#169;',  true, 'copyright sign'],\r
+       ['&reg;',     '&#174;',  true, 'registered sign'],\r
+       ['&trade;',   '&#8482;', true, 'trade mark sign'],\r
+       ['&permil;',  '&#8240;', true, 'per mille sign'],\r
+       ['&micro;',   '&#181;',  true, 'micro sign'],\r
+       ['&middot;',  '&#183;',  true, 'middle dot'],\r
+       ['&bull;',    '&#8226;', true, 'bullet'],\r
+       ['&hellip;',  '&#8230;', true, 'three dot leader'],\r
+       ['&prime;',   '&#8242;', true, 'minutes / feet'],\r
+       ['&Prime;',   '&#8243;', true, 'seconds / inches'],\r
+       ['&sect;',    '&#167;',  true, 'section sign'],\r
+       ['&para;',    '&#182;',  true, 'paragraph sign'],\r
+       ['&szlig;',   '&#223;',  true, 'sharp s / ess-zed'],\r
+// quotations\r
+       ['&lsaquo;',  '&#8249;', true, 'single left-pointing angle quotation mark'],\r
+       ['&rsaquo;',  '&#8250;', true, 'single right-pointing angle quotation mark'],\r
+       ['&laquo;',   '&#171;',  true, 'left pointing guillemet'],\r
+       ['&raquo;',   '&#187;',  true, 'right pointing guillemet'],\r
+       ['&lsquo;',   '&#8216;', true, 'left single quotation mark'],\r
+       ['&rsquo;',   '&#8217;', true, 'right single quotation mark'],\r
+       ['&ldquo;',   '&#8220;', true, 'left double quotation mark'],\r
+       ['&rdquo;',   '&#8221;', true, 'right double quotation mark'],\r
+       ['&sbquo;',   '&#8218;', true, 'single low-9 quotation mark'],\r
+       ['&bdquo;',   '&#8222;', true, 'double low-9 quotation mark'],\r
+       ['&lt;',      '&#60;',   true, 'less-than sign'],\r
+       ['&gt;',      '&#62;',   true, 'greater-than sign'],\r
+       ['&le;',      '&#8804;', true, 'less-than or equal to'],\r
+       ['&ge;',      '&#8805;', true, 'greater-than or equal to'],\r
+       ['&ndash;',   '&#8211;', true, 'en dash'],\r
+       ['&mdash;',   '&#8212;', true, 'em dash'],\r
+       ['&macr;',    '&#175;',  true, 'macron'],\r
+       ['&oline;',   '&#8254;', true, 'overline'],\r
+       ['&curren;',  '&#164;',  true, 'currency sign'],\r
+       ['&brvbar;',  '&#166;',  true, 'broken bar'],\r
+       ['&uml;',     '&#168;',  true, 'diaeresis'],\r
+       ['&iexcl;',   '&#161;',  true, 'inverted exclamation mark'],\r
+       ['&iquest;',  '&#191;',  true, 'turned question mark'],\r
+       ['&circ;',    '&#710;',  true, 'circumflex accent'],\r
+       ['&tilde;',   '&#732;',  true, 'small tilde'],\r
+       ['&deg;',     '&#176;',  true, 'degree sign'],\r
+       ['&minus;',   '&#8722;', true, 'minus sign'],\r
+       ['&plusmn;',  '&#177;',  true, 'plus-minus sign'],\r
+       ['&divide;',  '&#247;',  true, 'division sign'],\r
+       ['&frasl;',   '&#8260;', true, 'fraction slash'],\r
+       ['&times;',   '&#215;',  true, 'multiplication sign'],\r
+       ['&sup1;',    '&#185;',  true, 'superscript one'],\r
+       ['&sup2;',    '&#178;',  true, 'superscript two'],\r
+       ['&sup3;',    '&#179;',  true, 'superscript three'],\r
+       ['&frac14;',  '&#188;',  true, 'fraction one quarter'],\r
+       ['&frac12;',  '&#189;',  true, 'fraction one half'],\r
+       ['&frac34;',  '&#190;',  true, 'fraction three quarters'],\r
+// math / logical\r
+       ['&fnof;',    '&#402;',  true, 'function / florin'],\r
+       ['&int;',     '&#8747;', true, 'integral'],\r
+       ['&sum;',     '&#8721;', true, 'n-ary sumation'],\r
+       ['&infin;',   '&#8734;', true, 'infinity'],\r
+       ['&radic;',   '&#8730;', true, 'square root'],\r
+       ['&sim;',     '&#8764;', false,'similar to'],\r
+       ['&cong;',    '&#8773;', false,'approximately equal to'],\r
+       ['&asymp;',   '&#8776;', true, 'almost equal to'],\r
+       ['&ne;',      '&#8800;', true, 'not equal to'],\r
+       ['&equiv;',   '&#8801;', true, 'identical to'],\r
+       ['&isin;',    '&#8712;', false,'element of'],\r
+       ['&notin;',   '&#8713;', false,'not an element of'],\r
+       ['&ni;',      '&#8715;', false,'contains as member'],\r
+       ['&prod;',    '&#8719;', true, 'n-ary product'],\r
+       ['&and;',     '&#8743;', false,'logical and'],\r
+       ['&or;',      '&#8744;', false,'logical or'],\r
+       ['&not;',     '&#172;',  true, 'not sign'],\r
+       ['&cap;',     '&#8745;', true, 'intersection'],\r
+       ['&cup;',     '&#8746;', false,'union'],\r
+       ['&part;',    '&#8706;', true, 'partial differential'],\r
+       ['&forall;',  '&#8704;', false,'for all'],\r
+       ['&exist;',   '&#8707;', false,'there exists'],\r
+       ['&empty;',   '&#8709;', false,'diameter'],\r
+       ['&nabla;',   '&#8711;', false,'backward difference'],\r
+       ['&lowast;',  '&#8727;', false,'asterisk operator'],\r
+       ['&prop;',    '&#8733;', false,'proportional to'],\r
+       ['&ang;',     '&#8736;', false,'angle'],\r
+// undefined\r
+       ['&acute;',   '&#180;',  true, 'acute accent'],\r
+       ['&cedil;',   '&#184;',  true, 'cedilla'],\r
+       ['&ordf;',    '&#170;',  true, 'feminine ordinal indicator'],\r
+       ['&ordm;',    '&#186;',  true, 'masculine ordinal indicator'],\r
+       ['&dagger;',  '&#8224;', true, 'dagger'],\r
+       ['&Dagger;',  '&#8225;', true, 'double dagger'],\r
+// alphabetical special chars\r
+       ['&Agrave;',  '&#192;',  true, 'A - grave'],\r
+       ['&Aacute;',  '&#193;',  true, 'A - acute'],\r
+       ['&Acirc;',   '&#194;',  true, 'A - circumflex'],\r
+       ['&Atilde;',  '&#195;',  true, 'A - tilde'],\r
+       ['&Auml;',    '&#196;',  true, 'A - diaeresis'],\r
+       ['&Aring;',   '&#197;',  true, 'A - ring above'],\r
+       ['&AElig;',   '&#198;',  true, 'ligature AE'],\r
+       ['&Ccedil;',  '&#199;',  true, 'C - cedilla'],\r
+       ['&Egrave;',  '&#200;',  true, 'E - grave'],\r
+       ['&Eacute;',  '&#201;',  true, 'E - acute'],\r
+       ['&Ecirc;',   '&#202;',  true, 'E - circumflex'],\r
+       ['&Euml;',    '&#203;',  true, 'E - diaeresis'],\r
+       ['&Igrave;',  '&#204;',  true, 'I - grave'],\r
+       ['&Iacute;',  '&#205;',  true, 'I - acute'],\r
+       ['&Icirc;',   '&#206;',  true, 'I - circumflex'],\r
+       ['&Iuml;',    '&#207;',  true, 'I - diaeresis'],\r
+       ['&ETH;',     '&#208;',  true, 'ETH'],\r
+       ['&Ntilde;',  '&#209;',  true, 'N - tilde'],\r
+       ['&Ograve;',  '&#210;',  true, 'O - grave'],\r
+       ['&Oacute;',  '&#211;',  true, 'O - acute'],\r
+       ['&Ocirc;',   '&#212;',  true, 'O - circumflex'],\r
+       ['&Otilde;',  '&#213;',  true, 'O - tilde'],\r
+       ['&Ouml;',    '&#214;',  true, 'O - diaeresis'],\r
+       ['&Oslash;',  '&#216;',  true, 'O - slash'],\r
+       ['&OElig;',   '&#338;',  true, 'ligature OE'],\r
+       ['&Scaron;',  '&#352;',  true, 'S - caron'],\r
+       ['&Ugrave;',  '&#217;',  true, 'U - grave'],\r
+       ['&Uacute;',  '&#218;',  true, 'U - acute'],\r
+       ['&Ucirc;',   '&#219;',  true, 'U - circumflex'],\r
+       ['&Uuml;',    '&#220;',  true, 'U - diaeresis'],\r
+       ['&Yacute;',  '&#221;',  true, 'Y - acute'],\r
+       ['&Yuml;',    '&#376;',  true, 'Y - diaeresis'],\r
+       ['&THORN;',   '&#222;',  true, 'THORN'],\r
+       ['&agrave;',  '&#224;',  true, 'a - grave'],\r
+       ['&aacute;',  '&#225;',  true, 'a - acute'],\r
+       ['&acirc;',   '&#226;',  true, 'a - circumflex'],\r
+       ['&atilde;',  '&#227;',  true, 'a - tilde'],\r
+       ['&auml;',    '&#228;',  true, 'a - diaeresis'],\r
+       ['&aring;',   '&#229;',  true, 'a - ring above'],\r
+       ['&aelig;',   '&#230;',  true, 'ligature ae'],\r
+       ['&ccedil;',  '&#231;',  true, 'c - cedilla'],\r
+       ['&egrave;',  '&#232;',  true, 'e - grave'],\r
+       ['&eacute;',  '&#233;',  true, 'e - acute'],\r
+       ['&ecirc;',   '&#234;',  true, 'e - circumflex'],\r
+       ['&euml;',    '&#235;',  true, 'e - diaeresis'],\r
+       ['&igrave;',  '&#236;',  true, 'i - grave'],\r
+       ['&iacute;',  '&#237;',  true, 'i - acute'],\r
+       ['&icirc;',   '&#238;',  true, 'i - circumflex'],\r
+       ['&iuml;',    '&#239;',  true, 'i - diaeresis'],\r
+       ['&eth;',     '&#240;',  true, 'eth'],\r
+       ['&ntilde;',  '&#241;',  true, 'n - tilde'],\r
+       ['&ograve;',  '&#242;',  true, 'o - grave'],\r
+       ['&oacute;',  '&#243;',  true, 'o - acute'],\r
+       ['&ocirc;',   '&#244;',  true, 'o - circumflex'],\r
+       ['&otilde;',  '&#245;',  true, 'o - tilde'],\r
+       ['&ouml;',    '&#246;',  true, 'o - diaeresis'],\r
+       ['&oslash;',  '&#248;',  true, 'o slash'],\r
+       ['&oelig;',   '&#339;',  true, 'ligature oe'],\r
+       ['&scaron;',  '&#353;',  true, 's - caron'],\r
+       ['&ugrave;',  '&#249;',  true, 'u - grave'],\r
+       ['&uacute;',  '&#250;',  true, 'u - acute'],\r
+       ['&ucirc;',   '&#251;',  true, 'u - circumflex'],\r
+       ['&uuml;',    '&#252;',  true, 'u - diaeresis'],\r
+       ['&yacute;',  '&#253;',  true, 'y - acute'],\r
+       ['&thorn;',   '&#254;',  true, 'thorn'],\r
+       ['&yuml;',    '&#255;',  true, 'y - diaeresis'],\r
+    ['&Alpha;',   '&#913;',  true, 'Alpha'],\r
+       ['&Beta;',    '&#914;',  true, 'Beta'],\r
+       ['&Gamma;',   '&#915;',  true, 'Gamma'],\r
+       ['&Delta;',   '&#916;',  true, 'Delta'],\r
+       ['&Epsilon;', '&#917;',  true, 'Epsilon'],\r
+       ['&Zeta;',    '&#918;',  true, 'Zeta'],\r
+       ['&Eta;',     '&#919;',  true, 'Eta'],\r
+       ['&Theta;',   '&#920;',  true, 'Theta'],\r
+       ['&Iota;',    '&#921;',  true, 'Iota'],\r
+       ['&Kappa;',   '&#922;',  true, 'Kappa'],\r
+       ['&Lambda;',  '&#923;',  true, 'Lambda'],\r
+       ['&Mu;',      '&#924;',  true, 'Mu'],\r
+       ['&Nu;',      '&#925;',  true, 'Nu'],\r
+       ['&Xi;',      '&#926;',  true, 'Xi'],\r
+       ['&Omicron;', '&#927;',  true, 'Omicron'],\r
+       ['&Pi;',      '&#928;',  true, 'Pi'],\r
+       ['&Rho;',     '&#929;',  true, 'Rho'],\r
+       ['&Sigma;',   '&#931;',  true, 'Sigma'],\r
+       ['&Tau;',     '&#932;',  true, 'Tau'],\r
+       ['&Upsilon;', '&#933;',  true, 'Upsilon'],\r
+       ['&Phi;',     '&#934;',  true, 'Phi'],\r
+       ['&Chi;',     '&#935;',  true, 'Chi'],\r
+       ['&Psi;',     '&#936;',  true, 'Psi'],\r
+       ['&Omega;',   '&#937;',  true, 'Omega'],\r
+       ['&alpha;',   '&#945;',  true, 'alpha'],\r
+       ['&beta;',    '&#946;',  true, 'beta'],\r
+       ['&gamma;',   '&#947;',  true, 'gamma'],\r
+       ['&delta;',   '&#948;',  true, 'delta'],\r
+       ['&epsilon;', '&#949;',  true, 'epsilon'],\r
+       ['&zeta;',    '&#950;',  true, 'zeta'],\r
+       ['&eta;',     '&#951;',  true, 'eta'],\r
+       ['&theta;',   '&#952;',  true, 'theta'],\r
+       ['&iota;',    '&#953;',  true, 'iota'],\r
+       ['&kappa;',   '&#954;',  true, 'kappa'],\r
+       ['&lambda;',  '&#955;',  true, 'lambda'],\r
+       ['&mu;',      '&#956;',  true, 'mu'],\r
+       ['&nu;',      '&#957;',  true, 'nu'],\r
+       ['&xi;',      '&#958;',  true, 'xi'],\r
+       ['&omicron;', '&#959;',  true, 'omicron'],\r
+       ['&pi;',      '&#960;',  true, 'pi'],\r
+       ['&rho;',     '&#961;',  true, 'rho'],\r
+       ['&sigmaf;',  '&#962;',  true, 'final sigma'],\r
+       ['&sigma;',   '&#963;',  true, 'sigma'],\r
+       ['&tau;',     '&#964;',  true, 'tau'],\r
+       ['&upsilon;', '&#965;',  true, 'upsilon'],\r
+       ['&phi;',     '&#966;',  true, 'phi'],\r
+       ['&chi;',     '&#967;',  true, 'chi'],\r
+       ['&psi;',     '&#968;',  true, 'psi'],\r
+       ['&omega;',   '&#969;',  true, 'omega'],\r
+// symbols\r
+       ['&alefsym;', '&#8501;', false,'alef symbol'],\r
+       ['&piv;',     '&#982;',  false,'pi symbol'],\r
+       ['&real;',    '&#8476;', false,'real part symbol'],\r
+       ['&thetasym;','&#977;',  false,'theta symbol'],\r
+       ['&upsih;',   '&#978;',  false,'upsilon - hook symbol'],\r
+       ['&weierp;',  '&#8472;', false,'Weierstrass p'],\r
+       ['&image;',   '&#8465;', false,'imaginary part'],\r
+// arrows\r
+       ['&larr;',    '&#8592;', true, 'leftwards arrow'],\r
+       ['&uarr;',    '&#8593;', true, 'upwards arrow'],\r
+       ['&rarr;',    '&#8594;', true, 'rightwards arrow'],\r
+       ['&darr;',    '&#8595;', true, 'downwards arrow'],\r
+       ['&harr;',    '&#8596;', true, 'left right arrow'],\r
+       ['&crarr;',   '&#8629;', false,'carriage return'],\r
+       ['&lArr;',    '&#8656;', false,'leftwards double arrow'],\r
+       ['&uArr;',    '&#8657;', false,'upwards double arrow'],\r
+       ['&rArr;',    '&#8658;', false,'rightwards double arrow'],\r
+       ['&dArr;',    '&#8659;', false,'downwards double arrow'],\r
+       ['&hArr;',    '&#8660;', false,'left right double arrow'],\r
+       ['&there4;',  '&#8756;', false,'therefore'],\r
+       ['&sub;',     '&#8834;', false,'subset of'],\r
+       ['&sup;',     '&#8835;', false,'superset of'],\r
+       ['&nsub;',    '&#8836;', false,'not a subset of'],\r
+       ['&sube;',    '&#8838;', false,'subset of or equal to'],\r
+       ['&supe;',    '&#8839;', false,'superset of or equal to'],\r
+       ['&oplus;',   '&#8853;', false,'circled plus'],\r
+       ['&otimes;',  '&#8855;', false,'circled times'],\r
+       ['&perp;',    '&#8869;', false,'perpendicular'],\r
+       ['&sdot;',    '&#8901;', false,'dot operator'],\r
+       ['&lceil;',   '&#8968;', false,'left ceiling'],\r
+       ['&rceil;',   '&#8969;', false,'right ceiling'],\r
+       ['&lfloor;',  '&#8970;', false,'left floor'],\r
+       ['&rfloor;',  '&#8971;', false,'right floor'],\r
+       ['&lang;',    '&#9001;', false,'left-pointing angle bracket'],\r
+       ['&rang;',    '&#9002;', false,'right-pointing angle bracket'],\r
+       ['&loz;',     '&#9674;', true,'lozenge'],\r
+       ['&spades;',  '&#9824;', false,'black spade suit'],\r
+       ['&clubs;',   '&#9827;', true, 'black club suit'],\r
+       ['&hearts;',  '&#9829;', true, 'black heart suit'],\r
+       ['&diams;',   '&#9830;', true, 'black diamond suit'],\r
+       ['&ensp;',    '&#8194;', false,'en space'],\r
+       ['&emsp;',    '&#8195;', false,'em space'],\r
+       ['&thinsp;',  '&#8201;', false,'thin space'],\r
+       ['&zwnj;',    '&#8204;', false,'zero width non-joiner'],\r
+       ['&zwj;',     '&#8205;', false,'zero width joiner'],\r
+       ['&lrm;',     '&#8206;', false,'left-to-right mark'],\r
+       ['&rlm;',     '&#8207;', false,'right-to-left mark'],\r
+       ['&shy;',     '&#173;',  false,'soft hyphen']\r
+];\r
+\r
+tinyMCEPopup.onInit.add(function() {\r
+       tinyMCEPopup.dom.setHTML('charmapView', renderCharMapHTML());\r
+});\r
+\r
+function renderCharMapHTML() {\r
+       var charsPerRow = 20, tdWidth=20, tdHeight=20, i;\r
+       var html = '<table border="0" cellspacing="1" cellpadding="0" width="' + (tdWidth*charsPerRow) + '"><tr height="' + tdHeight + '">';\r
+       var cols=-1;\r
+\r
+       for (i=0; i<charmap.length; i++) {\r
+               if (charmap[i][2]==true) {\r
+                       cols++;\r
+                       html += ''\r
+                               + '<td class="charmap">'\r
+                               + '<a onmouseover="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" onfocus="previewChar(\'' + charmap[i][1].substring(1,charmap[i][1].length) + '\',\'' + charmap[i][0].substring(1,charmap[i][0].length) + '\',\'' + charmap[i][3] + '\');" href="javascript:void(0)" onclick="insertChar(\'' + charmap[i][1].substring(2,charmap[i][1].length-1) + '\');" onclick="return false;" onmousedown="return false;" title="' + charmap[i][3] + '">'\r
+                               + charmap[i][1]\r
+                               + '</a></td>';\r
+                       if ((cols+1) % charsPerRow == 0)\r
+                               html += '</tr><tr height="' + tdHeight + '">';\r
+               }\r
+        }\r
+\r
+       if (cols % charsPerRow > 0) {\r
+               var padd = charsPerRow - (cols % charsPerRow);\r
+               for (var i=0; i<padd-1; i++)\r
+                       html += '<td width="' + tdWidth + '" height="' + tdHeight + '" class="charmap">&nbsp;</td>';\r
+       }\r
+\r
+       html += '</tr></table>';\r
+\r
+       return html;\r
+}\r
+\r
+function insertChar(chr) {\r
+       tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');\r
+\r
+       // Refocus in window\r
+       if (tinyMCEPopup.isWindow)\r
+               window.focus();\r
+\r
+       tinyMCEPopup.editor.focus();\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function previewChar(codeA, codeB, codeN) {\r
+       var elmA = document.getElementById('codeA');\r
+       var elmB = document.getElementById('codeB');\r
+       var elmV = document.getElementById('codeV');\r
+       var elmN = document.getElementById('codeN');\r
+\r
+       if (codeA=='#160;') {\r
+               elmV.innerHTML = '__';\r
+       } else {\r
+               elmV.innerHTML = '&' + codeA;\r
+       }\r
+\r
+       elmB.innerHTML = '&amp;' + codeA;\r
+       elmA.innerHTML = '&amp;' + codeB;\r
+       elmN.innerHTML = codeN;\r
+}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/color_picker.js b/plugins/TinyMCE/js/themes/advanced/js/color_picker.js
new file mode 100644 (file)
index 0000000..fd9700f
--- /dev/null
@@ -0,0 +1,253 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;\r
+\r
+var colors = [\r
+       "#000000","#000033","#000066","#000099","#0000cc","#0000ff","#330000","#330033",\r
+       "#330066","#330099","#3300cc","#3300ff","#660000","#660033","#660066","#660099",\r
+       "#6600cc","#6600ff","#990000","#990033","#990066","#990099","#9900cc","#9900ff",\r
+       "#cc0000","#cc0033","#cc0066","#cc0099","#cc00cc","#cc00ff","#ff0000","#ff0033",\r
+       "#ff0066","#ff0099","#ff00cc","#ff00ff","#003300","#003333","#003366","#003399",\r
+       "#0033cc","#0033ff","#333300","#333333","#333366","#333399","#3333cc","#3333ff",\r
+       "#663300","#663333","#663366","#663399","#6633cc","#6633ff","#993300","#993333",\r
+       "#993366","#993399","#9933cc","#9933ff","#cc3300","#cc3333","#cc3366","#cc3399",\r
+       "#cc33cc","#cc33ff","#ff3300","#ff3333","#ff3366","#ff3399","#ff33cc","#ff33ff",\r
+       "#006600","#006633","#006666","#006699","#0066cc","#0066ff","#336600","#336633",\r
+       "#336666","#336699","#3366cc","#3366ff","#666600","#666633","#666666","#666699",\r
+       "#6666cc","#6666ff","#996600","#996633","#996666","#996699","#9966cc","#9966ff",\r
+       "#cc6600","#cc6633","#cc6666","#cc6699","#cc66cc","#cc66ff","#ff6600","#ff6633",\r
+       "#ff6666","#ff6699","#ff66cc","#ff66ff","#009900","#009933","#009966","#009999",\r
+       "#0099cc","#0099ff","#339900","#339933","#339966","#339999","#3399cc","#3399ff",\r
+       "#669900","#669933","#669966","#669999","#6699cc","#6699ff","#999900","#999933",\r
+       "#999966","#999999","#9999cc","#9999ff","#cc9900","#cc9933","#cc9966","#cc9999",\r
+       "#cc99cc","#cc99ff","#ff9900","#ff9933","#ff9966","#ff9999","#ff99cc","#ff99ff",\r
+       "#00cc00","#00cc33","#00cc66","#00cc99","#00cccc","#00ccff","#33cc00","#33cc33",\r
+       "#33cc66","#33cc99","#33cccc","#33ccff","#66cc00","#66cc33","#66cc66","#66cc99",\r
+       "#66cccc","#66ccff","#99cc00","#99cc33","#99cc66","#99cc99","#99cccc","#99ccff",\r
+       "#cccc00","#cccc33","#cccc66","#cccc99","#cccccc","#ccccff","#ffcc00","#ffcc33",\r
+       "#ffcc66","#ffcc99","#ffcccc","#ffccff","#00ff00","#00ff33","#00ff66","#00ff99",\r
+       "#00ffcc","#00ffff","#33ff00","#33ff33","#33ff66","#33ff99","#33ffcc","#33ffff",\r
+       "#66ff00","#66ff33","#66ff66","#66ff99","#66ffcc","#66ffff","#99ff00","#99ff33",\r
+       "#99ff66","#99ff99","#99ffcc","#99ffff","#ccff00","#ccff33","#ccff66","#ccff99",\r
+       "#ccffcc","#ccffff","#ffff00","#ffff33","#ffff66","#ffff99","#ffffcc","#ffffff"\r
+];\r
+\r
+var named = {\r
+       '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',\r
+       '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',\r
+       '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',\r
+       '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',\r
+       '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',\r
+       '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',\r
+       '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',\r
+       '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',\r
+       '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',\r
+       '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',\r
+       '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',\r
+       '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',\r
+       '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',\r
+       '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',\r
+       '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',\r
+       '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',\r
+       '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',\r
+       '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',\r
+       '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',\r
+       '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',\r
+       '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',\r
+       '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',\r
+       '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'\r
+};\r
+\r
+function init() {\r
+       var inputColor = convertRGBToHex(tinyMCEPopup.getWindowArg('input_color'));\r
+\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       generatePicker();\r
+\r
+       if (inputColor) {\r
+               changeFinalColor(inputColor);\r
+\r
+               col = convertHexToRGB(inputColor);\r
+\r
+               if (col)\r
+                       updateLight(col.r, col.g, col.b);\r
+       }\r
+}\r
+\r
+function insertAction() {\r
+       var color = document.getElementById("color").value, f = tinyMCEPopup.getWindowArg('func');\r
+\r
+       tinyMCEPopup.restoreSelection();\r
+\r
+       if (f)\r
+               f(color);\r
+\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function showColor(color, name) {\r
+       if (name)\r
+               document.getElementById("colorname").innerHTML = name;\r
+\r
+       document.getElementById("preview").style.backgroundColor = color;\r
+       document.getElementById("color").value = color.toLowerCase();\r
+}\r
+\r
+function convertRGBToHex(col) {\r
+       var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
+\r
+       if (!col)\r
+               return col;\r
+\r
+       var rgb = col.replace(re, "$1,$2,$3").split(',');\r
+       if (rgb.length == 3) {\r
+               r = parseInt(rgb[0]).toString(16);\r
+               g = parseInt(rgb[1]).toString(16);\r
+               b = parseInt(rgb[2]).toString(16);\r
+\r
+               r = r.length == 1 ? '0' + r : r;\r
+               g = g.length == 1 ? '0' + g : g;\r
+               b = b.length == 1 ? '0' + b : b;\r
+\r
+               return "#" + r + g + b;\r
+       }\r
+\r
+       return col;\r
+}\r
+\r
+function convertHexToRGB(col) {\r
+       if (col.indexOf('#') != -1) {\r
+               col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
+\r
+               r = parseInt(col.substring(0, 2), 16);\r
+               g = parseInt(col.substring(2, 4), 16);\r
+               b = parseInt(col.substring(4, 6), 16);\r
+\r
+               return {r : r, g : g, b : b};\r
+       }\r
+\r
+       return null;\r
+}\r
+\r
+function generatePicker() {\r
+       var el = document.getElementById('light'), h = '', i;\r
+\r
+       for (i = 0; i < detail; i++){\r
+               h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'\r
+               + ' onclick="changeFinalColor(this.style.backgroundColor)"'\r
+               + ' onmousedown="isMouseDown = true; return false;"'\r
+               + ' onmouseup="isMouseDown = false;"'\r
+               + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'\r
+               + ' onmouseover="isMouseOver = true;"'\r
+               + ' onmouseout="isMouseOver = false;"'\r
+               + '></div>';\r
+       }\r
+\r
+       el.innerHTML = h;\r
+}\r
+\r
+function generateWebColors() {\r
+       var el = document.getElementById('webcolors'), h = '', i;\r
+\r
+       if (el.className == 'generated')\r
+               return;\r
+\r
+       h += '<table border="0" cellspacing="1" cellpadding="0">'\r
+               + '<tr>';\r
+\r
+       for (i=0; i<colors.length; i++) {\r
+               h += '<td bgcolor="' + colors[i] + '" width="10" height="10">'\r
+                       + '<a href="javascript:insertAction();" onfocus="showColor(\'' + colors[i] +  '\');" onmouseover="showColor(\'' + colors[i] +  '\');" style="display:block;width:10px;height:10px;overflow:hidden;">'\r
+                       + '</a></td>';\r
+               if ((i+1) % 18 == 0)\r
+                       h += '</tr><tr>';\r
+       }\r
+\r
+       h += '</table>';\r
+\r
+       el.innerHTML = h;\r
+       el.className = 'generated';\r
+}\r
+\r
+function generateNamedColors() {\r
+       var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;\r
+\r
+       if (el.className == 'generated')\r
+               return;\r
+\r
+       for (n in named) {\r
+               v = named[n];\r
+               h += '<a href="javascript:insertAction();" onmouseover="showColor(\'' + n +  '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'\r
+       }\r
+\r
+       el.innerHTML = h;\r
+       el.className = 'generated';\r
+}\r
+\r
+function dechex(n) {\r
+       return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);\r
+}\r
+\r
+function computeColor(e) {\r
+       var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;\r
+\r
+       x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);\r
+       y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);\r
+\r
+       partWidth = document.getElementById('colors').width / 6;\r
+       partDetail = detail / 2;\r
+       imHeight = document.getElementById('colors').height;\r
+\r
+       r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;\r
+       g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255     + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);\r
+       b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);\r
+\r
+       coef = (imHeight - y) / imHeight;\r
+       r = 128 + (r - 128) * coef;\r
+       g = 128 + (g - 128) * coef;\r
+       b = 128 + (b - 128) * coef;\r
+\r
+       changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));\r
+       updateLight(r, g, b);\r
+}\r
+\r
+function updateLight(r, g, b) {\r
+       var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;\r
+\r
+       for (i=0; i<detail; i++) {\r
+               if ((i>=0) && (i<partDetail)) {\r
+                       finalCoef = i / partDetail;\r
+                       finalR = dechex(255 - (255 - r) * finalCoef);\r
+                       finalG = dechex(255 - (255 - g) * finalCoef);\r
+                       finalB = dechex(255 - (255 - b) * finalCoef);\r
+               } else {\r
+                       finalCoef = 2 - i / partDetail;\r
+                       finalR = dechex(r * finalCoef);\r
+                       finalG = dechex(g * finalCoef);\r
+                       finalB = dechex(b * finalCoef);\r
+               }\r
+\r
+               color = finalR + finalG + finalB;\r
+\r
+               setCol('gs' + i, '#'+color);\r
+       }\r
+}\r
+\r
+function changeFinalColor(color) {\r
+       if (color.indexOf('#') == -1)\r
+               color = convertRGBToHex(color);\r
+\r
+       setCol('preview', color);\r
+       document.getElementById('color').value = color;\r
+}\r
+\r
+function setCol(e, c) {\r
+       try {\r
+               document.getElementById(e).style.backgroundColor = c;\r
+       } catch (ex) {\r
+               // Ignore IE warning\r
+       }\r
+}\r
+\r
+tinyMCEPopup.onInit.add(init);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/image.js b/plugins/TinyMCE/js/themes/advanced/js/image.js
new file mode 100644 (file)
index 0000000..6423d90
--- /dev/null
@@ -0,0 +1,245 @@
+var ImageDialog = {\r
+       preInit : function() {\r
+               var url;\r
+\r
+               tinyMCEPopup.requireLangPack();\r
+\r
+               if (url = tinyMCEPopup.getParam("external_image_list_url"))\r
+                       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+       },\r
+\r
+       init : function() {\r
+               var f = document.forms[0], ed = tinyMCEPopup.editor;\r
+\r
+               // Setup browse button\r
+               document.getElementById('srcbrowsercontainer').innerHTML = getBrowserHTML('srcbrowser','src','image','theme_advanced_image');\r
+               if (isVisible('srcbrowser'))\r
+                       document.getElementById('src').style.width = '180px';\r
+\r
+               e = ed.selection.getNode();\r
+\r
+               this.fillFileList('image_list', 'tinyMCEImageList');\r
+\r
+               if (e.nodeName == 'IMG') {\r
+                       f.src.value = ed.dom.getAttrib(e, 'src');\r
+                       f.alt.value = ed.dom.getAttrib(e, 'alt');\r
+                       f.border.value = this.getAttrib(e, 'border');\r
+                       f.vspace.value = this.getAttrib(e, 'vspace');\r
+                       f.hspace.value = this.getAttrib(e, 'hspace');\r
+                       f.width.value = ed.dom.getAttrib(e, 'width');\r
+                       f.height.value = ed.dom.getAttrib(e, 'height');\r
+                       f.insert.value = ed.getLang('update');\r
+                       this.styleVal = ed.dom.getAttrib(e, 'style');\r
+                       selectByValue(f, 'image_list', f.src.value);\r
+                       selectByValue(f, 'align', this.getAttrib(e, 'align'));\r
+                       this.updateStyle();\r
+               }\r
+       },\r
+\r
+       fillFileList : function(id, l) {\r
+               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+               l = window[l];\r
+\r
+               if (l && l.length > 0) {\r
+                       lst.options[lst.options.length] = new Option('', '');\r
+\r
+                       tinymce.each(l, function(o) {\r
+                               lst.options[lst.options.length] = new Option(o[0], o[1]);\r
+                       });\r
+               } else\r
+                       dom.remove(dom.getParent(id, 'tr'));\r
+       },\r
+\r
+       update : function() {\r
+               var f = document.forms[0], nl = f.elements, ed = tinyMCEPopup.editor, args = {}, el;\r
+\r
+               tinyMCEPopup.restoreSelection();\r
+\r
+               if (f.src.value === '') {\r
+                       if (ed.selection.getNode().nodeName == 'IMG') {\r
+                               ed.dom.remove(ed.selection.getNode());\r
+                               ed.execCommand('mceRepaint');\r
+                       }\r
+\r
+                       tinyMCEPopup.close();\r
+                       return;\r
+               }\r
+\r
+               if (!ed.settings.inline_styles) {\r
+                       args = tinymce.extend(args, {\r
+                               vspace : nl.vspace.value,\r
+                               hspace : nl.hspace.value,\r
+                               border : nl.border.value,\r
+                               align : getSelectValue(f, 'align')\r
+                       });\r
+               } else\r
+                       args.style = this.styleVal;\r
+\r
+               tinymce.extend(args, {\r
+                       src : f.src.value,\r
+                       alt : f.alt.value,\r
+                       width : f.width.value,\r
+                       height : f.height.value\r
+               });\r
+\r
+               el = ed.selection.getNode();\r
+\r
+               if (el && el.nodeName == 'IMG') {\r
+                       ed.dom.setAttribs(el, args);\r
+               } else {\r
+                       ed.execCommand('mceInsertContent', false, '<img id="__mce_tmp" />', {skip_undo : 1});\r
+                       ed.dom.setAttribs('__mce_tmp', args);\r
+                       ed.dom.setAttrib('__mce_tmp', 'id', '');\r
+                       ed.undoManager.add();\r
+               }\r
+\r
+               tinyMCEPopup.close();\r
+       },\r
+\r
+       updateStyle : function() {\r
+               var dom = tinyMCEPopup.dom, st, v, f = document.forms[0];\r
+\r
+               if (tinyMCEPopup.editor.settings.inline_styles) {\r
+                       st = tinyMCEPopup.dom.parseStyle(this.styleVal);\r
+\r
+                       // Handle align\r
+                       v = getSelectValue(f, 'align');\r
+                       if (v) {\r
+                               if (v == 'left' || v == 'right') {\r
+                                       st['float'] = v;\r
+                                       delete st['vertical-align'];\r
+                               } else {\r
+                                       st['vertical-align'] = v;\r
+                                       delete st['float'];\r
+                               }\r
+                       } else {\r
+                               delete st['float'];\r
+                               delete st['vertical-align'];\r
+                       }\r
+\r
+                       // Handle border\r
+                       v = f.border.value;\r
+                       if (v || v == '0') {\r
+                               if (v == '0')\r
+                                       st['border'] = '0';\r
+                               else\r
+                                       st['border'] = v + 'px solid black';\r
+                       } else\r
+                               delete st['border'];\r
+\r
+                       // Handle hspace\r
+                       v = f.hspace.value;\r
+                       if (v) {\r
+                               delete st['margin'];\r
+                               st['margin-left'] = v + 'px';\r
+                               st['margin-right'] = v + 'px';\r
+                       } else {\r
+                               delete st['margin-left'];\r
+                               delete st['margin-right'];\r
+                       }\r
+\r
+                       // Handle vspace\r
+                       v = f.vspace.value;\r
+                       if (v) {\r
+                               delete st['margin'];\r
+                               st['margin-top'] = v + 'px';\r
+                               st['margin-bottom'] = v + 'px';\r
+                       } else {\r
+                               delete st['margin-top'];\r
+                               delete st['margin-bottom'];\r
+                       }\r
+\r
+                       // Merge\r
+                       st = tinyMCEPopup.dom.parseStyle(dom.serializeStyle(st), 'img');\r
+                       this.styleVal = dom.serializeStyle(st, 'img');\r
+               }\r
+       },\r
+\r
+       getAttrib : function(e, at) {\r
+               var ed = tinyMCEPopup.editor, dom = ed.dom, v, v2;\r
+\r
+               if (ed.settings.inline_styles) {\r
+                       switch (at) {\r
+                               case 'align':\r
+                                       if (v = dom.getStyle(e, 'float'))\r
+                                               return v;\r
+\r
+                                       if (v = dom.getStyle(e, 'vertical-align'))\r
+                                               return v;\r
+\r
+                                       break;\r
+\r
+                               case 'hspace':\r
+                                       v = dom.getStyle(e, 'margin-left')\r
+                                       v2 = dom.getStyle(e, 'margin-right');\r
+                                       if (v && v == v2)\r
+                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+                                       break;\r
+\r
+                               case 'vspace':\r
+                                       v = dom.getStyle(e, 'margin-top')\r
+                                       v2 = dom.getStyle(e, 'margin-bottom');\r
+                                       if (v && v == v2)\r
+                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+                                       break;\r
+\r
+                               case 'border':\r
+                                       v = 0;\r
+\r
+                                       tinymce.each(['top', 'right', 'bottom', 'left'], function(sv) {\r
+                                               sv = dom.getStyle(e, 'border-' + sv + '-width');\r
+\r
+                                               // False or not the same as prev\r
+                                               if (!sv || (sv != v && v !== 0)) {\r
+                                                       v = 0;\r
+                                                       return false;\r
+                                               }\r
+\r
+                                               if (sv)\r
+                                                       v = sv;\r
+                                       });\r
+\r
+                                       if (v)\r
+                                               return parseInt(v.replace(/[^0-9]/g, ''));\r
+\r
+                                       break;\r
+                       }\r
+               }\r
+\r
+               if (v = dom.getAttrib(e, at))\r
+                       return v;\r
+\r
+               return '';\r
+       },\r
+\r
+       resetImageData : function() {\r
+               var f = document.forms[0];\r
+\r
+               f.width.value = f.height.value = "";    \r
+       },\r
+\r
+       updateImageData : function() {\r
+               var f = document.forms[0], t = ImageDialog;\r
+\r
+               if (f.width.value == "")\r
+                       f.width.value = t.preloadImg.width;\r
+\r
+               if (f.height.value == "")\r
+                       f.height.value = t.preloadImg.height;\r
+       },\r
+\r
+       getImageData : function() {\r
+               var f = document.forms[0];\r
+\r
+               this.preloadImg = new Image();\r
+               this.preloadImg.onload = this.updateImageData;\r
+               this.preloadImg.onerror = this.resetImageData;\r
+               this.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.src.value);\r
+       }\r
+};\r
+\r
+ImageDialog.preInit();\r
+tinyMCEPopup.onInit.add(ImageDialog.init, ImageDialog);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/link.js b/plugins/TinyMCE/js/themes/advanced/js/link.js
new file mode 100644 (file)
index 0000000..f67a5bc
--- /dev/null
@@ -0,0 +1,156 @@
+tinyMCEPopup.requireLangPack();\r
+\r
+var LinkDialog = {\r
+       preInit : function() {\r
+               var url;\r
+\r
+               if (url = tinyMCEPopup.getParam("external_link_list_url"))\r
+                       document.write('<script language="javascript" type="text/javascript" src="' + tinyMCEPopup.editor.documentBaseURI.toAbsolute(url) + '"></script>');\r
+       },\r
+\r
+       init : function() {\r
+               var f = document.forms[0], ed = tinyMCEPopup.editor;\r
+\r
+               // Setup browse button\r
+               document.getElementById('hrefbrowsercontainer').innerHTML = getBrowserHTML('hrefbrowser', 'href', 'file', 'theme_advanced_link');\r
+               if (isVisible('hrefbrowser'))\r
+                       document.getElementById('href').style.width = '180px';\r
+\r
+               this.fillClassList('class_list');\r
+               this.fillFileList('link_list', 'tinyMCELinkList');\r
+               this.fillTargetList('target_list');\r
+\r
+               if (e = ed.dom.getParent(ed.selection.getNode(), 'A')) {\r
+                       f.href.value = ed.dom.getAttrib(e, 'href');\r
+                       f.linktitle.value = ed.dom.getAttrib(e, 'title');\r
+                       f.insert.value = ed.getLang('update');\r
+                       selectByValue(f, 'link_list', f.href.value);\r
+                       selectByValue(f, 'target_list', ed.dom.getAttrib(e, 'target'));\r
+                       selectByValue(f, 'class_list', ed.dom.getAttrib(e, 'class'));\r
+               }\r
+       },\r
+\r
+       update : function() {\r
+               var f = document.forms[0], ed = tinyMCEPopup.editor, e, b;\r
+\r
+               tinyMCEPopup.restoreSelection();\r
+               e = ed.dom.getParent(ed.selection.getNode(), 'A');\r
+\r
+               // Remove element if there is no href\r
+               if (!f.href.value) {\r
+                       if (e) {\r
+                               tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
+                               b = ed.selection.getBookmark();\r
+                               ed.dom.remove(e, 1);\r
+                               ed.selection.moveToBookmark(b);\r
+                               tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+                               tinyMCEPopup.close();\r
+                               return;\r
+                       }\r
+               }\r
+\r
+               tinyMCEPopup.execCommand("mceBeginUndoLevel");\r
+\r
+               // Create new anchor elements\r
+               if (e == null) {\r
+                       ed.getDoc().execCommand("unlink", false, null);\r
+                       tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});\r
+\r
+                       tinymce.each(ed.dom.select("a"), function(n) {\r
+                               if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {\r
+                                       e = n;\r
+\r
+                                       ed.dom.setAttribs(e, {\r
+                                               href : f.href.value,\r
+                                               title : f.linktitle.value,\r
+                                               target : f.target_list ? getSelectValue(f, "target_list") : null,\r
+                                               'class' : f.class_list ? getSelectValue(f, "class_list") : null\r
+                                       });\r
+                               }\r
+                       });\r
+               } else {\r
+                       ed.dom.setAttribs(e, {\r
+                               href : f.href.value,\r
+                               title : f.linktitle.value,\r
+                               target : f.target_list ? getSelectValue(f, "target_list") : null,\r
+                               'class' : f.class_list ? getSelectValue(f, "class_list") : null\r
+                       });\r
+               }\r
+\r
+               // Don't move caret if selection was image\r
+               if (e.childNodes.length != 1 || e.firstChild.nodeName != 'IMG') {\r
+                       ed.focus();\r
+                       ed.selection.select(e);\r
+                       ed.selection.collapse(0);\r
+                       tinyMCEPopup.storeSelection();\r
+               }\r
+\r
+               tinyMCEPopup.execCommand("mceEndUndoLevel");\r
+               tinyMCEPopup.close();\r
+       },\r
+\r
+       checkPrefix : function(n) {\r
+               if (n.value && Validator.isEmail(n) && !/^\s*mailto:/i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_email')))\r
+                       n.value = 'mailto:' + n.value;\r
+\r
+               if (/^\s*www\./i.test(n.value) && confirm(tinyMCEPopup.getLang('advanced_dlg.link_is_external')))\r
+                       n.value = 'http://' + n.value;\r
+       },\r
+\r
+       fillFileList : function(id, l) {\r
+               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+               l = window[l];\r
+\r
+               if (l && l.length > 0) {\r
+                       lst.options[lst.options.length] = new Option('', '');\r
+\r
+                       tinymce.each(l, function(o) {\r
+                               lst.options[lst.options.length] = new Option(o[0], o[1]);\r
+                       });\r
+               } else\r
+                       dom.remove(dom.getParent(id, 'tr'));\r
+       },\r
+\r
+       fillClassList : function(id) {\r
+               var dom = tinyMCEPopup.dom, lst = dom.get(id), v, cl;\r
+\r
+               if (v = tinyMCEPopup.getParam('theme_advanced_styles')) {\r
+                       cl = [];\r
+\r
+                       tinymce.each(v.split(';'), function(v) {\r
+                               var p = v.split('=');\r
+\r
+                               cl.push({'title' : p[0], 'class' : p[1]});\r
+                       });\r
+               } else\r
+                       cl = tinyMCEPopup.editor.dom.getClasses();\r
+\r
+               if (cl.length > 0) {\r
+                       lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
+\r
+                       tinymce.each(cl, function(o) {\r
+                               lst.options[lst.options.length] = new Option(o.title || o['class'], o['class']);\r
+                       });\r
+               } else\r
+                       dom.remove(dom.getParent(id, 'tr'));\r
+       },\r
+\r
+       fillTargetList : function(id) {\r
+               var dom = tinyMCEPopup.dom, lst = dom.get(id), v;\r
+\r
+               lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('not_set'), '');\r
+               lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_same'), '_self');\r
+               lst.options[lst.options.length] = new Option(tinyMCEPopup.getLang('advanced_dlg.link_target_blank'), '_blank');\r
+\r
+               if (v = tinyMCEPopup.getParam('theme_advanced_link_targets')) {\r
+                       tinymce.each(v.split(','), function(v) {\r
+                               v = v.split('=');\r
+                               lst.options[lst.options.length] = new Option(v[0], v[1]);\r
+                       });\r
+               }\r
+       }\r
+};\r
+\r
+LinkDialog.preInit();\r
+tinyMCEPopup.onInit.add(LinkDialog.init, LinkDialog);\r
diff --git a/plugins/TinyMCE/js/themes/advanced/js/source_editor.js b/plugins/TinyMCE/js/themes/advanced/js/source_editor.js
new file mode 100644 (file)
index 0000000..2793286
--- /dev/null
@@ -0,0 +1,62 @@
+tinyMCEPopup.requireLangPack();\r
+tinyMCEPopup.onInit.add(onLoadInit);\r
+\r
+function saveContent() {\r
+       tinyMCEPopup.editor.setContent(document.getElementById('htmlSource').value, {source_view : true});\r
+       tinyMCEPopup.close();\r
+}\r
+\r
+function onLoadInit() {\r
+       tinyMCEPopup.resizeToInnerSize();\r
+\r
+       // Remove Gecko spellchecking\r
+       if (tinymce.isGecko)\r
+               document.body.spellcheck = tinyMCEPopup.editor.getParam("gecko_spellcheck");\r
+\r
+       document.getElementById('htmlSource').value = tinyMCEPopup.editor.getContent({source_view : true});\r
+\r
+       if (tinyMCEPopup.editor.getParam("theme_advanced_source_editor_wrap", true)) {\r
+               setWrap('soft');\r
+               document.getElementById('wraped').checked = true;\r
+       }\r
+\r
+       resizeInputs();\r
+}\r
+\r
+function setWrap(val) {\r
+       var v, n, s = document.getElementById('htmlSource');\r
+\r
+       s.wrap = val;\r
+\r
+       if (!tinymce.isIE) {\r
+               v = s.value;\r
+               n = s.cloneNode(false);\r
+               n.setAttribute("wrap", val);\r
+               s.parentNode.replaceChild(n, s);\r
+               n.value = v;\r
+       }\r
+}\r
+\r
+function toggleWordWrap(elm) {\r
+       if (elm.checked)\r
+               setWrap('soft');\r
+       else\r
+               setWrap('off');\r
+}\r
+\r
+var wHeight=0, wWidth=0, owHeight=0, owWidth=0;\r
+\r
+function resizeInputs() {\r
+       var el = document.getElementById('htmlSource');\r
+\r
+       if (!tinymce.isIE) {\r
+                wHeight = self.innerHeight - 65;\r
+                wWidth = self.innerWidth - 16;\r
+       } else {\r
+                wHeight = document.body.clientHeight - 70;\r
+                wWidth = document.body.clientWidth - 16;\r
+       }\r
+\r
+       el.style.height = Math.abs(wHeight) + 'px';\r
+       el.style.width  = Math.abs(wWidth) + 'px';\r
+}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/langs/en.js b/plugins/TinyMCE/js/themes/advanced/langs/en.js
new file mode 100644 (file)
index 0000000..69694b1
--- /dev/null
@@ -0,0 +1,62 @@
+tinyMCE.addI18n('en.advanced',{\r
+style_select:"Styles",\r
+font_size:"Font size",\r
+fontdefault:"Font family",\r
+block:"Format",\r
+paragraph:"Paragraph",\r
+div:"Div",\r
+address:"Address",\r
+pre:"Preformatted",\r
+h1:"Heading 1",\r
+h2:"Heading 2",\r
+h3:"Heading 3",\r
+h4:"Heading 4",\r
+h5:"Heading 5",\r
+h6:"Heading 6",\r
+blockquote:"Blockquote",\r
+code:"Code",\r
+samp:"Code sample",\r
+dt:"Definition term ",\r
+dd:"Definition description",\r
+bold_desc:"Bold (Ctrl+B)",\r
+italic_desc:"Italic (Ctrl+I)",\r
+underline_desc:"Underline (Ctrl+U)",\r
+striketrough_desc:"Strikethrough",\r
+justifyleft_desc:"Align left",\r
+justifycenter_desc:"Align center",\r
+justifyright_desc:"Align right",\r
+justifyfull_desc:"Align full",\r
+bullist_desc:"Unordered list",\r
+numlist_desc:"Ordered list",\r
+outdent_desc:"Outdent",\r
+indent_desc:"Indent",\r
+undo_desc:"Undo (Ctrl+Z)",\r
+redo_desc:"Redo (Ctrl+Y)",\r
+link_desc:"Insert/edit link",\r
+unlink_desc:"Unlink",\r
+image_desc:"Insert/edit image",\r
+cleanup_desc:"Cleanup messy code",\r
+code_desc:"Edit HTML Source",\r
+sub_desc:"Subscript",\r
+sup_desc:"Superscript",\r
+hr_desc:"Insert horizontal ruler",\r
+removeformat_desc:"Remove formatting",\r
+custom1_desc:"Your custom description here",\r
+forecolor_desc:"Select text color",\r
+backcolor_desc:"Select background color",\r
+charmap_desc:"Insert custom character",\r
+visualaid_desc:"Toggle guidelines/invisible elements",\r
+anchor_desc:"Insert/edit anchor",\r
+cut_desc:"Cut",\r
+copy_desc:"Copy",\r
+paste_desc:"Paste",\r
+image_props_desc:"Image properties",\r
+newdocument_desc:"New document",\r
+help_desc:"Help",\r
+blockquote_desc:"Blockquote",\r
+clipboard_msg:"Copy/Cut/Paste is not available in Mozilla and Firefox.\r\nDo you want more information about this issue?",\r
+path:"Path",\r
+newdocument:"Are you sure you want clear all contents?",\r
+toolbar_focus:"Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X",\r
+more_colors:"More colors"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/langs/en_dlg.js b/plugins/TinyMCE/js/themes/advanced/langs/en_dlg.js
new file mode 100644 (file)
index 0000000..9d124d7
--- /dev/null
@@ -0,0 +1,51 @@
+tinyMCE.addI18n('en.advanced_dlg',{\r
+about_title:"About TinyMCE",\r
+about_general:"About",\r
+about_help:"Help",\r
+about_license:"License",\r
+about_plugins:"Plugins",\r
+about_plugin:"Plugin",\r
+about_author:"Author",\r
+about_version:"Version",\r
+about_loaded:"Loaded plugins",\r
+anchor_title:"Insert/edit anchor",\r
+anchor_name:"Anchor name",\r
+code_title:"HTML Source Editor",\r
+code_wordwrap:"Word wrap",\r
+colorpicker_title:"Select a color",\r
+colorpicker_picker_tab:"Picker",\r
+colorpicker_picker_title:"Color picker",\r
+colorpicker_palette_tab:"Palette",\r
+colorpicker_palette_title:"Palette colors",\r
+colorpicker_named_tab:"Named",\r
+colorpicker_named_title:"Named colors",\r
+colorpicker_color:"Color:",\r
+colorpicker_name:"Name:",\r
+charmap_title:"Select custom character",\r
+image_title:"Insert/edit image",\r
+image_src:"Image URL",\r
+image_alt:"Image description",\r
+image_list:"Image list",\r
+image_border:"Border",\r
+image_dimensions:"Dimensions",\r
+image_vspace:"Vertical space",\r
+image_hspace:"Horizontal space",\r
+image_align:"Alignment",\r
+image_align_baseline:"Baseline",\r
+image_align_top:"Top",\r
+image_align_middle:"Middle",\r
+image_align_bottom:"Bottom",\r
+image_align_texttop:"Text top",\r
+image_align_textbottom:"Text bottom",\r
+image_align_left:"Left",\r
+image_align_right:"Right",\r
+link_title:"Insert/edit link",\r
+link_url:"Link URL",\r
+link_target:"Target",\r
+link_target_same:"Open link in the same window",\r
+link_target_blank:"Open link in a new window",\r
+link_titlefield:"Title",\r
+link_is_email:"The URL you entered seems to be an email address, do you want to add the required mailto: prefix?",\r
+link_is_external:"The URL you entered seems to external link, do you want to add the required http:// prefix?",\r
+link_list:"Link list"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/link.htm b/plugins/TinyMCE/js/themes/advanced/link.htm
new file mode 100644 (file)
index 0000000..7565b9a
--- /dev/null
@@ -0,0 +1,58 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">\r
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.link_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="../../utils/mctabs.js"></script>\r
+       <script type="text/javascript" src="../../utils/form_utils.js"></script>\r
+       <script type="text/javascript" src="../../utils/validate.js"></script>\r
+       <script type="text/javascript" src="js/link.js"></script>\r
+</head>\r
+<body id="link" style="display: none">\r
+<form onsubmit="LinkDialog.update();return false;" action="#">\r
+       <div class="tabs">\r
+               <ul>\r
+                       <li id="general_tab" class="current"><span><a href="javascript:mcTabs.displayTab('general_tab','general_panel');" onmousedown="return false;">{#advanced_dlg.link_title}</a></span></li>\r
+               </ul>\r
+       </div>\r
+\r
+       <div class="panel_wrapper">\r
+               <div id="general_panel" class="panel current">\r
+\r
+               <table border="0" cellpadding="4" cellspacing="0">\r
+          <tr>\r
+            <td class="nowrap"><label for="href">{#advanced_dlg.link_url}</label></td>\r
+            <td><table border="0" cellspacing="0" cellpadding="0"> \r
+                                 <tr> \r
+                                       <td><input id="href" name="href" type="text" class="mceFocus" value="" style="width: 200px" onchange="LinkDialog.checkPrefix(this);" /></td> \r
+                                       <td id="hrefbrowsercontainer">&nbsp;</td>\r
+                                 </tr> \r
+                               </table></td>\r
+          </tr>\r
+                 <tr>\r
+                       <td><label for="link_list">{#advanced_dlg.link_list}</label></td>\r
+                       <td><select id="link_list" name="link_list" onchange="document.getElementById('href').value=this.options[this.selectedIndex].value;"></select></td>\r
+                 </tr>\r
+               <tr>\r
+                       <td><label id="targetlistlabel" for="targetlist">{#advanced_dlg.link_target}</label></td>\r
+                       <td><select id="target_list" name="target_list"></select></td>\r
+               </tr>\r
+          <tr>\r
+            <td class="nowrap"><label for="linktitle">{#advanced_dlg.link_titlefield}</label></td>\r
+            <td><input id="linktitle" name="linktitle" type="text" value="" style="width: 200px" /></td>\r
+          </tr>\r
+                       <tr>\r
+                               <td><label for="class_list">{#class_name}</label></td>\r
+                               <td><select id="class_list" name="class_list"></select></td>\r
+                       </tr>\r
+        </table>\r
+               </div>\r
+       </div>\r
+\r
+       <div class="mceActionPanel">\r
+               <input type="submit" id="insert" name="insert" value="{#insert}" />\r
+               <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />\r
+       </div>\r
+</form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/content.css b/plugins/TinyMCE/js/themes/advanced/skins/default/content.css
new file mode 100644 (file)
index 0000000..9fba043
--- /dev/null
@@ -0,0 +1,36 @@
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}\r
+body {background:#FFF;}\r
+body.mceForceColors {background:#FFF; color:#000;}\r
+h1 {font-size: 2em}\r
+h2 {font-size: 1.5em}\r
+h3 {font-size: 1.17em}\r
+h4 {font-size: 1em}\r
+h5 {font-size: .83em}\r
+h6 {font-size: .75em}\r
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(img/items.gif) no-repeat 0 0;}\r
+span.mceItemNbsp {background: #DDD}\r
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
+img {border:0;}\r
+table {cursor:default}\r
+table td, table th {cursor:text}\r
+ins {border-bottom:1px solid green; text-decoration: none; color:green}\r
+del {color:red; text-decoration:line-through}\r
+cite {border-bottom:1px dashed blue}\r
+acronym {border-bottom:1px dotted #CCC; cursor:help}\r
+abbr {border-bottom:1px dashed #CCC; cursor:help}\r
+\r
+/* IE */\r
+* html body {\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+}\r
+\r
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
+font[face=mceinline] {font-family:inherit !important}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/dialog.css b/plugins/TinyMCE/js/themes/advanced/skins/default/dialog.css
new file mode 100644 (file)
index 0000000..f012226
--- /dev/null
@@ -0,0 +1,117 @@
+/* Generic */\r
+body {\r
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDDDDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+background:#F0F0EE;\r
+padding:0;\r
+margin:8px 8px 0 8px;\r
+}\r
+\r
+html {background:#F0F0EE;}\r
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+textarea {resize:none;outline:none;}\r
+a:link, a:visited {color:black;}\r
+a:hover {color:#2B6FB6;}\r
+.nowrap {white-space: nowrap}\r
+\r
+/* Forms */\r
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
+legend {color:#2B6FB6; font-weight:bold;}\r
+label.msg {display:none;}\r
+label.invalid {color:#EE0000; display:inline;}\r
+input.invalid {border:1px solid #EE0000;}\r
+input {background:#FFF; border:1px solid #CCC;}\r
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+input, select, textarea {border:1px solid #808080;}\r
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+.input_noborder {border:0;}\r
+\r
+/* Buttons */\r
+#insert, #cancel, input.button, .updateButton {\r
+border:0; margin:0; padding:0;\r
+font-weight:bold;\r
+width:94px; height:26px;\r
+background:url(img/buttons.png) 0 -26px;\r
+cursor:pointer;\r
+padding-bottom:2px;\r
+float:left;\r
+}\r
+\r
+#insert {background:url(img/buttons.png) 0 -52px}\r
+#cancel {background:url(img/buttons.png) 0 0; float:right}\r
+\r
+/* Browse */\r
+a.pickcolor, a.browse {text-decoration:none}\r
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
+.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
+a.pickcolor:hover span {background-color:#B2BBD0;}\r
+a.pickcolor:hover span.disabled {}\r
+\r
+/* Charmap */\r
+table.charmap {border:1px solid #AAA; text-align:center}\r
+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
+#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
+#charmap a:hover {background:#CCC;color:#2B6FB6}\r
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
+\r
+/* Source */\r
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
+.mceActionPanel {margin-top:5px;}\r
+\r
+/* Tabs classes */\r
+.tabs {width:100%; height:18px; line-height:normal; background:url(img/tabs.gif) repeat-x 0 -72px;}\r
+.tabs ul {margin:0; padding:0; list-style:none;}\r
+.tabs li {float:left; background:url(img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}\r
+.tabs li.current {background:url(img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}\r
+.tabs span {float:left; display:block; background:url(img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}\r
+.tabs .current span {background:url(img/tabs.gif) no-repeat right -54px;}\r
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
+\r
+/* Panels */\r
+.panel_wrapper div.panel {display:none;}\r
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}\r
+\r
+/* Columns */\r
+.column {float:left;}\r
+.properties {width:100%;}\r
+.properties .column1 {}\r
+.properties .column2 {text-align:left;}\r
+\r
+/* Titles */\r
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
+h3 {font-size:14px;}\r
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
+\r
+/* Dialog specific */\r
+#link .panel_wrapper, #link div.current {height:125px;}\r
+#image .panel_wrapper, #image div.current {height:200px;}\r
+#plugintable thead {font-weight:bold; background:#DDD;}\r
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
+#plugintable {width:96%; margin-top:10px;}\r
+#pluginscontainer {height:290px; overflow:auto;}\r
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
+#colorpicker #light div {overflow:hidden;}\r
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
+#colorpicker .panel_wrapper div.current {height:175px;}\r
+#colorpicker #namedcolors {width:150px;}\r
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
+#colorpicker #colornamecontainer {margin-top:5px;}\r
+#colorpicker #picker_panel fieldset {margin:auto;width:325px;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png b/plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png
new file mode 100644 (file)
index 0000000..7dd5841
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/default/img/buttons.png differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif
new file mode 100644 (file)
index 0000000..2eafd79
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/default/img/items.gif differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif
new file mode 100644 (file)
index 0000000..85e31df
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_arrow.gif differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif
new file mode 100644 (file)
index 0000000..adfdddc
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/default/img/menu_check.gif differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif
new file mode 100644 (file)
index 0000000..5bb90fd
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/default/img/progress.gif differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif b/plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif
new file mode 100644 (file)
index 0000000..ce4be63
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/default/img/tabs.gif differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/default/ui.css b/plugins/TinyMCE/js/themes/advanced/skins/default/ui.css
new file mode 100644 (file)
index 0000000..0049c7b
--- /dev/null
@@ -0,0 +1,213 @@
+/* Reset */\r
+.defaultSkin table, .defaultSkin tbody, .defaultSkin a, .defaultSkin img, .defaultSkin tr, .defaultSkin div, .defaultSkin td, .defaultSkin iframe, .defaultSkin span, .defaultSkin *, .defaultSkin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}\r
+.defaultSkin a:hover, .defaultSkin a:link, .defaultSkin a:visited, .defaultSkin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+.defaultSkin table td {vertical-align:middle}\r
+\r
+/* Containers */\r
+.defaultSkin table {direction:ltr; background:#F0F0EE}\r
+.defaultSkin iframe {display:block; background:#FFF}\r
+.defaultSkin .mceToolbar {height:26px}\r
+.defaultSkin .mceLeft {text-align:left}\r
+.defaultSkin .mceRight {text-align:right}\r
+\r
+/* External */\r
+.defaultSkin .mceExternalToolbar {position:absolute; border:1px solid #CCC; border-bottom:0; display:none;}\r
+.defaultSkin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
+.defaultSkin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}\r
+\r
+/* Layout */\r
+.defaultSkin table.mceLayout {border:0; border-left:1px solid #CCC; border-right:1px solid #CCC}\r
+.defaultSkin table.mceLayout tr.mceFirst td {border-top:1px solid #CCC}\r
+.defaultSkin table.mceLayout tr.mceLast td {border-bottom:1px solid #CCC}\r
+.defaultSkin table.mceToolbar, .defaultSkin tr.mceFirst .mceToolbar tr td, .defaultSkin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0;}\r
+.defaultSkin td.mceToolbar {padding-top:1px; vertical-align:top}\r
+.defaultSkin .mceIframeContainer {border-top:1px solid #CCC; border-bottom:1px solid #CCC}\r
+.defaultSkin .mceStatusbar {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; display:block; height:20px}\r
+.defaultSkin .mceStatusbar div {float:left; margin:2px}\r
+.defaultSkin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}\r
+.defaultSkin .mceStatusbar a:hover {text-decoration:underline}\r
+.defaultSkin table.mceToolbar {margin-left:3px}\r
+.defaultSkin span.mceIcon, .defaultSkin img.mceIcon {display:block; width:20px; height:20px}\r
+.defaultSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+.defaultSkin td.mceCenter {text-align:center;}\r
+.defaultSkin td.mceCenter table {margin:0 auto; text-align:left;}\r
+.defaultSkin td.mceRight table {margin:0 0 0 auto;}\r
+\r
+/* Button */\r
+.defaultSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px; margin-right:1px}\r
+.defaultSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}\r
+.defaultSkin a.mceButtonActive, .defaultSkin a.mceButtonSelected {border:1px solid #0A246A; background-color:#C2CBE0}\r
+.defaultSkin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+.defaultSkin .mceButtonLabeled {width:auto}\r
+.defaultSkin .mceButtonLabeled span.mceIcon {float:left}\r
+.defaultSkin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}\r
+.defaultSkin .mceButtonDisabled .mceButtonLabel {color:#888}\r
+\r
+/* Separator */\r
+.defaultSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:2px 2px 0 4px}\r
+\r
+/* ListBox */\r
+.defaultSkin .mceListBox, .defaultSkin .mceListBox a {display:block}\r
+.defaultSkin .mceListBox .mceText {padding-left:4px; width:70px; text-align:left; border:1px solid #CCC; border-right:0; background:#FFF; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
+.defaultSkin .mceListBox .mceOpen {width:9px; height:20px; background:url(../../img/icons.gif) -741px 0; margin-right:2px; border:1px solid #CCC;}\r
+.defaultSkin table.mceListBoxEnabled:hover .mceText, .defaultSkin .mceListBoxHover .mceText, .defaultSkin .mceListBoxSelected .mceText {border:1px solid #A2ABC0; border-right:0; background:#FFF}\r
+.defaultSkin table.mceListBoxEnabled:hover .mceOpen, .defaultSkin .mceListBoxHover .mceOpen, .defaultSkin .mceListBoxSelected .mceOpen {background-color:#FFF; border:1px solid #A2ABC0}\r
+.defaultSkin .mceListBoxDisabled a.mceText {color:gray; background-color:transparent;}\r
+.defaultSkin .mceListBoxMenu {overflow:auto; overflow-x:hidden}\r
+.defaultSkin .mceOldBoxModel .mceListBox .mceText {height:22px}\r
+.defaultSkin .mceOldBoxModel .mceListBox .mceOpen {width:11px; height:22px;}\r
+.defaultSkin select.mceNativeListBox {font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:7pt; background:#F0F0EE; border:1px solid gray; margin-right:2px;}\r
+\r
+/* SplitButton */\r
+.defaultSkin .mceSplitButton {width:32px; height:20px; direction:ltr}\r
+.defaultSkin .mceSplitButton a, .defaultSkin .mceSplitButton span {height:20px; display:block}\r
+.defaultSkin .mceSplitButton a.mceAction {width:20px; border:1px solid #F0F0EE; border-right:0;}\r
+.defaultSkin .mceSplitButton span.mceAction {width:20px; background-image:url(../../img/icons.gif);}\r
+.defaultSkin .mceSplitButton a.mceOpen {width:9px; background:url(../../img/icons.gif) -741px 0; border:1px solid #F0F0EE;}\r
+.defaultSkin .mceSplitButton span.mceOpen {display:none}\r
+.defaultSkin table.mceSplitButtonEnabled:hover a.mceAction, .defaultSkin .mceSplitButtonHover a.mceAction, .defaultSkin .mceSplitButtonSelected a.mceAction {border:1px solid #0A246A; border-right:0; background-color:#B2BBD0}\r
+.defaultSkin table.mceSplitButtonEnabled:hover a.mceOpen, .defaultSkin .mceSplitButtonHover a.mceOpen, .defaultSkin .mceSplitButtonSelected a.mceOpen {background-color:#B2BBD0; border:1px solid #0A246A;}\r
+.defaultSkin .mceSplitButtonDisabled .mceAction, .defaultSkin .mceSplitButtonDisabled a.mceOpen {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+.defaultSkin .mceSplitButtonActive a.mceAction {border:1px solid #0A246A; background-color:#C2CBE0}\r
+.defaultSkin .mceSplitButtonActive a.mceOpen {border-left:0;}\r
+\r
+/* ColorSplitButton */\r
+.defaultSkin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}\r
+.defaultSkin .mceColorSplitMenu td {padding:2px}\r
+.defaultSkin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}\r
+.defaultSkin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
+.defaultSkin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
+.defaultSkin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}\r
+.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A}\r
+.defaultSkin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a}\r
+.defaultSkin .mce_forecolor span.mceAction, .defaultSkin .mce_backcolor span.mceAction {overflow:hidden; height:16px}\r
+\r
+/* Menu */\r
+.defaultSkin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #D4D0C8}\r
+.defaultSkin .mceNoIcons span.mceIcon {width:0;}\r
+.defaultSkin .mceNoIcons a .mceText {padding-left:10px}\r
+.defaultSkin .mceMenu table {background:#FFF}\r
+.defaultSkin .mceMenu a, .defaultSkin .mceMenu span, .defaultSkin .mceMenu {display:block}\r
+.defaultSkin .mceMenu td {height:20px}\r
+.defaultSkin .mceMenu a {position:relative;padding:3px 0 4px 0}\r
+.defaultSkin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}\r
+.defaultSkin .mceMenu span.mceText, .defaultSkin .mceMenu .mcePreview {font-size:11px}\r
+.defaultSkin .mceMenu pre.mceText {font-family:Monospace}\r
+.defaultSkin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}\r
+.defaultSkin .mceMenu .mceMenuItemEnabled a:hover, .defaultSkin .mceMenu .mceMenuItemActive {background-color:#dbecf3}\r
+.defaultSkin td.mceMenuItemSeparator {background:#DDD; height:1px}\r
+.defaultSkin .mceMenuItemTitle a {border:0; background:#EEE; border-bottom:1px solid #DDD}\r
+.defaultSkin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}\r
+.defaultSkin .mceMenuItemDisabled .mceText {color:#888}\r
+.defaultSkin .mceMenuItemSelected .mceIcon {background:url(img/menu_check.gif)}\r
+.defaultSkin .mceNoIcons .mceMenuItemSelected a {background:url(img/menu_arrow.gif) no-repeat -6px center}\r
+.defaultSkin .mceMenu span.mceMenuLine {display:none}\r
+.defaultSkin .mceMenuItemSub a {background:url(img/menu_arrow.gif) no-repeat top right;}\r
+\r
+/* Progress,Resize */\r
+.defaultSkin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=50)'; filter:alpha(opacity=50); background:#FFF}\r
+.defaultSkin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
+\r
+/* Formats */\r
+.defaultSkin .mce_formatPreview a {font-size:10px}\r
+.defaultSkin .mce_p span.mceText {}\r
+.defaultSkin .mce_address span.mceText {font-style:italic}\r
+.defaultSkin .mce_pre span.mceText {font-family:monospace}\r
+.defaultSkin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
+.defaultSkin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
+.defaultSkin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
+.defaultSkin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
+.defaultSkin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
+.defaultSkin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
+\r
+/* Theme */\r
+.defaultSkin span.mce_bold {background-position:0 0}\r
+.defaultSkin span.mce_italic {background-position:-60px 0}\r
+.defaultSkin span.mce_underline {background-position:-140px 0}\r
+.defaultSkin span.mce_strikethrough {background-position:-120px 0}\r
+.defaultSkin span.mce_undo {background-position:-160px 0}\r
+.defaultSkin span.mce_redo {background-position:-100px 0}\r
+.defaultSkin span.mce_cleanup {background-position:-40px 0}\r
+.defaultSkin span.mce_bullist {background-position:-20px 0}\r
+.defaultSkin span.mce_numlist {background-position:-80px 0}\r
+.defaultSkin span.mce_justifyleft {background-position:-460px 0}\r
+.defaultSkin span.mce_justifyright {background-position:-480px 0}\r
+.defaultSkin span.mce_justifycenter {background-position:-420px 0}\r
+.defaultSkin span.mce_justifyfull {background-position:-440px 0}\r
+.defaultSkin span.mce_anchor {background-position:-200px 0}\r
+.defaultSkin span.mce_indent {background-position:-400px 0}\r
+.defaultSkin span.mce_outdent {background-position:-540px 0}\r
+.defaultSkin span.mce_link {background-position:-500px 0}\r
+.defaultSkin span.mce_unlink {background-position:-640px 0}\r
+.defaultSkin span.mce_sub {background-position:-600px 0}\r
+.defaultSkin span.mce_sup {background-position:-620px 0}\r
+.defaultSkin span.mce_removeformat {background-position:-580px 0}\r
+.defaultSkin span.mce_newdocument {background-position:-520px 0}\r
+.defaultSkin span.mce_image {background-position:-380px 0}\r
+.defaultSkin span.mce_help {background-position:-340px 0}\r
+.defaultSkin span.mce_code {background-position:-260px 0}\r
+.defaultSkin span.mce_hr {background-position:-360px 0}\r
+.defaultSkin span.mce_visualaid {background-position:-660px 0}\r
+.defaultSkin span.mce_charmap {background-position:-240px 0}\r
+.defaultSkin span.mce_paste {background-position:-560px 0}\r
+.defaultSkin span.mce_copy {background-position:-700px 0}\r
+.defaultSkin span.mce_cut {background-position:-680px 0}\r
+.defaultSkin span.mce_blockquote {background-position:-220px 0}\r
+.defaultSkin .mce_forecolor span.mceAction {background-position:-720px 0}\r
+.defaultSkin .mce_backcolor span.mceAction {background-position:-760px 0}\r
+.defaultSkin span.mce_forecolorpicker {background-position:-720px 0}\r
+.defaultSkin span.mce_backcolorpicker {background-position:-760px 0}\r
+\r
+/* Plugins */\r
+.defaultSkin span.mce_advhr {background-position:-0px -20px}\r
+.defaultSkin span.mce_ltr {background-position:-20px -20px}\r
+.defaultSkin span.mce_rtl {background-position:-40px -20px}\r
+.defaultSkin span.mce_emotions {background-position:-60px -20px}\r
+.defaultSkin span.mce_fullpage {background-position:-80px -20px}\r
+.defaultSkin span.mce_fullscreen {background-position:-100px -20px}\r
+.defaultSkin span.mce_iespell {background-position:-120px -20px}\r
+.defaultSkin span.mce_insertdate {background-position:-140px -20px}\r
+.defaultSkin span.mce_inserttime {background-position:-160px -20px}\r
+.defaultSkin span.mce_absolute {background-position:-180px -20px}\r
+.defaultSkin span.mce_backward {background-position:-200px -20px}\r
+.defaultSkin span.mce_forward {background-position:-220px -20px}\r
+.defaultSkin span.mce_insert_layer {background-position:-240px -20px}\r
+.defaultSkin span.mce_insertlayer {background-position:-260px -20px}\r
+.defaultSkin span.mce_movebackward {background-position:-280px -20px}\r
+.defaultSkin span.mce_moveforward {background-position:-300px -20px}\r
+.defaultSkin span.mce_media {background-position:-320px -20px}\r
+.defaultSkin span.mce_nonbreaking {background-position:-340px -20px}\r
+.defaultSkin span.mce_pastetext {background-position:-360px -20px}\r
+.defaultSkin span.mce_pasteword {background-position:-380px -20px}\r
+.defaultSkin span.mce_selectall {background-position:-400px -20px}\r
+.defaultSkin span.mce_preview {background-position:-420px -20px}\r
+.defaultSkin span.mce_print {background-position:-440px -20px}\r
+.defaultSkin span.mce_cancel {background-position:-460px -20px}\r
+.defaultSkin span.mce_save {background-position:-480px -20px}\r
+.defaultSkin span.mce_replace {background-position:-500px -20px}\r
+.defaultSkin span.mce_search {background-position:-520px -20px}\r
+.defaultSkin span.mce_styleprops {background-position:-560px -20px}\r
+.defaultSkin span.mce_table {background-position:-580px -20px}\r
+.defaultSkin span.mce_cell_props {background-position:-600px -20px}\r
+.defaultSkin span.mce_delete_table {background-position:-620px -20px}\r
+.defaultSkin span.mce_delete_col {background-position:-640px -20px}\r
+.defaultSkin span.mce_delete_row {background-position:-660px -20px}\r
+.defaultSkin span.mce_col_after {background-position:-680px -20px}\r
+.defaultSkin span.mce_col_before {background-position:-700px -20px}\r
+.defaultSkin span.mce_row_after {background-position:-720px -20px}\r
+.defaultSkin span.mce_row_before {background-position:-740px -20px}\r
+.defaultSkin span.mce_merge_cells {background-position:-760px -20px}\r
+.defaultSkin span.mce_table_props {background-position:-980px -20px}\r
+.defaultSkin span.mce_row_props {background-position:-780px -20px}\r
+.defaultSkin span.mce_split_cells {background-position:-800px -20px}\r
+.defaultSkin span.mce_template {background-position:-820px -20px}\r
+.defaultSkin span.mce_visualchars {background-position:-840px -20px}\r
+.defaultSkin span.mce_abbr {background-position:-860px -20px}\r
+.defaultSkin span.mce_acronym {background-position:-880px -20px}\r
+.defaultSkin span.mce_attribs {background-position:-900px -20px}\r
+.defaultSkin span.mce_cite {background-position:-920px -20px}\r
+.defaultSkin span.mce_del {background-position:-940px -20px}\r
+.defaultSkin span.mce_ins {background-position:-960px -20px}\r
+.defaultSkin span.mce_pagebreak {background-position:0 -40px}\r
+.defaultSkin span.mce_restoredraft {background-position:-20px -40px}\r
+.defaultSkin span.mce_spellchecker {background-position:-540px -20px}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/content.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/content.css
new file mode 100644 (file)
index 0000000..3b833d9
--- /dev/null
@@ -0,0 +1,36 @@
+body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;}\r
+body {background:#FFF;}\r
+body.mceForceColors {background:#FFF; color:#000;}\r
+h1 {font-size: 2em}\r
+h2 {font-size: 1.5em}\r
+h3 {font-size: 1.17em}\r
+h4 {font-size: 1em}\r
+h5 {font-size: .83em}\r
+h6 {font-size: .75em}\r
+.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;}\r
+a.mceItemAnchor {display:inline-block; width:11px !important; height:11px  !important; background:url(../default/img/items.gif) no-repeat 0 0;}\r
+span.mceItemNbsp {background: #DDD}\r
+td.mceSelected, th.mceSelected {background-color:#3399ff !important}\r
+img {border:0;}\r
+table {cursor:default}\r
+table td, table th {cursor:text}\r
+ins {border-bottom:1px solid green; text-decoration: none; color:green}\r
+del {color:red; text-decoration:line-through}\r
+cite {border-bottom:1px dashed blue}\r
+acronym {border-bottom:1px dotted #CCC; cursor:help}\r
+abbr {border-bottom:1px dashed #CCC; cursor:help}\r
+\r
+/* IE */\r
+* html body {\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+}\r
+\r
+img:-moz-broken {-moz-force-broken-image-icon:1; width:24px; height:24px}\r
+font[face=mceinline] {font-family:inherit !important}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/dialog.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/dialog.css
new file mode 100644 (file)
index 0000000..e3af139
--- /dev/null
@@ -0,0 +1,116 @@
+/* Generic */\r
+body {\r
+font-family:Verdana, Arial, Helvetica, sans-serif; font-size:11px;\r
+scrollbar-3dlight-color:#F0F0EE;\r
+scrollbar-arrow-color:#676662;\r
+scrollbar-base-color:#F0F0EE;\r
+scrollbar-darkshadow-color:#DDDDDD;\r
+scrollbar-face-color:#E0E0DD;\r
+scrollbar-highlight-color:#F0F0EE;\r
+scrollbar-shadow-color:#F0F0EE;\r
+scrollbar-track-color:#F5F5F5;\r
+background:#F0F0EE;\r
+padding:0;\r
+margin:8px 8px 0 8px;\r
+}\r
+\r
+html {background:#F0F0EE;}\r
+td {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+textarea {resize:none;outline:none;}\r
+a:link, a:visited {color:black;}\r
+a:hover {color:#2B6FB6;}\r
+.nowrap {white-space: nowrap}\r
+\r
+/* Forms */\r
+fieldset {margin:0; padding:4px; border:1px solid #919B9C; font-family:Verdana, Arial; font-size:10px;}\r
+legend {color:#2B6FB6; font-weight:bold;}\r
+label.msg {display:none;}\r
+label.invalid {color:#EE0000; display:inline;}\r
+input.invalid {border:1px solid #EE0000;}\r
+input {background:#FFF; border:1px solid #CCC;}\r
+input, select, textarea {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+input, select, textarea {border:1px solid #808080;}\r
+input.radio {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+input.checkbox {border:1px none #000000; background:transparent; vertical-align:middle;}\r
+.input_noborder {border:0;}\r
+\r
+/* Buttons */\r
+#insert, #cancel, input.button, .updateButton {\r
+border:0; margin:0; padding:0;\r
+font-weight:bold;\r
+width:94px; height:26px;\r
+background:url(../default/img/buttons.png) 0 -26px;\r
+cursor:pointer;\r
+padding-bottom:2px;\r
+float:left;\r
+}\r
+\r
+#insert {background:url(../default/img/buttons.png) 0 -52px}\r
+#cancel {background:url(../default/img/buttons.png) 0 0; float:right}\r
+\r
+/* Browse */\r
+a.pickcolor, a.browse {text-decoration:none}\r
+a.browse span {display:block; width:20px; height:18px; background:url(../../img/icons.gif) -860px 0; border:1px solid #FFF; margin-left:1px;}\r
+.mceOldBoxModel a.browse span {width:22px; height:20px;}\r
+a.browse:hover span {border:1px solid #0A246A; background-color:#B2BBD0;}\r
+a.browse span.disabled {border:1px solid white; opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+a.browse:hover span.disabled {border:1px solid white; background-color:transparent;}\r
+a.pickcolor span {display:block; width:20px; height:16px; background:url(../../img/icons.gif) -840px 0; margin-left:2px;}\r
+.mceOldBoxModel a.pickcolor span {width:21px; height:17px;}\r
+a.pickcolor:hover span {background-color:#B2BBD0;}\r
+a.pickcolor:hover span.disabled {}\r
+\r
+/* Charmap */\r
+table.charmap {border:1px solid #AAA; text-align:center}\r
+td.charmap, #charmap a {width:18px; height:18px; color:#000; border:1px solid #AAA; text-align:center; font-size:12px; vertical-align:middle; line-height: 18px;}\r
+#charmap a {display:block; color:#000; text-decoration:none; border:0}\r
+#charmap a:hover {background:#CCC;color:#2B6FB6}\r
+#charmap #codeN {font-size:10px; font-family:Arial,Helvetica,sans-serif; text-align:center}\r
+#charmap #codeV {font-size:40px; height:80px; border:1px solid #AAA; text-align:center}\r
+\r
+/* Source */\r
+.wordWrapCode {vertical-align:middle; border:1px none #000000; background:transparent;}\r
+.mceActionPanel {margin-top:5px;}\r
+\r
+/* Tabs classes */\r
+.tabs {width:100%; height:18px; line-height:normal; background:url(../default/img/tabs.gif) repeat-x 0 -72px;}\r
+.tabs ul {margin:0; padding:0; list-style:none;}\r
+.tabs li {float:left; background:url(../default/img/tabs.gif) no-repeat 0 0; margin:0 2px 0 0; padding:0 0 0 10px; line-height:17px; height:18px; display:block;}\r
+.tabs li.current {background:url(../default/img/tabs.gif) no-repeat 0 -18px; margin-right:2px;}\r
+.tabs span {float:left; display:block; background:url(../default/img/tabs.gif) no-repeat right -36px; padding:0px 10px 0 0;}\r
+.tabs .current span {background:url(../default/img/tabs.gif) no-repeat right -54px;}\r
+.tabs a {text-decoration:none; font-family:Verdana, Arial; font-size:10px;}\r
+.tabs a:link, .tabs a:visited, .tabs a:hover {color:black;}\r
+\r
+/* Panels */\r
+.panel_wrapper div.panel {display:none;}\r
+.panel_wrapper div.current {display:block; width:100%; height:300px; overflow:visible;}\r
+.panel_wrapper {border:1px solid #919B9C; border-top:0px; padding:10px; padding-top:5px; clear:both; background:white;}\r
+\r
+/* Columns */\r
+.column {float:left;}\r
+.properties {width:100%;}\r
+.properties .column1 {}\r
+.properties .column2 {text-align:left;}\r
+\r
+/* Titles */\r
+h1, h2, h3, h4 {color:#2B6FB6; margin:0; padding:0; padding-top:5px;}\r
+h3 {font-size:14px;}\r
+.title {font-size:12px; font-weight:bold; color:#2B6FB6;}\r
+\r
+/* Dialog specific */\r
+#link .panel_wrapper, #link div.current {height:125px;}\r
+#image .panel_wrapper, #image div.current {height:200px;}\r
+#plugintable thead {font-weight:bold; background:#DDD;}\r
+#plugintable, #about #plugintable td {border:1px solid #919B9C;}\r
+#plugintable {width:96%; margin-top:10px;}\r
+#pluginscontainer {height:290px; overflow:auto;}\r
+#colorpicker #preview {float:right; width:50px; height:14px;line-height:1px; border:1px solid black; margin-left:5px;}\r
+#colorpicker #colors {float:left; border:1px solid gray; cursor:crosshair;}\r
+#colorpicker #light {border:1px solid gray; margin-left:5px; float:left;width:15px; height:150px; cursor:crosshair;}\r
+#colorpicker #light div {overflow:hidden;}\r
+#colorpicker #previewblock {float:right; padding-left:10px; height:20px;}\r
+#colorpicker .panel_wrapper div.current {height:175px;}\r
+#colorpicker #namedcolors {width:150px;}\r
+#colorpicker #namedcolors a {display:block; float:left; width:10px; height:10px; margin:1px 1px 0 0; overflow:hidden;}\r
+#colorpicker #colornamecontainer {margin-top:5px;}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png
new file mode 100644 (file)
index 0000000..12cfb41
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg.png differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png
new file mode 100644 (file)
index 0000000..8996c74
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_black.png differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png
new file mode 100644 (file)
index 0000000..bd5d255
Binary files /dev/null and b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/img/button_bg_silver.png differ
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui.css
new file mode 100644 (file)
index 0000000..a625397
--- /dev/null
@@ -0,0 +1,215 @@
+/* Reset */\r
+.o2k7Skin table, .o2k7Skin tbody, .o2k7Skin a, .o2k7Skin img, .o2k7Skin tr, .o2k7Skin div, .o2k7Skin td, .o2k7Skin iframe, .o2k7Skin span, .o2k7Skin *, .o2k7Skin .mceText {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000; vertical-align:baseline; width:auto; border-collapse:separate; text-align:left}\r
+.o2k7Skin a:hover, .o2k7Skin a:link, .o2k7Skin a:visited, .o2k7Skin a:active {text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+.o2k7Skin table td {vertical-align:middle}\r
+\r
+/* Containers */\r
+.o2k7Skin table {background:#E5EFFD}\r
+.o2k7Skin iframe {display:block; background:#FFF}\r
+.o2k7Skin .mceToolbar {height:26px}\r
+\r
+/* External */\r
+.o2k7Skin .mceExternalToolbar {position:absolute; border:1px solid #ABC6DD; border-bottom:0; display:none}\r
+.o2k7Skin .mceExternalToolbar td.mceToolbar {padding-right:13px;}\r
+.o2k7Skin .mceExternalClose {position:absolute; top:3px; right:3px; width:7px; height:7px; background:url(../../img/icons.gif) -820px 0}\r
+\r
+/* Layout */\r
+.o2k7Skin table.mceLayout {border:0; border-left:1px solid #ABC6DD; border-right:1px solid #ABC6DD}\r
+.o2k7Skin table.mceLayout tr.mceFirst td {border-top:1px solid #ABC6DD}\r
+.o2k7Skin table.mceLayout tr.mceLast td {border-bottom:1px solid #ABC6DD}\r
+.o2k7Skin table.mceToolbar, .o2k7Skin tr.mceFirst .mceToolbar tr td, .o2k7Skin tr.mceLast .mceToolbar tr td {border:0; margin:0; padding:0}\r
+.o2k7Skin .mceIframeContainer {border-top:1px solid #ABC6DD; border-bottom:1px solid #ABC6DD}\r
+.o2k7Skin .mceStatusbar {display:block; font-family:'MS Sans Serif',sans-serif,Verdana,Arial; font-size:9pt; line-height:16px; overflow:visible; color:#000; height:20px}\r
+.o2k7Skin .mceStatusbar div {float:left; padding:2px}\r
+.o2k7Skin .mceStatusbar a.mceResize {display:block; float:right; background:url(../../img/icons.gif) -800px 0; width:20px; height:20px; cursor:se-resize; outline:0}\r
+.o2k7Skin .mceStatusbar a:hover {text-decoration:underline}\r
+.o2k7Skin table.mceToolbar {margin-left:3px}\r
+.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;}\r
+.o2k7Skin .mceToolbar td.mceFirst span {margin:0}\r
+.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}\r
+.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none}\r
+.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px}\r
+.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+.o2k7Skin td.mceCenter {text-align:center;}\r
+.o2k7Skin td.mceCenter table {margin:0 auto; text-align:left;}\r
+.o2k7Skin td.mceRight table {margin:0 0 0 auto;}\r
+\r
+/* Button */\r
+.o2k7Skin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}\r
+.o2k7Skin a.mceButton span, .o2k7Skin a.mceButton img {margin-left:1px}\r
+.o2k7Skin .mceOldBoxModel a.mceButton span, .o2k7Skin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px}\r
+.o2k7Skin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\r
+.o2k7Skin a.mceButtonActive, .o2k7Skin a.mceButtonSelected {background-position:0 -44px}\r
+.o2k7Skin .mceButtonDisabled .mceIcon {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+.o2k7Skin .mceButtonLabeled {width:auto}\r
+.o2k7Skin .mceButtonLabeled span.mceIcon {float:left}\r
+.o2k7Skin span.mceButtonLabel {display:block; font-size:10px; padding:4px 6px 0 22px; font-family:Tahoma,Verdana,Arial,Helvetica}\r
+.o2k7Skin .mceButtonDisabled .mceButtonLabel {color:#888}\r
+\r
+/* Separator */\r
+.o2k7Skin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}\r
+\r
+/* ListBox */\r
+.o2k7Skin .mceListBox {margin-left:3px}\r
+.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block}\r
+.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden}\r
+.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0}\r
+.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF}\r
+.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px}\r
+.o2k7Skin .mceListBoxDisabled .mceText {color:gray}\r
+.o2k7Skin .mceListBoxMenu {overflow:auto; overflow-x:hidden}\r
+.o2k7Skin .mceOldBoxModel .mceListBox .mceText {height:22px}\r
+.o2k7Skin select.mceListBox {font-family:Tahoma,Verdana,Arial,Helvetica; font-size:12px; border:1px solid #b3c7e1; background:#FFF;}\r
+\r
+/* SplitButton */\r
+.o2k7Skin .mceSplitButton, .o2k7Skin .mceSplitButton a, .o2k7Skin .mceSplitButton span {display:block; height:22px}\r
+.o2k7Skin .mceSplitButton {background:url(img/button_bg.png)}\r
+.o2k7Skin .mceSplitButton a.mceAction {width:22px}\r
+.o2k7Skin .mceSplitButton span.mceAction {width:22px; background-image:url(../../img/icons.gif)}\r
+.o2k7Skin .mceSplitButton a.mceOpen {width:10px; background:url(img/button_bg.png) -44px 0}\r
+.o2k7Skin .mceSplitButton span.mceOpen {display:none}\r
+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceAction, .o2k7Skin .mceSplitButtonHover a.mceAction, .o2k7Skin .mceSplitButtonSelected {background:url(img/button_bg.png) 0 -22px}\r
+.o2k7Skin table.mceSplitButtonEnabled:hover a.mceOpen, .o2k7Skin .mceSplitButtonHover a.mceOpen, .o2k7Skin .mceSplitButtonSelected a.mceOpen {background-position:-44px -44px}\r
+.o2k7Skin .mceSplitButtonDisabled .mceAction {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+.o2k7Skin .mceSplitButtonActive {background-position:0 -44px}\r
+\r
+/* ColorSplitButton */\r
+.o2k7Skin div.mceColorSplitMenu table {background:#FFF; border:1px solid gray}\r
+.o2k7Skin .mceColorSplitMenu td {padding:2px}\r
+.o2k7Skin .mceColorSplitMenu a {display:block; width:9px; height:9px; overflow:hidden; border:1px solid #808080}\r
+.o2k7Skin .mceColorSplitMenu td.mceMoreColors {padding:1px 3px 1px 1px}\r
+.o2k7Skin .mceColorSplitMenu a.mceMoreColors {width:100%; height:auto; text-align:center; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; line-height:20px; border:1px solid #FFF}\r
+.o2k7Skin .mceColorSplitMenu a.mceMoreColors:hover {border:1px solid #0A246A; background-color:#B6BDD2}\r
+.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A}\r
+.o2k7Skin .mceColorPreview {margin-left:2px; width:16px; height:4px; overflow:hidden; background:#9a9b9a;overflow:hidden}\r
+.o2k7Skin .mce_forecolor span.mceAction, .o2k7Skin .mce_backcolor span.mceAction {height:15px;overflow:hidden}\r
+\r
+/* Menu */\r
+.o2k7Skin .mceMenu {position:absolute; left:0; top:0; z-index:1000; border:1px solid #ABC6DD}\r
+.o2k7Skin .mceNoIcons span.mceIcon {width:0;}\r
+.o2k7Skin .mceNoIcons a .mceText {padding-left:10px}\r
+.o2k7Skin .mceMenu table {background:#FFF}\r
+.o2k7Skin .mceMenu a, .o2k7Skin .mceMenu span, .o2k7Skin .mceMenu {display:block}\r
+.o2k7Skin .mceMenu td {height:20px}\r
+.o2k7Skin .mceMenu a {position:relative;padding:3px 0 4px 0}\r
+.o2k7Skin .mceMenu .mceText {position:relative; display:block; font-family:Tahoma,Verdana,Arial,Helvetica; color:#000; cursor:default; margin:0; padding:0 25px 0 25px; display:block}\r
+.o2k7Skin .mceMenu span.mceText, .o2k7Skin .mceMenu .mcePreview {font-size:11px}\r
+.o2k7Skin .mceMenu pre.mceText {font-family:Monospace}\r
+.o2k7Skin .mceMenu .mceIcon {position:absolute; top:0; left:0; width:22px;}\r
+.o2k7Skin .mceMenu .mceMenuItemEnabled a:hover, .o2k7Skin .mceMenu .mceMenuItemActive {background-color:#dbecf3}\r
+.o2k7Skin td.mceMenuItemSeparator {background:#DDD; height:1px}\r
+.o2k7Skin .mceMenuItemTitle a {border:0; background:#E5EFFD; border-bottom:1px solid #ABC6DD}\r
+.o2k7Skin .mceMenuItemTitle span.mceText {color:#000; font-weight:bold; padding-left:4px}\r
+.o2k7Skin .mceMenuItemDisabled .mceText {color:#888}\r
+.o2k7Skin .mceMenuItemSelected .mceIcon {background:url(../default/img/menu_check.gif)}\r
+.o2k7Skin .mceNoIcons .mceMenuItemSelected a {background:url(../default/img/menu_arrow.gif) no-repeat -6px center}\r
+.o2k7Skin .mceMenu span.mceMenuLine {display:none}\r
+.o2k7Skin .mceMenuItemSub a {background:url(../default/img/menu_arrow.gif) no-repeat top right;}\r
+\r
+/* Progress,Resize */\r
+.o2k7Skin .mceBlocker {position:absolute; left:0; top:0; z-index:1000; opacity:0.5; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=50); background:#FFF}\r
+.o2k7Skin .mceProgress {position:absolute; left:0; top:0; z-index:1001; background:url(../default/img/progress.gif) no-repeat; width:32px; height:32px; margin:-16px 0 0 -16px}\r
+\r
+/* Formats */\r
+.o2k7Skin .mce_formatPreview a {font-size:10px}\r
+.o2k7Skin .mce_p span.mceText {}\r
+.o2k7Skin .mce_address span.mceText {font-style:italic}\r
+.o2k7Skin .mce_pre span.mceText {font-family:monospace}\r
+.o2k7Skin .mce_h1 span.mceText {font-weight:bolder; font-size: 2em}\r
+.o2k7Skin .mce_h2 span.mceText {font-weight:bolder; font-size: 1.5em}\r
+.o2k7Skin .mce_h3 span.mceText {font-weight:bolder; font-size: 1.17em}\r
+.o2k7Skin .mce_h4 span.mceText {font-weight:bolder; font-size: 1em}\r
+.o2k7Skin .mce_h5 span.mceText {font-weight:bolder; font-size: .83em}\r
+.o2k7Skin .mce_h6 span.mceText {font-weight:bolder; font-size: .75em}\r
+\r
+/* Theme */\r
+.o2k7Skin span.mce_bold {background-position:0 0}\r
+.o2k7Skin span.mce_italic {background-position:-60px 0}\r
+.o2k7Skin span.mce_underline {background-position:-140px 0}\r
+.o2k7Skin span.mce_strikethrough {background-position:-120px 0}\r
+.o2k7Skin span.mce_undo {background-position:-160px 0}\r
+.o2k7Skin span.mce_redo {background-position:-100px 0}\r
+.o2k7Skin span.mce_cleanup {background-position:-40px 0}\r
+.o2k7Skin span.mce_bullist {background-position:-20px 0}\r
+.o2k7Skin span.mce_numlist {background-position:-80px 0}\r
+.o2k7Skin span.mce_justifyleft {background-position:-460px 0}\r
+.o2k7Skin span.mce_justifyright {background-position:-480px 0}\r
+.o2k7Skin span.mce_justifycenter {background-position:-420px 0}\r
+.o2k7Skin span.mce_justifyfull {background-position:-440px 0}\r
+.o2k7Skin span.mce_anchor {background-position:-200px 0}\r
+.o2k7Skin span.mce_indent {background-position:-400px 0}\r
+.o2k7Skin span.mce_outdent {background-position:-540px 0}\r
+.o2k7Skin span.mce_link {background-position:-500px 0}\r
+.o2k7Skin span.mce_unlink {background-position:-640px 0}\r
+.o2k7Skin span.mce_sub {background-position:-600px 0}\r
+.o2k7Skin span.mce_sup {background-position:-620px 0}\r
+.o2k7Skin span.mce_removeformat {background-position:-580px 0}\r
+.o2k7Skin span.mce_newdocument {background-position:-520px 0}\r
+.o2k7Skin span.mce_image {background-position:-380px 0}\r
+.o2k7Skin span.mce_help {background-position:-340px 0}\r
+.o2k7Skin span.mce_code {background-position:-260px 0}\r
+.o2k7Skin span.mce_hr {background-position:-360px 0}\r
+.o2k7Skin span.mce_visualaid {background-position:-660px 0}\r
+.o2k7Skin span.mce_charmap {background-position:-240px 0}\r
+.o2k7Skin span.mce_paste {background-position:-560px 0}\r
+.o2k7Skin span.mce_copy {background-position:-700px 0}\r
+.o2k7Skin span.mce_cut {background-position:-680px 0}\r
+.o2k7Skin span.mce_blockquote {background-position:-220px 0}\r
+.o2k7Skin .mce_forecolor span.mceAction {background-position:-720px 0}\r
+.o2k7Skin .mce_backcolor span.mceAction {background-position:-760px 0}\r
+.o2k7Skin span.mce_forecolorpicker {background-position:-720px 0}\r
+.o2k7Skin span.mce_backcolorpicker {background-position:-760px 0}\r
+\r
+/* Plugins */\r
+.o2k7Skin span.mce_advhr {background-position:-0px -20px}\r
+.o2k7Skin span.mce_ltr {background-position:-20px -20px}\r
+.o2k7Skin span.mce_rtl {background-position:-40px -20px}\r
+.o2k7Skin span.mce_emotions {background-position:-60px -20px}\r
+.o2k7Skin span.mce_fullpage {background-position:-80px -20px}\r
+.o2k7Skin span.mce_fullscreen {background-position:-100px -20px}\r
+.o2k7Skin span.mce_iespell {background-position:-120px -20px}\r
+.o2k7Skin span.mce_insertdate {background-position:-140px -20px}\r
+.o2k7Skin span.mce_inserttime {background-position:-160px -20px}\r
+.o2k7Skin span.mce_absolute {background-position:-180px -20px}\r
+.o2k7Skin span.mce_backward {background-position:-200px -20px}\r
+.o2k7Skin span.mce_forward {background-position:-220px -20px}\r
+.o2k7Skin span.mce_insert_layer {background-position:-240px -20px}\r
+.o2k7Skin span.mce_insertlayer {background-position:-260px -20px}\r
+.o2k7Skin span.mce_movebackward {background-position:-280px -20px}\r
+.o2k7Skin span.mce_moveforward {background-position:-300px -20px}\r
+.o2k7Skin span.mce_media {background-position:-320px -20px}\r
+.o2k7Skin span.mce_nonbreaking {background-position:-340px -20px}\r
+.o2k7Skin span.mce_pastetext {background-position:-360px -20px}\r
+.o2k7Skin span.mce_pasteword {background-position:-380px -20px}\r
+.o2k7Skin span.mce_selectall {background-position:-400px -20px}\r
+.o2k7Skin span.mce_preview {background-position:-420px -20px}\r
+.o2k7Skin span.mce_print {background-position:-440px -20px}\r
+.o2k7Skin span.mce_cancel {background-position:-460px -20px}\r
+.o2k7Skin span.mce_save {background-position:-480px -20px}\r
+.o2k7Skin span.mce_replace {background-position:-500px -20px}\r
+.o2k7Skin span.mce_search {background-position:-520px -20px}\r
+.o2k7Skin span.mce_styleprops {background-position:-560px -20px}\r
+.o2k7Skin span.mce_table {background-position:-580px -20px}\r
+.o2k7Skin span.mce_cell_props {background-position:-600px -20px}\r
+.o2k7Skin span.mce_delete_table {background-position:-620px -20px}\r
+.o2k7Skin span.mce_delete_col {background-position:-640px -20px}\r
+.o2k7Skin span.mce_delete_row {background-position:-660px -20px}\r
+.o2k7Skin span.mce_col_after {background-position:-680px -20px}\r
+.o2k7Skin span.mce_col_before {background-position:-700px -20px}\r
+.o2k7Skin span.mce_row_after {background-position:-720px -20px}\r
+.o2k7Skin span.mce_row_before {background-position:-740px -20px}\r
+.o2k7Skin span.mce_merge_cells {background-position:-760px -20px}\r
+.o2k7Skin span.mce_table_props {background-position:-980px -20px}\r
+.o2k7Skin span.mce_row_props {background-position:-780px -20px}\r
+.o2k7Skin span.mce_split_cells {background-position:-800px -20px}\r
+.o2k7Skin span.mce_template {background-position:-820px -20px}\r
+.o2k7Skin span.mce_visualchars {background-position:-840px -20px}\r
+.o2k7Skin span.mce_abbr {background-position:-860px -20px}\r
+.o2k7Skin span.mce_acronym {background-position:-880px -20px}\r
+.o2k7Skin span.mce_attribs {background-position:-900px -20px}\r
+.o2k7Skin span.mce_cite {background-position:-920px -20px}\r
+.o2k7Skin span.mce_del {background-position:-940px -20px}\r
+.o2k7Skin span.mce_ins {background-position:-960px -20px}\r
+.o2k7Skin span.mce_pagebreak {background-position:0 -40px}\r
+.o2k7Skin span.mce_restoredraft {background-position:-20px -40px}\r
+.o2k7Skin span.mce_spellchecker {background-position:-540px -20px}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_black.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_black.css
new file mode 100644 (file)
index 0000000..153f0c3
--- /dev/null
@@ -0,0 +1,8 @@
+/* Black */\r
+.o2k7SkinBlack .mceToolbar .mceToolbarStart span, .o2k7SkinBlack .mceToolbar .mceToolbarEnd span, .o2k7SkinBlack .mceButton, .o2k7SkinBlack .mceSplitButton, .o2k7SkinBlack .mceSeparator, .o2k7SkinBlack .mceSplitButton a.mceOpen, .o2k7SkinBlack .mceListBox a.mceOpen {background-image:url(img/button_bg_black.png)}\r
+.o2k7SkinBlack table, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack .mceMenuItemTitle span.mceText, .o2k7SkinBlack .mceStatusbar div, .o2k7SkinBlack .mceStatusbar span, .o2k7SkinBlack .mceStatusbar a {background:#535353; color:#FFF}\r
+.o2k7SkinBlack table.mceListBoxEnabled .mceText, o2k7SkinBlack .mceListBox .mceText {background:#FFF; border:1px solid #CBCFD4; border-bottom-color:#989FA9; border-right:0}\r
+.o2k7SkinBlack table.mceListBoxEnabled:hover .mceText, .o2k7SkinBlack .mceListBoxHover .mceText, .o2k7SkinBlack .mceListBoxSelected .mceText {background:#FFF; border:1px solid #FFBD69; border-right:0}\r
+.o2k7SkinBlack .mceExternalToolbar, .o2k7SkinBlack .mceListBox .mceText, .o2k7SkinBlack div.mceMenu, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceFirst td, .o2k7SkinBlack table.mceLayout, .o2k7SkinBlack .mceMenuItemTitle a, .o2k7SkinBlack table.mceLayout tr.mceLast td, .o2k7SkinBlack .mceIframeContainer {border-color: #535353;}\r
+.o2k7SkinBlack table.mceSplitButtonEnabled:hover a.mceAction, .o2k7SkinBlack .mceSplitButtonHover a.mceAction, .o2k7SkinBlack .mceSplitButtonSelected {background-image:url(img/button_bg_black.png)}\r
+.o2k7SkinBlack .mceMenu .mceMenuItemEnabled a:hover, .o2k7SkinBlack .mceMenu .mceMenuItemActive {background-color:#FFE7A1}
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_silver.css b/plugins/TinyMCE/js/themes/advanced/skins/o2k7/ui_silver.css
new file mode 100644 (file)
index 0000000..7fe3b45
--- /dev/null
@@ -0,0 +1,5 @@
+/* Silver */\r
+.o2k7SkinSilver .mceToolbar .mceToolbarStart span, .o2k7SkinSilver .mceButton, .o2k7SkinSilver .mceSplitButton, .o2k7SkinSilver .mceSeparator, .o2k7SkinSilver .mceSplitButton a.mceOpen, .o2k7SkinSilver .mceListBox a.mceOpen {background-image:url(img/button_bg_silver.png)}\r
+.o2k7SkinSilver table, .o2k7SkinSilver .mceMenuItemTitle a {background:#eee}\r
+.o2k7SkinSilver .mceListBox .mceText {background:#FFF}\r
+.o2k7SkinSilver .mceExternalToolbar, .o2k7SkinSilver .mceListBox .mceText, .o2k7SkinSilver div.mceMenu, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceFirst td, .o2k7SkinSilver table.mceLayout, .o2k7SkinSilver .mceMenuItemTitle a, .o2k7SkinSilver table.mceLayout tr.mceLast td, .o2k7SkinSilver .mceIframeContainer {border-color: #bbb}\r
diff --git a/plugins/TinyMCE/js/themes/advanced/source_editor.htm b/plugins/TinyMCE/js/themes/advanced/source_editor.htm
new file mode 100644 (file)
index 0000000..5957bbd
--- /dev/null
@@ -0,0 +1,25 @@
+<html xmlns="http://www.w3.org/1999/xhtml">\r
+<head>\r
+       <title>{#advanced_dlg.code_title}</title>\r
+       <script type="text/javascript" src="../../tiny_mce_popup.js"></script>\r
+       <script type="text/javascript" src="js/source_editor.js"></script>\r
+</head>\r
+<body onresize="resizeInputs();" style="display:none; overflow:hidden;">\r
+       <form name="source" onsubmit="saveContent();return false;" action="#">\r
+               <div style="float: left" class="title">{#advanced_dlg.code_title}</div>\r
+\r
+               <div id="wrapline" style="float: right">\r
+                       <input type="checkbox" name="wraped" id="wraped" onclick="toggleWordWrap(this);" class="wordWrapCode" /><label for="wraped">{#advanced_dlg.code_wordwrap}</label>\r
+               </div>\r
+\r
+               <br style="clear: both" />\r
+\r
+               <textarea name="htmlSource" id="htmlSource" rows="15" cols="100" style="width: 100%; height: 100%; font-family: 'Courier New',Courier,monospace; font-size: 12px;" dir="ltr" wrap="off" class="mceFocus"></textarea>\r
+\r
+               <div class="mceActionPanel">\r
+                       <input type="submit" name="insert" value="{#update}" id="insert" />\r
+                       <input type="button" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" id="cancel" />\r
+               </div>\r
+       </form>\r
+</body>\r
+</html>\r
diff --git a/plugins/TinyMCE/js/themes/simple/editor_template.js b/plugins/TinyMCE/js/themes/simple/editor_template.js
new file mode 100644 (file)
index 0000000..ed89abc
--- /dev/null
@@ -0,0 +1 @@
+(function(){var a=tinymce.DOM;tinymce.ThemeManager.requireLangPack("simple");tinymce.create("tinymce.themes.SimpleTheme",{init:function(c,d){var e=this,b=["Bold","Italic","Underline","Strikethrough","InsertUnorderedList","InsertOrderedList"],f=c.settings;e.editor=c;c.onInit.add(function(){c.onNodeChange.add(function(h,g){tinymce.each(b,function(i){g.get(i.toLowerCase()).setActive(h.queryCommandState(i))})});c.dom.loadCSS(d+"/skins/"+f.skin+"/content.css")});a.loadCSS((f.editor_css?c.documentBaseURI.toAbsolute(f.editor_css):"")||d+"/skins/"+f.skin+"/ui.css")},renderUI:function(h){var e=this,i=h.targetNode,b,c,d=e.editor,f=d.controlManager,g;i=a.insertAfter(a.create("span",{id:d.id+"_container","class":"mceEditor "+d.settings.skin+"SimpleSkin"}),i);i=g=a.add(i,"table",{cellPadding:0,cellSpacing:0,"class":"mceLayout"});i=c=a.add(i,"tbody");i=a.add(c,"tr");i=b=a.add(a.add(i,"td"),"div",{"class":"mceIframeContainer"});i=a.add(a.add(c,"tr",{"class":"last"}),"td",{"class":"mceToolbar mceLast",align:"center"});c=e.toolbar=f.createToolbar("tools1");c.add(f.createButton("bold",{title:"simple.bold_desc",cmd:"Bold"}));c.add(f.createButton("italic",{title:"simple.italic_desc",cmd:"Italic"}));c.add(f.createButton("underline",{title:"simple.underline_desc",cmd:"Underline"}));c.add(f.createButton("strikethrough",{title:"simple.striketrough_desc",cmd:"Strikethrough"}));c.add(f.createSeparator());c.add(f.createButton("undo",{title:"simple.undo_desc",cmd:"Undo"}));c.add(f.createButton("redo",{title:"simple.redo_desc",cmd:"Redo"}));c.add(f.createSeparator());c.add(f.createButton("cleanup",{title:"simple.cleanup_desc",cmd:"mceCleanup"}));c.add(f.createSeparator());c.add(f.createButton("insertunorderedlist",{title:"simple.bullist_desc",cmd:"InsertUnorderedList"}));c.add(f.createButton("insertorderedlist",{title:"simple.numlist_desc",cmd:"InsertOrderedList"}));c.renderTo(i);return{iframeContainer:b,editorContainer:d.id+"_container",sizeContainer:g,deltaHeight:-20}},getInfo:function(){return{longname:"Simple theme",author:"Moxiecode Systems AB",authorurl:"http://tinymce.moxiecode.com",version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add("simple",tinymce.themes.SimpleTheme)})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/simple/editor_template_src.js b/plugins/TinyMCE/js/themes/simple/editor_template_src.js
new file mode 100644 (file)
index 0000000..4b862d4
--- /dev/null
@@ -0,0 +1,85 @@
+/**\r
+ * editor_template_src.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+(function() {\r
+       var DOM = tinymce.DOM;\r
+\r
+       // Tell it to load theme specific language pack(s)\r
+       tinymce.ThemeManager.requireLangPack('simple');\r
+\r
+       tinymce.create('tinymce.themes.SimpleTheme', {\r
+               init : function(ed, url) {\r
+                       var t = this, states = ['Bold', 'Italic', 'Underline', 'Strikethrough', 'InsertUnorderedList', 'InsertOrderedList'], s = ed.settings;\r
+\r
+                       t.editor = ed;\r
+\r
+                       ed.onInit.add(function() {\r
+                               ed.onNodeChange.add(function(ed, cm) {\r
+                                       tinymce.each(states, function(c) {\r
+                                               cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));\r
+                                       });\r
+                               });\r
+\r
+                               ed.dom.loadCSS(url + "/skins/" + s.skin + "/content.css");\r
+                       });\r
+\r
+                       DOM.loadCSS((s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : '') || url + "/skins/" + s.skin + "/ui.css");\r
+               },\r
+\r
+               renderUI : function(o) {\r
+                       var t = this, n = o.targetNode, ic, tb, ed = t.editor, cf = ed.controlManager, sc;\r
+\r
+                       n = DOM.insertAfter(DOM.create('span', {id : ed.id + '_container', 'class' : 'mceEditor ' + ed.settings.skin + 'SimpleSkin'}), n);\r
+                       n = sc = DOM.add(n, 'table', {cellPadding : 0, cellSpacing : 0, 'class' : 'mceLayout'});\r
+                       n = tb = DOM.add(n, 'tbody');\r
+\r
+                       // Create iframe container\r
+                       n = DOM.add(tb, 'tr');\r
+                       n = ic = DOM.add(DOM.add(n, 'td'), 'div', {'class' : 'mceIframeContainer'});\r
+\r
+                       // Create toolbar container\r
+                       n = DOM.add(DOM.add(tb, 'tr', {'class' : 'last'}), 'td', {'class' : 'mceToolbar mceLast', align : 'center'});\r
+\r
+                       // Create toolbar\r
+                       tb = t.toolbar = cf.createToolbar("tools1");\r
+                       tb.add(cf.createButton('bold', {title : 'simple.bold_desc', cmd : 'Bold'}));\r
+                       tb.add(cf.createButton('italic', {title : 'simple.italic_desc', cmd : 'Italic'}));\r
+                       tb.add(cf.createButton('underline', {title : 'simple.underline_desc', cmd : 'Underline'}));\r
+                       tb.add(cf.createButton('strikethrough', {title : 'simple.striketrough_desc', cmd : 'Strikethrough'}));\r
+                       tb.add(cf.createSeparator());\r
+                       tb.add(cf.createButton('undo', {title : 'simple.undo_desc', cmd : 'Undo'}));\r
+                       tb.add(cf.createButton('redo', {title : 'simple.redo_desc', cmd : 'Redo'}));\r
+                       tb.add(cf.createSeparator());\r
+                       tb.add(cf.createButton('cleanup', {title : 'simple.cleanup_desc', cmd : 'mceCleanup'}));\r
+                       tb.add(cf.createSeparator());\r
+                       tb.add(cf.createButton('insertunorderedlist', {title : 'simple.bullist_desc', cmd : 'InsertUnorderedList'}));\r
+                       tb.add(cf.createButton('insertorderedlist', {title : 'simple.numlist_desc', cmd : 'InsertOrderedList'}));\r
+                       tb.renderTo(n);\r
+\r
+                       return {\r
+                               iframeContainer : ic,\r
+                               editorContainer : ed.id + '_container',\r
+                               sizeContainer : sc,\r
+                               deltaHeight : -20\r
+                       };\r
+               },\r
+\r
+               getInfo : function() {\r
+                       return {\r
+                               longname : 'Simple theme',\r
+                               author : 'Moxiecode Systems AB',\r
+                               authorurl : 'http://tinymce.moxiecode.com',\r
+                               version : tinymce.majorVersion + "." + tinymce.minorVersion\r
+                       }\r
+               }\r
+       });\r
+\r
+       tinymce.ThemeManager.add('simple', tinymce.themes.SimpleTheme);\r
+})();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/simple/img/icons.gif b/plugins/TinyMCE/js/themes/simple/img/icons.gif
new file mode 100644 (file)
index 0000000..16af141
Binary files /dev/null and b/plugins/TinyMCE/js/themes/simple/img/icons.gif differ
diff --git a/plugins/TinyMCE/js/themes/simple/langs/en.js b/plugins/TinyMCE/js/themes/simple/langs/en.js
new file mode 100644 (file)
index 0000000..9f08f10
--- /dev/null
@@ -0,0 +1,11 @@
+tinyMCE.addI18n('en.simple',{\r
+bold_desc:"Bold (Ctrl+B)",\r
+italic_desc:"Italic (Ctrl+I)",\r
+underline_desc:"Underline (Ctrl+U)",\r
+striketrough_desc:"Strikethrough",\r
+bullist_desc:"Unordered list",\r
+numlist_desc:"Ordered list",\r
+undo_desc:"Undo (Ctrl+Z)",\r
+redo_desc:"Redo (Ctrl+Y)",\r
+cleanup_desc:"Cleanup messy code"\r
+});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/themes/simple/skins/default/content.css b/plugins/TinyMCE/js/themes/simple/skins/default/content.css
new file mode 100644 (file)
index 0000000..2506c80
--- /dev/null
@@ -0,0 +1,25 @@
+body, td, pre {\r
+       font-family: Verdana, Arial, Helvetica, sans-serif;\r
+       font-size: 10px;\r
+}\r
+\r
+body {\r
+       background-color: #FFFFFF;\r
+}\r
+\r
+.mceVisualAid {\r
+       border: 1px dashed #BBBBBB;\r
+}\r
+\r
+/* MSIE specific */\r
+\r
+* html body {\r
+       scrollbar-3dlight-color: #F0F0EE;\r
+       scrollbar-arrow-color: #676662;\r
+       scrollbar-base-color: #F0F0EE;\r
+       scrollbar-darkshadow-color: #DDDDDD;\r
+       scrollbar-face-color: #E0E0DD;\r
+       scrollbar-highlight-color: #F0F0EE;\r
+       scrollbar-shadow-color: #F0F0EE;\r
+       scrollbar-track-color: #F5F5F5; \r
+}\r
diff --git a/plugins/TinyMCE/js/themes/simple/skins/default/ui.css b/plugins/TinyMCE/js/themes/simple/skins/default/ui.css
new file mode 100644 (file)
index 0000000..076fe84
--- /dev/null
@@ -0,0 +1,32 @@
+/* Reset */\r
+.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+\r
+/* Containers */\r
+.defaultSimpleSkin {position:relative}\r
+.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}\r
+.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}\r
+.defaultSimpleSkin .mceToolbar {height:24px;}\r
+\r
+/* Layout */\r
+.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}\r
+.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+\r
+/* Button */\r
+.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}\r
+.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}\r
+.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}\r
+.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+\r
+/* Separator */\r
+.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}\r
+\r
+/* Theme */\r
+.defaultSimpleSkin span.mce_bold {background-position:0 0}\r
+.defaultSimpleSkin span.mce_italic {background-position:-60px 0}\r
+.defaultSimpleSkin span.mce_underline {background-position:-140px 0}\r
+.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}\r
+.defaultSimpleSkin span.mce_undo {background-position:-160px 0}\r
+.defaultSimpleSkin span.mce_redo {background-position:-100px 0}\r
+.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}\r
+.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}\r
+.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}\r
diff --git a/plugins/TinyMCE/js/themes/simple/skins/o2k7/content.css b/plugins/TinyMCE/js/themes/simple/skins/o2k7/content.css
new file mode 100644 (file)
index 0000000..595809f
--- /dev/null
@@ -0,0 +1,17 @@
+body, td, pre {font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px;}\r
+\r
+body {background: #FFF;}\r
+.mceVisualAid {border: 1px dashed #BBB;}\r
+\r
+/* IE */\r
+\r
+* html body {\r
+scrollbar-3dlight-color: #F0F0EE;\r
+scrollbar-arrow-color: #676662;\r
+scrollbar-base-color: #F0F0EE;\r
+scrollbar-darkshadow-color: #DDDDDD;\r
+scrollbar-face-color: #E0E0DD;\r
+scrollbar-highlight-color: #F0F0EE;\r
+scrollbar-shadow-color: #F0F0EE;\r
+scrollbar-track-color: #F5F5F5;        \r
+}\r
diff --git a/plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png b/plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png
new file mode 100644 (file)
index 0000000..527e349
Binary files /dev/null and b/plugins/TinyMCE/js/themes/simple/skins/o2k7/img/button_bg.png differ
diff --git a/plugins/TinyMCE/js/themes/simple/skins/o2k7/ui.css b/plugins/TinyMCE/js/themes/simple/skins/o2k7/ui.css
new file mode 100644 (file)
index 0000000..cf6c35d
--- /dev/null
@@ -0,0 +1,35 @@
+/* Reset */\r
+.o2k7SimpleSkin table, .o2k7SimpleSkin tbody, .o2k7SimpleSkin a, .o2k7SimpleSkin img, .o2k7SimpleSkin tr, .o2k7SimpleSkin div, .o2k7SimpleSkin td, .o2k7SimpleSkin iframe, .o2k7SimpleSkin span, .o2k7SimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}\r
+\r
+/* Containers */\r
+.o2k7SimpleSkin {position:relative}\r
+.o2k7SimpleSkin table.mceLayout {background:#E5EFFD; border:1px solid #ABC6DD;}\r
+.o2k7SimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #ABC6DD;}\r
+.o2k7SimpleSkin .mceToolbar {height:26px;}\r
+\r
+/* Layout */\r
+.o2k7SimpleSkin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; }\r
+.o2k7SimpleSkin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px}\r
+.o2k7SimpleSkin span.mceIcon, .o2k7SimpleSkin img.mceIcon {display:block; width:20px; height:20px}\r
+.o2k7SimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}\r
+\r
+/* Button */\r
+.o2k7SimpleSkin .mceButton {display:block; background:url(img/button_bg.png); width:22px; height:22px}\r
+.o2k7SimpleSkin a.mceButton span, .o2k7SimpleSkin a.mceButton img {margin:1px 0 0 1px}\r
+.o2k7SimpleSkin a.mceButtonEnabled:hover {background-color:#B2BBD0; background-position:0 -22px}\r
+.o2k7SimpleSkin a.mceButtonActive {background-position:0 -44px}\r
+.o2k7SimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}\r
+\r
+/* Separator */\r
+.o2k7SimpleSkin .mceSeparator {display:block; background:url(img/button_bg.png) -22px 0; width:5px; height:22px}\r
+\r
+/* Theme */\r
+.o2k7SimpleSkin span.mce_bold {background-position:0 0}\r
+.o2k7SimpleSkin span.mce_italic {background-position:-60px 0}\r
+.o2k7SimpleSkin span.mce_underline {background-position:-140px 0}\r
+.o2k7SimpleSkin span.mce_strikethrough {background-position:-120px 0}\r
+.o2k7SimpleSkin span.mce_undo {background-position:-160px 0}\r
+.o2k7SimpleSkin span.mce_redo {background-position:-100px 0}\r
+.o2k7SimpleSkin span.mce_cleanup {background-position:-40px 0}\r
+.o2k7SimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}\r
+.o2k7SimpleSkin span.mce_insertorderedlist {background-position:-80px 0}\r
diff --git a/plugins/TinyMCE/js/tiny_mce.js b/plugins/TinyMCE/js/tiny_mce.js
new file mode 100644 (file)
index 0000000..782f7f4
--- /dev/null
@@ -0,0 +1 @@
+(function(c){var a=/^\s*|\s*$/g,d;var b={majorVersion:"3",minorVersion:"3.8",releaseDate:"2010-06-30",_init:function(){var r=this,o=document,m=navigator,f=m.userAgent,l,e,k,j,h,q;r.isOpera=c.opera&&opera.buildNumber;r.isWebKit=/WebKit/.test(f);r.isIE=!r.isWebKit&&!r.isOpera&&(/MSIE/gi).test(f)&&(/Explorer/gi).test(m.appName);r.isIE6=r.isIE&&/MSIE [56]/.test(f);r.isGecko=!r.isWebKit&&/Gecko/.test(f);r.isMac=f.indexOf("Mac")!=-1;r.isAir=/adobeair/i.test(f);r.isIDevice=/(iPad|iPhone)/.test(f);if(c.tinyMCEPreInit){r.suffix=tinyMCEPreInit.suffix;r.baseURL=tinyMCEPreInit.base;r.query=tinyMCEPreInit.query;return}r.suffix="";e=o.getElementsByTagName("base");for(l=0;l<e.length;l++){if(q=e[l].href){if(/^https?:\/\/[^\/]+$/.test(q)){q+="/"}j=q?q.match(/.*\//)[0]:""}}function g(i){if(i.src&&/tiny_mce(|_gzip|_jquery|_prototype)(_dev|_src)?.js/.test(i.src)){if(/_(src|dev)\.js/g.test(i.src)){r.suffix="_src"}if((h=i.src.indexOf("?"))!=-1){r.query=i.src.substring(h+1)}r.baseURL=i.src.substring(0,i.src.lastIndexOf("/"));if(j&&r.baseURL.indexOf("://")==-1&&r.baseURL.indexOf("/")!==0){r.baseURL=j+r.baseURL}return r.baseURL}return null}e=o.getElementsByTagName("script");for(l=0;l<e.length;l++){if(g(e[l])){return}}k=o.getElementsByTagName("head")[0];if(k){e=k.getElementsByTagName("script");for(l=0;l<e.length;l++){if(g(e[l])){return}}}return},is:function(f,e){if(!e){return f!==d}if(e=="array"&&(f.hasOwnProperty&&f instanceof Array)){return true}return typeof(f)==e},each:function(h,e,g){var i,f;if(!h){return 0}g=g||h;if(h.length!==d){for(i=0,f=h.length;i<f;i++){if(e.call(g,h[i],i,h)===false){return 0}}}else{for(i in h){if(h.hasOwnProperty(i)){if(e.call(g,h[i],i,h)===false){return 0}}}}return 1},trim:function(e){return(e?""+e:"").replace(a,"")},create:function(m,e){var l=this,f,h,i,j,g,k=0;m=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(m);i=m[3].match(/(^|\.)(\w+)$/i)[2];h=l.createNS(m[3].replace(/\.\w+$/,""));if(h[i]){return}if(m[2]=="static"){h[i]=e;if(this.onCreate){this.onCreate(m[2],m[3],h[i])}return}if(!e[i]){e[i]=function(){};k=1}h[i]=e[i];l.extend(h[i].prototype,e);if(m[5]){f=l.resolve(m[5]).prototype;j=m[5].match(/\.(\w+)$/i)[1];g=h[i];if(k){h[i]=function(){return f[j].apply(this,arguments)}}else{h[i]=function(){this.parent=f[j];return g.apply(this,arguments)}}h[i].prototype[i]=h[i];l.each(f,function(o,p){h[i].prototype[p]=f[p]});l.each(e,function(o,p){if(f[p]){h[i].prototype[p]=function(){this.parent=f[p];return o.apply(this,arguments)}}else{if(p!=i){h[i].prototype[p]=o}}})}l.each(e["static"],function(o,p){h[i][p]=o});if(this.onCreate){this.onCreate(m[2],m[3],h[i].prototype)}},walk:function(h,g,i,e){e=e||this;if(h){if(i){h=h[i]}b.each(h,function(j,f){if(g.call(e,j,f,i)===false){return false}b.walk(j,g,i,e)})}},createNS:function(h,g){var f,e;g=g||c;h=h.split(".");for(f=0;f<h.length;f++){e=h[f];if(!g[e]){g[e]={}}g=g[e]}return g},resolve:function(h,g){var f,e;g=g||c;h=h.split(".");for(f=0,e=h.length;f<e;f++){g=g[h[f]];if(!g){break}}return g},addUnload:function(i,h){var g=this;i={func:i,scope:h||this};if(!g.unloads){function e(){var f=g.unloads,k,l;if(f){for(l in f){k=f[l];if(k&&k.func){k.func.call(k.scope,1)}}if(c.detachEvent){c.detachEvent("onbeforeunload",j);c.detachEvent("onunload",e)}else{if(c.removeEventListener){c.removeEventListener("unload",e,false)}}g.unloads=k=f=w=e=0;if(c.CollectGarbage){CollectGarbage()}}}function j(){var k=document;if(k.readyState=="interactive"){function f(){k.detachEvent("onstop",f);if(e){e()}k=0}if(k){k.attachEvent("onstop",f)}c.setTimeout(function(){if(k){k.detachEvent("onstop",f)}},0)}}if(c.attachEvent){c.attachEvent("onunload",e);c.attachEvent("onbeforeunload",j)}else{if(c.addEventListener){c.addEventListener("unload",e,false)}}g.unloads=[i]}else{g.unloads.push(i)}return i},removeUnload:function(h){var e=this.unloads,g=null;b.each(e,function(j,f){if(j&&j.func==h){e.splice(f,1);g=h;return false}});return g},explode:function(e,f){return e?b.map(e.split(f||","),b.trim):e},_addVer:function(f){var e;if(!this.query){return f}e=(f.indexOf("?")==-1?"?":"&")+this.query;if(f.indexOf("#")==-1){return f+e}return f.replace("#",e+"#")}};b._init();c.tinymce=c.tinyMCE=b})(window);(function(e,d){var c=d.is,b=/^(href|src|style)$/i,f;if(!e){return alert("Load jQuery first!")}d.$=e;d.adapter={patchEditor:function(j){var i=e.fn;function h(n,o){var m=this;if(o){m.removeAttr("_mce_style")}return i.css.apply(m,arguments)}function g(n,o){var m=this;if(b.test(n)){if(o!==f){m.each(function(p,q){j.dom.setAttrib(q,n,o)});return m}else{return m.attr("_mce_"+n)}}return i.attr.apply(m,arguments)}function k(m){return function(n){if(n){n=j.dom.processHTML(n)}return m.call(this,n)}}function l(m){if(m.css!==h){m.css=h;m.attr=g;m.html=k(i.html);m.append=k(i.append);m.prepend=k(i.prepend);m.after=k(i.after);m.before=k(i.before);m.replaceWith=k(i.replaceWith);m.tinymce=j;m.pushStack=function(){return l(i.pushStack.apply(this,arguments))}}return m}j.$=function(m,n){var o=j.getDoc();return l(e(m||o,o||n))}}};d.extend=e.extend;d.extend(d,{map:e.map,grep:function(g,h){return e.grep(g,h||function(){return 1})},inArray:function(g,h){return e.inArray(h,g||[])}});var a={"tinymce.dom.DOMUtils":{select:function(i,h){var g=this;return e.find(i,g.get(h)||g.get(g.settings.root_element)||g.doc,[])},is:function(h,g){return e(this.get(h)).is(g)}}};d.onCreate=function(g,i,h){d.extend(h,a[i])}})(window.jQuery,tinymce);tinymce.create("tinymce.util.Dispatcher",{scope:null,listeners:null,Dispatcher:function(a){this.scope=a||this;this.listeners=[]},add:function(a,b){this.listeners.push({cb:a,scope:b||this.scope});return a},addToTop:function(a,b){this.listeners.unshift({cb:a,scope:b||this.scope});return a},remove:function(a){var b=this.listeners,c=null;tinymce.each(b,function(e,d){if(a==e.cb){c=a;b.splice(d,1);return false}});return c},dispatch:function(){var f,d=arguments,e,b=this.listeners,g;for(e=0;e<b.length;e++){g=b[e];f=g.cb.apply(g.scope,d);if(f===false){break}}return f}});(function(){var a=tinymce.each;tinymce.create("tinymce.util.URI",{URI:function(e,g){var f=this,h,d,c;e=tinymce.trim(e);g=f.settings=g||{};if(/^(mailto|tel|news|javascript|about|data):/i.test(e)||/^\s*#/.test(e)){f.source=e;return}if(e.indexOf("/")===0&&e.indexOf("//")!==0){e=(g.base_uri?g.base_uri.protocol||"http":"http")+"://mce_host"+e}if(!/^\w*:?\/\//.test(e)){e=(g.base_uri.protocol||"http")+"://mce_host"+f.toAbsPath(g.base_uri.path,e)}e=e.replace(/@@/g,"(mce_at)");e=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(e);a(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(b,j){var k=e[j];if(k){k=k.replace(/\(mce_at\)/g,"@@")}f[b]=k});if(c=g.base_uri){if(!f.protocol){f.protocol=c.protocol}if(!f.userInfo){f.userInfo=c.userInfo}if(!f.port&&f.host=="mce_host"){f.port=c.port}if(!f.host||f.host=="mce_host"){f.host=c.host}f.source=""}},setPath:function(c){var b=this;c=/^(.*?)\/?(\w+)?$/.exec(c);b.path=c[0];b.directory=c[1];b.file=c[2];b.source="";b.getURI()},toRelative:function(b){var c=this,d;if(b==="./"){return b}b=new tinymce.util.URI(b,{base_uri:c});if((b.host!="mce_host"&&c.host!=b.host&&b.host)||c.port!=b.port||c.protocol!=b.protocol){return b.getURI()}d=c.toRelPath(c.path,b.path);if(b.query){d+="?"+b.query}if(b.anchor){d+="#"+b.anchor}return d},toAbsolute:function(b,c){var b=new tinymce.util.URI(b,{base_uri:this});return b.getURI(this.host==b.host&&this.protocol==b.protocol?c:0)},toRelPath:function(g,h){var c,f=0,d="",e,b;g=g.substring(0,g.lastIndexOf("/"));g=g.split("/");c=h.split("/");if(g.length>=c.length){for(e=0,b=g.length;e<b;e++){if(e>=c.length||g[e]!=c[e]){f=e+1;break}}}if(g.length<c.length){for(e=0,b=c.length;e<b;e++){if(e>=g.length||g[e]!=c[e]){f=e+1;break}}}if(f==1){return h}for(e=0,b=g.length-(f-1);e<b;e++){d+="../"}for(e=f-1,b=c.length;e<b;e++){if(e!=f-1){d+="/"+c[e]}else{d+=c[e]}}return d},toAbsPath:function(e,f){var c,b=0,h=[],d,g;d=/\/$/.test(f)?"/":"";e=e.split("/");f=f.split("/");a(e,function(i){if(i){h.push(i)}});e=h;for(c=f.length-1,h=[];c>=0;c--){if(f[c].length==0||f[c]=="."){continue}if(f[c]==".."){b++;continue}if(b>0){b--;continue}h.push(f[c])}c=e.length-b;if(c<=0){g=h.reverse().join("/")}else{g=e.slice(0,c).join("/")+"/"+h.reverse().join("/")}if(g.indexOf("/")!==0){g="/"+g}if(d&&g.lastIndexOf("/")!==g.length-1){g+=d}return g},getURI:function(d){var c,b=this;if(!b.source||d){c="";if(!d){if(b.protocol){c+=b.protocol+"://"}if(b.userInfo){c+=b.userInfo+"@"}if(b.host){c+=b.host}if(b.port){c+=":"+b.port}}if(b.path){c+=b.path}if(b.query){c+="?"+b.query}if(b.anchor){c+="#"+b.anchor}b.source=c}return b.source}})})();(function(){var a=tinymce.each;tinymce.create("static tinymce.util.Cookie",{getHash:function(d){var b=this.get(d),c;if(b){a(b.split("&"),function(e){e=e.split("=");c=c||{};c[unescape(e[0])]=unescape(e[1])})}return c},setHash:function(j,b,g,f,i,c){var h="";a(b,function(e,d){h+=(!h?"":"&")+escape(d)+"="+escape(e)});this.set(j,h,g,f,i,c)},get:function(i){var h=document.cookie,g,f=i+"=",d;if(!h){return}d=h.indexOf("; "+f);if(d==-1){d=h.indexOf(f);if(d!=0){return null}}else{d+=2}g=h.indexOf(";",d);if(g==-1){g=h.length}return unescape(h.substring(d+f.length,g))},set:function(i,b,g,f,h,c){document.cookie=i+"="+escape(b)+((g)?"; expires="+g.toGMTString():"")+((f)?"; path="+escape(f):"")+((h)?"; domain="+h:"")+((c)?"; secure":"")},remove:function(e,b){var c=new Date();c.setTime(c.getTime()-1000);this.set(e,"",c,b,c)}})})();tinymce.create("static tinymce.util.JSON",{serialize:function(e){var c,a,d=tinymce.util.JSON.serialize,b;if(e==null){return"null"}b=typeof e;if(b=="string"){a="\bb\tt\nn\ff\rr\"\"''\\\\";return'"'+e.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(g,f){c=a.indexOf(f);if(c+1){return"\\"+a.charAt(c+1)}g=f.charCodeAt().toString(16);return"\\u"+"0000".substring(g.length)+g})+'"'}if(b=="object"){if(e.hasOwnProperty&&e instanceof Array){for(c=0,a="[";c<e.length;c++){a+=(c>0?",":"")+d(e[c])}return a+"]"}a="{";for(c in e){a+=typeof e[c]!="function"?(a.length>1?',"':'"')+c+'":'+d(e[c]):""}return a+"}"}return""+e},parse:function(s){try{return eval("("+s+")")}catch(ex){}}});tinymce.create("static tinymce.util.XHR",{send:function(g){var a,e,b=window,h=0;g.scope=g.scope||this;g.success_scope=g.success_scope||g.scope;g.error_scope=g.error_scope||g.scope;g.async=g.async===false?false:true;g.data=g.data||"";function d(i){a=0;try{a=new ActiveXObject(i)}catch(c){}return a}a=b.XMLHttpRequest?new XMLHttpRequest():d("Microsoft.XMLHTTP")||d("Msxml2.XMLHTTP");if(a){if(a.overrideMimeType){a.overrideMimeType(g.content_type)}a.open(g.type||(g.data?"POST":"GET"),g.url,g.async);if(g.content_type){a.setRequestHeader("Content-Type",g.content_type)}a.setRequestHeader("X-Requested-With","XMLHttpRequest");a.send(g.data);function f(){if(!g.async||a.readyState==4||h++>10000){if(g.success&&h<10000&&a.status==200){g.success.call(g.success_scope,""+a.responseText,a,g)}else{if(g.error){g.error.call(g.error_scope,h>10000?"TIMED_OUT":"GENERAL",a,g)}}a=null}else{b.setTimeout(f,10)}}if(!g.async){return f()}e=b.setTimeout(f,10)}}});(function(){var c=tinymce.extend,b=tinymce.util.JSON,a=tinymce.util.XHR;tinymce.create("tinymce.util.JSONRequest",{JSONRequest:function(d){this.settings=c({},d);this.count=0},send:function(f){var e=f.error,d=f.success;f=c(this.settings,f);f.success=function(h,g){h=b.parse(h);if(typeof(h)=="undefined"){h={error:"JSON Parse error."}}if(h.error){e.call(f.error_scope||f.scope,h.error,g)}else{d.call(f.success_scope||f.scope,h.result)}};f.error=function(h,g){e.call(f.error_scope||f.scope,h,g)};f.data=b.serialize({id:f.id||"c"+(this.count++),method:f.method,params:f.params});f.content_type="application/json";a.send(f)},"static":{sendRPC:function(d){return new tinymce.util.JSONRequest().send(d)}}})}());(function(m){var k=m.each,j=m.is,i=m.isWebKit,d=m.isIE,a=/^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,e=g("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),f=g("src,href,style,coords,shape"),c={"&":"&amp;",'"':"&quot;","<":"&lt;",">":"&gt;"},n=/[<>&\"]/g,b=/^([a-z0-9],?)+$/i,h=/<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,l=/(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;function g(q){var p={},o;q=q.split(",");for(o=q.length;o>=0;o--){p[q[o]]=1}return p}m.create("tinymce.dom.DOMUtils",{doc:null,root:null,files:null,pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(u,q){var p=this,o;p.doc=u;p.win=window;p.files={};p.cssFlicker=false;p.counter=0;p.boxModel=!m.isIE||u.compatMode=="CSS1Compat";p.stdMode=u.documentMode===8;p.settings=q=m.extend({keep_values:false,hex_colors:1,process_html:1},q);if(m.isIE6){try{u.execCommand("BackgroundImageCache",false,true)}catch(r){p.cssFlicker=true}}if(q.valid_styles){p._styles={};k(q.valid_styles,function(t,s){p._styles[s]=m.explode(t)})}m.addUnload(p.destroy,p)},getRoot:function(){var o=this,p=o.settings;return(p&&o.get(p.root_element))||o.doc.body},getViewPort:function(p){var q,o;p=!p?this.win:p;q=p.document;o=this.boxModel?q.documentElement:q.body;return{x:p.pageXOffset||o.scrollLeft,y:p.pageYOffset||o.scrollTop,w:p.innerWidth||o.clientWidth,h:p.innerHeight||o.clientHeight}},getRect:function(s){var r,o=this,q;s=o.get(s);r=o.getPos(s);q=o.getSize(s);return{x:r.x,y:r.y,w:q.w,h:q.h}},getSize:function(r){var p=this,o,q;r=p.get(r);o=p.getStyle(r,"width");q=p.getStyle(r,"height");if(o.indexOf("px")===-1){o=0}if(q.indexOf("px")===-1){q=0}return{w:parseInt(o)||r.offsetWidth||r.clientWidth,h:parseInt(q)||r.offsetHeight||r.clientHeight}},getParent:function(q,p,o){return this.getParents(q,p,o,false)},getParents:function(z,v,s,y){var q=this,p,u=q.settings,x=[];z=q.get(z);y=y===undefined;if(u.strict_root){s=s||q.getRoot()}if(j(v,"string")){p=v;if(v==="*"){v=function(o){return o.nodeType==1}}else{v=function(o){return q.is(o,p)}}}while(z){if(z==s||!z.nodeType||z.nodeType===9){break}if(!v||v(z)){if(y){x.push(z)}else{return z}}z=z.parentNode}return y?x:null},get:function(o){var p;if(o&&this.doc&&typeof(o)=="string"){p=o;o=this.doc.getElementById(o);if(o&&o.id!==p){return this.doc.getElementsByName(p)[1]}}return o},getNext:function(p,o){return this._findSib(p,o,"nextSibling")},getPrev:function(p,o){return this._findSib(p,o,"previousSibling")},add:function(s,v,o,r,u){var q=this;return this.run(s,function(y){var x,t;x=j(v,"string")?q.doc.createElement(v):v;q.setAttribs(x,o);if(r){if(r.nodeType){x.appendChild(r)}else{q.setHTML(x,r)}}return !u?y.appendChild(x):x})},create:function(q,o,p){return this.add(this.doc.createElement(q),q,o,p,1)},createHTML:function(v,p,s){var u="",r=this,q;u+="<"+v;for(q in p){if(p.hasOwnProperty(q)){u+=" "+q+'="'+r.encode(p[q])+'"'}}if(m.is(s)){return u+">"+s+"</"+v+">"}return u+" />"},remove:function(o,p){return this.run(o,function(r){var q,s;q=r.parentNode;if(!q){return null}if(p){while(s=r.firstChild){if(!m.isIE||s.nodeType!==3||s.nodeValue){q.insertBefore(s,r)}else{r.removeChild(s)}}}return q.removeChild(r)})},setStyle:function(r,o,p){var q=this;return q.run(r,function(v){var u,t;u=v.style;o=o.replace(/-(\D)/g,function(x,s){return s.toUpperCase()});if(q.pixelStyles.test(o)&&(m.is(p,"number")||/^[\-0-9\.]+$/.test(p))){p+="px"}switch(o){case"opacity":if(d){u.filter=p===""?"":"alpha(opacity="+(p*100)+")";if(!r.currentStyle||!r.currentStyle.hasLayout){u.display="inline-block"}}u[o]=u["-moz-opacity"]=u["-khtml-opacity"]=p||"";break;case"float":d?u.styleFloat=p:u.cssFloat=p;break;default:u[o]=p||""}if(q.settings.update_styles){q.setAttrib(v,"_mce_style")}})},getStyle:function(r,o,q){r=this.get(r);if(!r){return false}if(this.doc.defaultView&&q){o=o.replace(/[A-Z]/g,function(s){return"-"+s});try{return this.doc.defaultView.getComputedStyle(r,null).getPropertyValue(o)}catch(p){return null}}o=o.replace(/-(\D)/g,function(t,s){return s.toUpperCase()});if(o=="float"){o=d?"styleFloat":"cssFloat"}if(r.currentStyle&&q){return r.currentStyle[o]}return r.style[o]},setStyles:function(u,v){var q=this,r=q.settings,p;p=r.update_styles;r.update_styles=0;k(v,function(o,s){q.setStyle(u,s,o)});r.update_styles=p;if(r.update_styles){q.setAttrib(u,r.cssText)}},setAttrib:function(q,r,o){var p=this;if(!q||!r){return}if(p.settings.strict){r=r.toLowerCase()}return this.run(q,function(u){var t=p.settings;switch(r){case"style":if(!j(o,"string")){k(o,function(s,x){p.setStyle(u,x,s)});return}if(t.keep_values){if(o&&!p._isRes(o)){u.setAttribute("_mce_style",o,2)}else{u.removeAttribute("_mce_style",2)}}u.style.cssText=o;break;case"class":u.className=o||"";break;case"src":case"href":if(t.keep_values){if(t.url_converter){o=t.url_converter.call(t.url_converter_scope||p,o,r,u)}p.setAttrib(u,"_mce_"+r,o,2)}break;case"shape":u.setAttribute("_mce_style",o);break}if(j(o)&&o!==null&&o.length!==0){u.setAttribute(r,""+o,2)}else{u.removeAttribute(r,2)}})},setAttribs:function(q,r){var p=this;return this.run(q,function(o){k(r,function(s,t){p.setAttrib(o,t,s)})})},getAttrib:function(r,s,q){var o,p=this;r=p.get(r);if(!r||r.nodeType!==1){return false}if(!j(q)){q=""}if(/^(src|href|style|coords|shape)$/.test(s)){o=r.getAttribute("_mce_"+s);if(o){return o}}if(d&&p.props[s]){o=r[p.props[s]];o=o&&o.nodeValue?o.nodeValue:o}if(!o){o=r.getAttribute(s,2)}if(/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(s)){if(r[p.props[s]]===true&&o===""){return s}return o?s:""}if(r.nodeName==="FORM"&&r.getAttributeNode(s)){return r.getAttributeNode(s).nodeValue}if(s==="style"){o=o||r.style.cssText;if(o){o=p.serializeStyle(p.parseStyle(o),r.nodeName);if(p.settings.keep_values&&!p._isRes(o)){r.setAttribute("_mce_style",o)}}}if(i&&s==="class"&&o){o=o.replace(/(apple|webkit)\-[a-z\-]+/gi,"")}if(d){switch(s){case"rowspan":case"colspan":if(o===1){o=""}break;case"size":if(o==="+0"||o===20||o===0){o=""}break;case"width":case"height":case"vspace":case"checked":case"disabled":case"readonly":if(o===0){o=""}break;case"hspace":if(o===-1){o=""}break;case"maxlength":case"tabindex":if(o===32768||o===2147483647||o==="32768"){o=""}break;case"multiple":case"compact":case"noshade":case"nowrap":if(o===65535){return s}return q;case"shape":o=o.toLowerCase();break;default:if(s.indexOf("on")===0&&o){o=(""+o).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/,"$1")}}}return(o!==undefined&&o!==null&&o!=="")?""+o:q},getPos:function(A,s){var p=this,o=0,z=0,u,v=p.doc,q;A=p.get(A);s=s||v.body;if(A){if(d&&!p.stdMode){A=A.getBoundingClientRect();u=p.boxModel?v.documentElement:v.body;o=p.getStyle(p.select("html")[0],"borderWidth");o=(o=="medium"||p.boxModel&&!p.isIE6)&&2||o;return{x:A.left+u.scrollLeft-o,y:A.top+u.scrollTop-o}}q=A;while(q&&q!=s&&q.nodeType){o+=q.offsetLeft||0;z+=q.offsetTop||0;q=q.offsetParent}q=A.parentNode;while(q&&q!=s&&q.nodeType){o-=q.scrollLeft||0;z-=q.scrollTop||0;q=q.parentNode}}return{x:o,y:z}},parseStyle:function(r){var u=this,v=u.settings,x={};if(!r){return x}function p(D,A,C){var z,B,o,y;z=x[D+"-top"+A];if(!z){return}B=x[D+"-right"+A];if(z!=B){return}o=x[D+"-bottom"+A];if(B!=o){return}y=x[D+"-left"+A];if(o!=y){return}x[C]=y;delete x[D+"-top"+A];delete x[D+"-right"+A];delete x[D+"-bottom"+A];delete x[D+"-left"+A]}function q(y,s,o,A){var z;z=x[s];if(!z){return}z=x[o];if(!z){return}z=x[A];if(!z){return}x[y]=x[s]+" "+x[o]+" "+x[A];delete x[s];delete x[o];delete x[A]}r=r.replace(/&(#?[a-z0-9]+);/g,"&$1_MCE_SEMI_");k(r.split(";"),function(s){var o,t=[];if(s){s=s.replace(/_MCE_SEMI_/g,";");s=s.replace(/url\([^\)]+\)/g,function(y){t.push(y);return"url("+t.length+")"});s=s.split(":");o=m.trim(s[1]);o=o.replace(/url\(([^\)]+)\)/g,function(z,y){return t[parseInt(y)-1]});o=o.replace(/rgb\([^\)]+\)/g,function(y){return u.toHex(y)});if(v.url_converter){o=o.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(y,z){return"url("+v.url_converter.call(v.url_converter_scope||u,u.decode(z),"style",null)+")"})}x[m.trim(s[0]).toLowerCase()]=o}});p("border","","border");p("border","-width","border-width");p("border","-color","border-color");p("border","-style","border-style");p("padding","","padding");p("margin","","margin");q("border","border-width","border-style","border-color");if(d){if(x.border=="medium none"){x.border=""}}return x},serializeStyle:function(v,p){var q=this,r="";function u(s,o){if(o&&s){if(o.indexOf("-")===0){return}switch(o){case"font-weight":if(s==700){s="bold"}break;case"color":case"background-color":s=s.toLowerCase();break}r+=(r?" ":"")+o+": "+s+";"}}if(p&&q._styles){k(q._styles["*"],function(o){u(v[o],o)});k(q._styles[p.toLowerCase()],function(o){u(v[o],o)})}else{k(v,u)}return r},loadCSS:function(o){var q=this,r=q.doc,p;if(!o){o=""}p=q.select("head")[0];k(o.split(","),function(s){var t;if(q.files[s]){return}q.files[s]=true;t=q.create("link",{rel:"stylesheet",href:m._addVer(s)});if(d&&r.documentMode){t.onload=function(){r.recalc();t.onload=null}}p.appendChild(t)})},addClass:function(o,p){return this.run(o,function(q){var r;if(!p){return 0}if(this.hasClass(q,p)){return q.className}r=this.removeClass(q,p);return q.className=(r!=""?(r+" "):"")+p})},removeClass:function(q,r){var o=this,p;return o.run(q,function(t){var s;if(o.hasClass(t,r)){if(!p){p=new RegExp("(^|\\s+)"+r+"(\\s+|$)","g")}s=t.className.replace(p," ");s=m.trim(s!=" "?s:"");t.className=s;if(!s){t.removeAttribute("class");t.removeAttribute("className")}return s}return t.className})},hasClass:function(p,o){p=this.get(p);if(!p||!o){return false}return(" "+p.className+" ").indexOf(" "+o+" ")!==-1},show:function(o){return this.setStyle(o,"display","block")},hide:function(o){return this.setStyle(o,"display","none")},isHidden:function(o){o=this.get(o);return !o||o.style.display=="none"||this.getStyle(o,"display")=="none"},uniqueId:function(o){return(!o?"mce_":o)+(this.counter++)},setHTML:function(q,p){var o=this;return this.run(q,function(v){var r,t,s,z,u,r;p=o.processHTML(p);if(d){function y(){while(v.firstChild){v.firstChild.removeNode()}try{v.innerHTML="<br />"+p;v.removeChild(v.firstChild)}catch(x){r=o.create("div");r.innerHTML="<br />"+p;k(r.childNodes,function(B,A){if(A){v.appendChild(B)}})}}if(o.settings.fix_ie_paragraphs){p=p.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 _mce_keep="true">&nbsp;</p>')}y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("p");for(t=s.length-1,r=0;t>=0;t--){z=s[t];if(!z.hasChildNodes()){if(!z._mce_keep){r=1;break}z.removeAttribute("_mce_keep")}}}if(r){p=p.replace(/<p ([^>]+)>|<p>/ig,'<div $1 _mce_tmp="1">');p=p.replace(/<\/p>/gi,"</div>");y();if(o.settings.fix_ie_paragraphs){s=v.getElementsByTagName("DIV");for(t=s.length-1;t>=0;t--){z=s[t];if(z._mce_tmp){u=o.doc.createElement("p");z.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(A,x){var B;if(x!=="_mce_tmp"){B=z.getAttribute(x);if(!B&&x==="class"){B=z.className}u.setAttribute(x,B)}});for(r=0;r<z.childNodes.length;r++){u.appendChild(z.childNodes[r].cloneNode(true))}z.swapNode(u)}}}}}else{v.innerHTML=p}return p})},processHTML:function(r){var p=this,q=p.settings,v=[];if(!q.process_html){return r}if(d){r=r.replace(/&apos;/g,"&#39;");r=r.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,"")}r=r.replace(/<a( )([^>]+)\/>|<a\/>/gi,"<a$1$2></a>");if(q.keep_values){if(/<script|noscript|style/i.test(r)){function o(t){t=t.replace(/(<!--\[CDATA\[|\]\]-->)/g,"\n");t=t.replace(/^[\r\n]*|[\r\n]*$/g,"");t=t.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,"");t=t.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,"");return t}r=r.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/gi,function(s,x,t){if(!x){x=' type="text/javascript"'}x=x.replace(/src=\"([^\"]+)\"?/i,function(y,z){if(q.url_converter){z=p.encode(q.url_converter.call(q.url_converter_scope||p,p.decode(z),"src","script"))}return'_mce_src="'+z+'"'});if(m.trim(t)){v.push(o(t));t="<!--\nMCE_SCRIPT:"+(v.length-1)+"\n// -->"}return"<mce:script"+x+">"+t+"</mce:script>"});r=r.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/gi,function(s,x,t){if(t){v.push(o(t));t="<!--\nMCE_SCRIPT:"+(v.length-1)+"\n-->"}return"<mce:style"+x+">"+t+"</mce:style><style "+x+' _mce_bogus="1">'+t+"</style>"});r=r.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g,function(s,x,t){return"<mce:noscript"+x+"><!--"+p.encode(t).replace(/--/g,"&#45;&#45;")+"--></mce:noscript>"})}r=r.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,"<!--[CDATA[$1]]-->");function u(s){return s.replace(h,function(y,z,x,t){return"<"+z+x.replace(l,function(B,A,E,D,C){var F;A=A.toLowerCase();E=E||D||C||"";if(e[A]){if(E==="false"||E==="0"){return}return A+'="'+A+'"'}if(f[A]&&x.indexOf("_mce_"+A)==-1){F=p.decode(E);if(q.url_converter&&(A=="src"||A=="href")){F=q.url_converter.call(q.url_converter_scope||p,F,A,z)}if(A=="style"){F=p.serializeStyle(p.parseStyle(F),A)}return A+'="'+E+'" _mce_'+A+'="'+p.encode(F)+'"'}return B})+t+">"})}r=u(r);r=r.replace(/MCE_SCRIPT:([0-9]+)/g,function(t,s){return v[s]})}return r},getOuterHTML:function(o){var p;o=this.get(o);if(!o){return null}if(o.outerHTML!==undefined){return o.outerHTML}p=(o.ownerDocument||this.doc).createElement("body");p.appendChild(o.cloneNode(true));return p.innerHTML},setOuterHTML:function(r,p,s){var o=this;function q(u,t,x){var y,v;v=x.createElement("body");v.innerHTML=t;y=v.lastChild;while(y){o.insertAfter(y.cloneNode(true),u);y=y.previousSibling}o.remove(u)}return this.run(r,function(u){u=o.get(u);if(u.nodeType==1){s=s||u.ownerDocument||o.doc;if(d){try{if(d&&u.nodeType==1){u.outerHTML=p}else{q(u,p,s)}}catch(t){q(u,p,s)}}else{q(u,p,s)}}})},decode:function(p){var q,r,o;if(/&[\w#]+;/.test(p)){q=this.doc.createElement("div");q.innerHTML=p;r=q.firstChild;o="";if(r){do{o+=r.nodeValue}while(r=r.nextSibling)}return o||p}return p},encode:function(o){return(""+o).replace(n,function(p){return c[p]})},insertAfter:function(o,p){p=this.get(p);return this.run(o,function(r){var q,s;q=p.parentNode;s=p.nextSibling;if(s){q.insertBefore(r,s)}else{q.appendChild(r)}return r})},isBlock:function(o){if(o.nodeType&&o.nodeType!==1){return false}o=o.nodeName||o;return a.test(o)},replace:function(s,r,p){var q=this;if(j(r,"array")){s=s.cloneNode(true)}return q.run(r,function(t){if(p){k(m.grep(t.childNodes),function(o){s.appendChild(o)})}return t.parentNode.replaceChild(s,t)})},rename:function(r,o){var q=this,p;if(r.nodeName!=o.toUpperCase()){p=q.create(o);k(q.getAttribs(r),function(s){q.setAttrib(p,s.nodeName,q.getAttrib(r,s.nodeName))});q.replace(p,r,1)}return p||r},findCommonAncestor:function(q,o){var r=q,p;while(r){p=o;while(p&&r!=p){p=p.parentNode}if(r==p){break}r=r.parentNode}if(!r&&q.ownerDocument){return q.ownerDocument.documentElement}return r},toHex:function(o){var q=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(o);function p(r){r=parseInt(r).toString(16);return r.length>1?r:"0"+r}if(q){o="#"+p(q[1])+p(q[2])+p(q[3]);return o}return o},getClasses:function(){var s=this,o=[],r,u={},v=s.settings.class_filter,q;if(s.classes){return s.classes}function x(t){k(t.imports,function(y){x(y)});k(t.cssRules||t.rules,function(y){switch(y.type||1){case 1:if(y.selectorText){k(y.selectorText.split(","),function(z){z=z.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(z)||!/\.[\w\-]+$/.test(z)){return}q=z;z=z.replace(/.*\.([a-z0-9_\-]+).*/i,"$1");if(v&&!(z=v(z,q))){return}if(!u[z]){o.push({"class":z});u[z]=1}})}break;case 3:x(y.styleSheet);break}})}try{k(s.doc.styleSheets,x)}catch(p){}if(o.length>0){s.classes=o}return o},run:function(u,r,q){var p=this,v;if(p.doc&&typeof(u)==="string"){u=p.get(u)}if(!u){return false}q=q||this;if(!u.nodeType&&(u.length||u.length===0)){v=[];k(u,function(s,o){if(s){if(typeof(s)=="string"){s=p.doc.getElementById(s)}v.push(r.call(q,s,o))}});return v}return r.call(q,u)},getAttribs:function(q){var p;q=this.get(q);if(!q){return[]}if(d){p=[];if(q.nodeName=="OBJECT"){return q.attributes}if(q.nodeName==="OPTION"&&this.getAttrib(q,"selected")){p.push({specified:1,nodeName:"selected"})}q.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi,"").replace(/[\w:\-]+/gi,function(o){p.push({specified:1,nodeName:o})});return p}return q.attributes},destroy:function(p){var o=this;if(o.events){o.events.destroy()}o.win=o.doc=o.root=o.events=null;if(!p){m.removeUnload(o.destroy)}},createRng:function(){var o=this.doc;return o.createRange?o.createRange():new m.dom.Range(this)},nodeIndex:function(s,t){var o=0,q,r,p;if(s){for(q=s.nodeType,s=s.previousSibling,r=s;s;s=s.previousSibling){p=s.nodeType;if(t&&p==3){if(p==q||!s.nodeValue.length){continue}}o++;q=p}}return o},split:function(u,s,y){var z=this,o=z.createRng(),v,q,x;function p(A){var t,r=A.childNodes;if(A.nodeType==1&&A.getAttribute("_mce_type")=="bookmark"){return}for(t=r.length-1;t>=0;t--){p(r[t])}if(A.nodeType!=9){if(A.nodeType==3&&A.nodeValue.length>0){return}if(A.nodeType==1){r=A.childNodes;if(r.length==1&&r[0]&&r[0].nodeType==1&&r[0].getAttribute("_mce_type")=="bookmark"){A.parentNode.insertBefore(r[0],A)}if(r.length||/^(br|hr|input|img)$/i.test(A.nodeName)){return}}z.remove(A)}return A}if(u&&s){o.setStart(u.parentNode,z.nodeIndex(u));o.setEnd(s.parentNode,z.nodeIndex(s));v=o.extractContents();o=z.createRng();o.setStart(s.parentNode,z.nodeIndex(s)+1);o.setEnd(u.parentNode,z.nodeIndex(u)+1);q=o.extractContents();x=u.parentNode;x.insertBefore(p(v),u);if(y){x.replaceChild(y,s)}else{x.insertBefore(s,u)}x.insertBefore(p(q),u);z.remove(u);return y||s}},bind:function(s,o,r,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.add(s,o,r,q||this)},unbind:function(r,o,q){var p=this;if(!p.events){p.events=new m.dom.EventUtils()}return p.events.remove(r,o,q)},_findSib:function(r,o,p){var q=this,s=o;if(r){if(j(s,"string")){s=function(t){return q.is(t,o)}}for(r=r[p];r;r=r[p]){if(s(r)){return r}}}return null},_isRes:function(o){return/^(top|left|bottom|right|width|height)/i.test(o)||/;\s*(top|left|bottom|right|width|height)/i.test(o)}});m.DOM=new m.dom.DOMUtils(document,{process_html:0})})(tinymce);(function(a){function b(c){var N=this,e=c.doc,S=0,E=1,j=2,D=true,R=false,U="startOffset",h="startContainer",P="endContainer",z="endOffset",k=tinymce.extend,n=c.nodeIndex;k(N,{startContainer:e,startOffset:0,endContainer:e,endOffset:0,collapsed:D,commonAncestorContainer:e,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:q,setEnd:s,setStartBefore:g,setStartAfter:I,setEndBefore:J,setEndAfter:u,collapse:A,selectNode:x,selectNodeContents:F,compareBoundaryPoints:v,deleteContents:p,extractContents:H,cloneContents:d,insertNode:C,surroundContents:M,cloneRange:K});function q(V,t){B(D,V,t)}function s(V,t){B(R,V,t)}function g(t){q(t.parentNode,n(t))}function I(t){q(t.parentNode,n(t)+1)}function J(t){s(t.parentNode,n(t))}function u(t){s(t.parentNode,n(t)+1)}function A(t){if(t){N[P]=N[h];N[z]=N[U]}else{N[h]=N[P];N[U]=N[z]}N.collapsed=D}function x(t){g(t);u(t)}function F(t){q(t,0);s(t,t.nodeType===1?t.childNodes.length:t.nodeValue.length)}function v(W,X){var Z=N[h],Y=N[U],V=N[P],t=N[z];if(W===0){return G(Z,Y,Z,Y)}if(W===1){return G(Z,Y,V,t)}if(W===2){return G(V,t,V,t)}if(W===3){return G(V,t,Z,Y)}}function p(){m(j)}function H(){return m(S)}function d(){return m(E)}function C(Y){var V=this[h],t=this[U],X,W;if((V.nodeType===3||V.nodeType===4)&&V.nodeValue){if(!t){V.parentNode.insertBefore(Y,V)}else{if(t>=V.nodeValue.length){c.insertAfter(Y,V)}else{X=V.splitText(t);V.parentNode.insertBefore(Y,X)}}}else{if(V.childNodes.length>0){W=V.childNodes[t]}if(W){V.insertBefore(Y,W)}else{V.appendChild(Y)}}}function M(V){var t=N.extractContents();N.insertNode(V);V.appendChild(t);N.selectNode(V)}function K(){return k(new b(c),{startContainer:N[h],startOffset:N[U],endContainer:N[P],endOffset:N[z],collapsed:N.collapsed,commonAncestorContainer:N.commonAncestorContainer})}function O(t,V){var W;if(t.nodeType==3){return t}if(V<0){return t}W=t.firstChild;while(W&&V>0){--V;W=W.nextSibling}if(W){return W}return t}function l(){return(N[h]==N[P]&&N[U]==N[z])}function G(X,Z,V,Y){var aa,W,t,ab,ad,ac;if(X==V){if(Z==Y){return 0}if(Z<Y){return -1}return 1}aa=V;while(aa&&aa.parentNode!=X){aa=aa.parentNode}if(aa){W=0;t=X.firstChild;while(t!=aa&&W<Z){W++;t=t.nextSibling}if(Z<=W){return -1}return 1}aa=X;while(aa&&aa.parentNode!=V){aa=aa.parentNode}if(aa){W=0;t=V.firstChild;while(t!=aa&&W<Y){W++;t=t.nextSibling}if(W<Y){return -1}return 1}ab=c.findCommonAncestor(X,V);ad=X;while(ad&&ad.parentNode!=ab){ad=ad.parentNode}if(!ad){ad=ab}ac=V;while(ac&&ac.parentNode!=ab){ac=ac.parentNode}if(!ac){ac=ab}if(ad==ac){return 0}t=ab.firstChild;while(t){if(t==ad){return -1}if(t==ac){return 1}t=t.nextSibling}}function B(V,Y,X){var t,W;if(V){N[h]=Y;N[U]=X}else{N[P]=Y;N[z]=X}t=N[P];while(t.parentNode){t=t.parentNode}W=N[h];while(W.parentNode){W=W.parentNode}if(W==t){if(G(N[h],N[U],N[P],N[z])>0){N.collapse(V)}}else{N.collapse(V)}N.collapsed=l();N.commonAncestorContainer=c.findCommonAncestor(N[h],N[P])}function m(ab){var aa,X=0,ad=0,V,Z,W,Y,t,ac;if(N[h]==N[P]){return f(ab)}for(aa=N[P],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[h]){return r(aa,ab)}++X}for(aa=N[h],V=aa.parentNode;V;aa=V,V=V.parentNode){if(V==N[P]){return T(aa,ab)}++ad}Z=ad-X;W=N[h];while(Z>0){W=W.parentNode;Z--}Y=N[P];while(Z<0){Y=Y.parentNode;Z++}for(t=W.parentNode,ac=Y.parentNode;t!=ac;t=t.parentNode,ac=ac.parentNode){W=t;Y=ac}return o(W,Y,ab)}function f(Z){var ab,Y,X,aa,t,W,V;if(Z!=j){ab=e.createDocumentFragment()}if(N[U]==N[z]){return ab}if(N[h].nodeType==3){Y=N[h].nodeValue;X=Y.substring(N[U],N[z]);if(Z!=E){N[h].deleteData(N[U],N[z]-N[U]);N.collapse(D)}if(Z==j){return}ab.appendChild(e.createTextNode(X));return ab}aa=O(N[h],N[U]);t=N[z]-N[U];while(t>0){W=aa.nextSibling;V=y(aa,Z);if(ab){ab.appendChild(V)}--t;aa=W}if(Z!=E){N.collapse(D)}return ab}function r(ab,Y){var aa,Z,V,t,X,W;if(Y!=j){aa=e.createDocumentFragment()}Z=i(ab,Y);if(aa){aa.appendChild(Z)}V=n(ab);t=V-N[U];if(t<=0){if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}Z=ab.previousSibling;while(t>0){X=Z.previousSibling;W=y(Z,Y);if(aa){aa.insertBefore(W,aa.firstChild)}--t;Z=X}if(Y!=E){N.setEndBefore(ab);N.collapse(R)}return aa}function T(Z,Y){var ab,V,aa,t,X,W;if(Y!=j){ab=e.createDocumentFragment()}aa=Q(Z,Y);if(ab){ab.appendChild(aa)}V=n(Z);++V;t=N[z]-V;aa=Z.nextSibling;while(t>0){X=aa.nextSibling;W=y(aa,Y);if(ab){ab.appendChild(W)}--t;aa=X}if(Y!=E){N.setStartAfter(Z);N.collapse(D)}return ab}function o(Z,t,ac){var W,ae,Y,aa,ab,V,ad,X;if(ac!=j){ae=e.createDocumentFragment()}W=Q(Z,ac);if(ae){ae.appendChild(W)}Y=Z.parentNode;aa=n(Z);ab=n(t);++aa;V=ab-aa;ad=Z.nextSibling;while(V>0){X=ad.nextSibling;W=y(ad,ac);if(ae){ae.appendChild(W)}ad=X;--V}W=i(t,ac);if(ae){ae.appendChild(W)}if(ac!=E){N.setStartAfter(Z);N.collapse(D)}return ae}function i(aa,ab){var W=O(N[P],N[z]-1),ac,Z,Y,t,V,X=W!=N[P];if(W==aa){return L(W,X,R,ab)}ac=W.parentNode;Z=L(ac,R,R,ab);while(ac){while(W){Y=W.previousSibling;t=L(W,X,R,ab);if(ab!=j){Z.insertBefore(t,Z.firstChild)}X=D;W=Y}if(ac==aa){return Z}W=ac.previousSibling;ac=ac.parentNode;V=L(ac,R,R,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function Q(aa,ab){var X=O(N[h],N[U]),Y=X!=N[h],ac,Z,W,t,V;if(X==aa){return L(X,Y,D,ab)}ac=X.parentNode;Z=L(ac,R,D,ab);while(ac){while(X){W=X.nextSibling;t=L(X,Y,D,ab);if(ab!=j){Z.appendChild(t)}Y=D;X=W}if(ac==aa){return Z}X=ac.nextSibling;ac=ac.parentNode;V=L(ac,R,D,ab);if(ab!=j){V.appendChild(Z)}Z=V}}function L(t,Y,ab,ac){var X,W,Z,V,aa;if(Y){return y(t,ac)}if(t.nodeType==3){X=t.nodeValue;if(ab){V=N[U];W=X.substring(V);Z=X.substring(0,V)}else{V=N[z];W=X.substring(0,V);Z=X.substring(V)}if(ac!=E){t.nodeValue=Z}if(ac==j){return}aa=t.cloneNode(R);aa.nodeValue=W;return aa}if(ac==j){return}return t.cloneNode(R)}function y(V,t){if(t!=j){return t==E?V.cloneNode(D):V}V.parentNode.removeChild(V)}}a.Range=b})(tinymce.dom);(function(){function a(g){var i=this,j="\uFEFF",e,h,d=g.dom,c=true,f=false;function b(){var n=g.getRng(),k=d.createRng(),m,o;m=n.item?n.item(0):n.parentElement();if(m.ownerDocument!=d.doc){return k}if(n.item||!m.hasChildNodes()){k.setStart(m.parentNode,d.nodeIndex(m));k.setEnd(k.startContainer,k.startOffset+1);return k}o=g.isCollapsed();function l(s){var u,q,t,p,A=0,x,y,z,r,v;r=n.duplicate();r.collapse(s);u=d.create("a");z=r.parentElement();if(!z.hasChildNodes()){k[s?"setStart":"setEnd"](z,0);return}z.appendChild(u);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){k[s?"setStartAfter":"setEndAfter"](z);d.remove(u);return}p=tinymce.grep(z.childNodes);x=p.length-1;while(A<=x){y=Math.floor((A+x)/2);z.insertBefore(u,p[y]);r.moveToElementText(u);v=n.compareEndPoints(s?"StartToStart":"EndToEnd",r);if(v>0){A=y+1}else{if(v<0){x=y-1}else{found=true;break}}}q=v>0||y==0?u.nextSibling:u.previousSibling;if(q.nodeType==1){d.remove(u);t=d.nodeIndex(q);q=q.parentNode;if(!s||y>0){t++}}else{if(v>0||y==0){r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=r.text.length}else{r.setEndPoint(s?"StartToStart":"EndToEnd",n);t=q.nodeValue.length-r.text.length}d.remove(u)}k[s?"setStart":"setEnd"](q,t)}l(true);if(!o){l()}return k}this.addRange=function(k){var p,n,m,r,u,s,t=g.dom.doc,o=t.body;function l(B){var x,A,v,z,y;v=d.create("a");x=B?m:u;A=B?r:s;z=p.duplicate();if(x==t){x=o;A=0}if(x.nodeType==3){x.parentNode.insertBefore(v,x);z.moveToElementText(v);z.moveStart("character",A);d.remove(v);p.setEndPoint(B?"StartToStart":"EndToEnd",z)}else{y=x.childNodes;if(y.length){if(A>=y.length){d.insertAfter(v,y[y.length-1])}else{x.insertBefore(v,y[A])}z.moveToElementText(v)}else{v=t.createTextNode(j);x.appendChild(v);z.moveToElementText(v.parentNode);z.collapse(c)}p.setEndPoint(B?"StartToStart":"EndToEnd",z);d.remove(v)}}this.destroy();m=k.startContainer;r=k.startOffset;u=k.endContainer;s=k.endOffset;p=o.createTextRange();if(m==u&&m.nodeType==1&&r==s-1){if(r==s-1){try{n=o.createControlRange();n.addElement(m.childNodes[r]);n.select();n.scrollIntoView();return}catch(q){}}}l(true);l();p.select();p.scrollIntoView()};this.getRangeAt=function(){if(!e||!tinymce.dom.RangeUtils.compareRanges(h,g.getRng())){e=b();h=g.getRng()}try{e.startContainer.nextSibling}catch(k){e=b();h=null}return e};this.destroy=function(){h=e=null};if(g.dom.boxModel){(function(){var q=d.doc,l=q.body,n,o;q.documentElement.unselectable=c;function p(r,u){var s=l.createTextRange();try{s.moveToPoint(r,u)}catch(t){s=null}return s}function m(s){var r;if(s.button){r=p(s.x,s.y);if(r){if(r.compareEndPoints("StartToStart",o)>0){r.setEndPoint("StartToStart",o)}else{r.setEndPoint("EndToEnd",o)}r.select()}}else{k()}}function k(){d.unbind(q,"mouseup",k);d.unbind(q,"mousemove",m);n=0}d.bind(q,"mousedown",function(r){if(r.target.nodeName==="HTML"){if(n){k()}n=1;o=p(r.x,r.y);if(o){d.bind(q,"mouseup",k);d.bind(q,"mousemove",m);o.select()}}})})()}}tinymce.dom.TridentSelection=a})();(function(d){var f=d.each,c=d.DOM,b=d.isIE,e=d.isWebKit,a;d.create("tinymce.dom.EventUtils",{EventUtils:function(){this.inits=[];this.events=[]},add:function(m,p,l,j){var g,h=this,i=h.events,k;if(p instanceof Array){k=[];f(p,function(o){k.push(h.add(m,o,l,j))});return k}if(m&&m.hasOwnProperty&&m instanceof Array){k=[];f(m,function(n){n=c.get(n);k.push(h.add(n,p,l,j))});return k}m=c.get(m);if(!m){return}g=function(n){if(h.disabled){return}n=n||window.event;if(n&&b){if(!n.target){n.target=n.srcElement}d.extend(n,h._stoppers)}if(!j){return l(n)}return l.call(j,n)};if(p=="unload"){d.unloads.unshift({func:g});return g}if(p=="init"){if(h.domLoaded){g()}else{h.inits.push(g)}return g}i.push({obj:m,name:p,func:l,cfunc:g,scope:j});h._add(m,p,g);return l},remove:function(l,m,k){var h=this,g=h.events,i=false,j;if(l&&l.hasOwnProperty&&l instanceof Array){j=[];f(l,function(n){n=c.get(n);j.push(h.remove(n,m,k))});return j}l=c.get(l);f(g,function(o,n){if(o.obj==l&&o.name==m&&(!k||(o.func==k||o.cfunc==k))){g.splice(n,1);h._remove(l,m,o.cfunc);i=true;return false}});return i},clear:function(l){var j=this,g=j.events,h,k;if(l){l=c.get(l);for(h=g.length-1;h>=0;h--){k=g[h];if(k.obj===l){j._remove(k.obj,k.name,k.cfunc);k.obj=k.cfunc=null;g.splice(h,1)}}}},cancel:function(g){if(!g){return false}this.stop(g);return this.prevent(g)},stop:function(g){if(g.stopPropagation){g.stopPropagation()}else{g.cancelBubble=true}return false},prevent:function(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}return false},destroy:function(){var g=this;f(g.events,function(j,h){g._remove(j.obj,j.name,j.cfunc);j.obj=j.cfunc=null});g.events=[];g=null},_add:function(h,i,g){if(h.attachEvent){h.attachEvent("on"+i,g)}else{if(h.addEventListener){h.addEventListener(i,g,false)}else{h["on"+i]=g}}},_remove:function(i,j,h){if(i){try{if(i.detachEvent){i.detachEvent("on"+j,h)}else{if(i.removeEventListener){i.removeEventListener(j,h,false)}else{i["on"+j]=null}}}catch(g){}}},_pageInit:function(h){var g=this;if(g.domLoaded){return}g.domLoaded=true;f(g.inits,function(i){i()});g.inits=[]},_wait:function(i){var g=this,h=i.document;if(i.tinyMCE_GZ&&tinyMCE_GZ.loaded){g.domLoaded=1;return}if(h.attachEvent){h.attachEvent("onreadystatechange",function(){if(h.readyState==="complete"){h.detachEvent("onreadystatechange",arguments.callee);g._pageInit(i)}});if(h.documentElement.doScroll&&i==i.top){(function(){if(g.domLoaded){return}try{h.documentElement.doScroll("left")}catch(j){setTimeout(arguments.callee,0);return}g._pageInit(i)})()}}else{if(h.addEventListener){g._add(i,"DOMContentLoaded",function(){g._pageInit(i)})}}g._add(i,"load",function(){g._pageInit(i)})},_stoppers:{preventDefault:function(){this.returnValue=false},stopPropagation:function(){this.cancelBubble=true}}});a=d.dom.Event=new d.dom.EventUtils();a._wait(window);d.addUnload(function(){a.destroy()})})(tinymce);(function(a){a.dom.Element=function(f,d){var b=this,e,c;b.settings=d=d||{};b.id=f;b.dom=e=d.dom||a.DOM;if(!a.isIE){c=e.get(b.id)}a.each(("getPos,getRect,getParent,add,setStyle,getStyle,setStyles,setAttrib,setAttribs,getAttrib,addClass,removeClass,hasClass,getOuterHTML,setOuterHTML,remove,show,hide,isHidden,setHTML,get").split(/,/),function(g){b[g]=function(){var h=[f],j;for(j=0;j<arguments.length;j++){h.push(arguments[j])}h=e[g].apply(e,h);b.update(g);return h}});a.extend(b,{on:function(i,h,g){return a.dom.Event.add(b.id,i,h,g)},getXY:function(){return{x:parseInt(b.getStyle("left")),y:parseInt(b.getStyle("top"))}},getSize:function(){var g=e.get(b.id);return{w:parseInt(b.getStyle("width")||g.clientWidth),h:parseInt(b.getStyle("height")||g.clientHeight)}},moveTo:function(g,h){b.setStyles({left:g,top:h})},moveBy:function(g,i){var h=b.getXY();b.moveTo(h.x+g,h.y+i)},resizeTo:function(g,i){b.setStyles({width:g,height:i})},resizeBy:function(g,j){var i=b.getSize();b.resizeTo(i.w+g,i.h+j)},update:function(h){var g;if(a.isIE6&&d.blocker){h=h||"";if(h.indexOf("get")===0||h.indexOf("has")===0||h.indexOf("is")===0){return}if(h=="remove"){e.remove(b.blocker);return}if(!b.blocker){b.blocker=e.uniqueId();g=e.add(d.container||e.getRoot(),"iframe",{id:b.blocker,style:"position:absolute;",frameBorder:0,src:'javascript:""'});e.setStyle(g,"opacity",0)}else{g=e.get(b.blocker)}e.setStyles(g,{left:b.getStyle("left",1),top:b.getStyle("top",1),width:b.getStyle("width",1),height:b.getStyle("height",1),display:b.getStyle("display",1),zIndex:parseInt(b.getStyle("zIndex",1)||0)-1})}}})}})(tinymce);(function(c){function e(f){return f.replace(/[\n\r]+/g,"")}var b=c.is,a=c.isIE,d=c.each;c.create("tinymce.dom.Selection",{Selection:function(i,h,g){var f=this;f.dom=i;f.win=h;f.serializer=g;d(["onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent"],function(j){f[j]=new c.util.Dispatcher(f)});if(!f.win.getSelection){f.tridentSel=new c.dom.TridentSelection(f)}c.addUnload(f.destroy,f)},getContent:function(g){var f=this,h=f.getRng(),l=f.dom.create("body"),j=f.getSel(),i,k,m;g=g||{};i=k="";g.get=true;g.format=g.format||"html";f.onBeforeGetContent.dispatch(f,g);if(g.format=="text"){return f.isCollapsed()?"":(h.text||(j.toString?j.toString():""))}if(h.cloneContents){m=h.cloneContents();if(m){l.appendChild(m)}}else{if(b(h.item)||b(h.htmlText)){l.innerHTML=h.item?h.item(0).outerHTML:h.htmlText}else{l.innerHTML=h.toString()}}if(/^\s/.test(l.innerHTML)){i=" "}if(/\s+$/.test(l.innerHTML)){k=" "}g.getInner=true;g.content=f.isCollapsed()?"":i+f.serializer.serialize(l,g)+k;f.onGetContent.dispatch(f,g);return g.content},setContent:function(i,g){var f=this,j=f.getRng(),l,k=f.win.document;g=g||{format:"html"};g.set=true;i=g.content=f.dom.processHTML(i);f.onBeforeSetContent.dispatch(f,g);i=g.content;if(j.insertNode){i+='<span id="__caret">_</span>';if(j.startContainer==k&&j.endContainer==k){k.body.innerHTML=i}else{j.deleteContents();if(k.body.childNodes.length==0){k.body.innerHTML=i}else{j.insertNode(j.createContextualFragment(i))}}l=f.dom.get("__caret");j=k.createRange();j.setStartBefore(l);j.setEndBefore(l);f.setRng(j);f.dom.remove("__caret")}else{if(j.item){k.execCommand("Delete",false,null);j=f.getRng()}j.pasteHTML(i)}f.onSetContent.dispatch(f,g)},getStart:function(){var g=this.getRng(),h,f,j,i;if(g.duplicate||g.item){if(g.item){return g.item(0)}j=g.duplicate();j.collapse(1);h=j.parentElement();f=i=g.parentElement();while(i=i.parentNode){if(i==h){h=f;break}}if(h&&h.nodeName=="BODY"){return h.firstChild||h}return h}else{h=g.startContainer;if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[Math.min(h.childNodes.length-1,g.startOffset)]}if(h&&h.nodeType==3){return h.parentNode}return h}},getEnd:function(){var g=this,h=g.getRng(),i,f;if(h.duplicate||h.item){if(h.item){return h.item(0)}h=h.duplicate();h.collapse(0);i=h.parentElement();if(i&&i.nodeName=="BODY"){return i.lastChild||i}return i}else{i=h.endContainer;f=h.endOffset;if(i.nodeType==1&&i.hasChildNodes()){i=i.childNodes[f>0?f-1:f]}if(i&&i.nodeType==3){return i.parentNode}return i}},getBookmark:function(q,r){var u=this,m=u.dom,g,j,i,n,h,o,p,l="\uFEFF",s;function f(v,x){var t=0;d(m.select(v),function(z,y){if(z==x){t=y}});return t}if(q==2){function k(){var v=u.getRng(true),t=m.getRoot(),x={};function y(B,G){var A=B[G?"startContainer":"endContainer"],F=B[G?"startOffset":"endOffset"],z=[],C,E,D=0;if(A.nodeType==3){if(r){for(C=A.previousSibling;C&&C.nodeType==3;C=C.previousSibling){F+=C.nodeValue.length}}z.push(F)}else{E=A.childNodes;if(F>=E.length&&E.length){D=1;F=Math.max(0,E.length-1)}z.push(u.dom.nodeIndex(E[F],r)+D)}for(;A&&A!=t;A=A.parentNode){z.push(u.dom.nodeIndex(A,r))}return z}x.start=y(v,true);if(!u.isCollapsed()){x.end=y(v)}return x}return k()}if(q){return{rng:u.getRng()}}g=u.getRng();i=m.uniqueId();n=tinyMCE.activeEditor.selection.isCollapsed();s="overflow:hidden;line-height:0px";if(g.duplicate||g.item){if(!g.item){j=g.duplicate();g.collapse();g.pasteHTML('<span _mce_type="bookmark" id="'+i+'_start" style="'+s+'">'+l+"</span>");if(!n){j.collapse(false);j.pasteHTML('<span _mce_type="bookmark" id="'+i+'_end" style="'+s+'">'+l+"</span>")}}else{o=g.item(0);h=o.nodeName;return{name:h,index:f(h,o)}}}else{o=u.getNode();h=o.nodeName;if(h=="IMG"){return{name:h,index:f(h,o)}}j=g.cloneRange();if(!n){j.collapse(false);j.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_end",style:s},l))}g.collapse(true);g.insertNode(m.create("span",{_mce_type:"bookmark",id:i+"_start",style:s},l))}u.moveToBookmark({id:i,keep:1});return{id:i}},moveToBookmark:function(n){var r=this,l=r.dom,i,h,f,q,j,s,o,p;if(r.tridentSel){r.tridentSel.destroy()}if(n){if(n.start){f=l.createRng();q=l.getRoot();function g(z){var t=n[z?"start":"end"],v,x,y,u;if(t){for(x=q,v=t.length-1;v>=1;v--){u=x.childNodes;if(u.length){x=u[t[v]]}}if(z){f.setStart(x,t[0])}else{f.setEnd(x,t[0])}}}g(true);g();r.setRng(f)}else{if(n.id){function k(A){var u=l.get(n.id+"_"+A),z,t,x,y,v=n.keep;if(u){z=u.parentNode;if(A=="start"){if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}j=s=z;o=p=t}else{if(!v){t=l.nodeIndex(u)}else{z=u.firstChild;t=1}s=z;p=t}if(!v){y=u.previousSibling;x=u.nextSibling;d(c.grep(u.childNodes),function(B){if(B.nodeType==3){B.nodeValue=B.nodeValue.replace(/\uFEFF/g,"")}});while(u=l.get(n.id+"_"+A)){l.remove(u,1)}if(y&&x&&y.nodeType==x.nodeType&&y.nodeType==3){t=y.nodeValue.length;y.appendData(x.nodeValue);l.remove(x);if(A=="start"){j=s=y;o=p=t}else{s=y;p=t}}}}}function m(t){if(!a&&l.isBlock(t)&&!t.innerHTML){t.innerHTML='<br _mce_bogus="1" />'}return t}k("start");k("end");f=l.createRng();f.setStart(m(j),o);f.setEnd(m(s),p);r.setRng(f)}else{if(n.name){r.select(l.select(n.name)[n.index])}else{if(n.rng){r.setRng(n.rng)}}}}}},select:function(k,j){var i=this,l=i.dom,g=l.createRng(),f;f=l.nodeIndex(k);g.setStart(k.parentNode,f);g.setEnd(k.parentNode,f+1);if(j){function h(m,o){var n=new c.dom.TreeWalker(m,m);do{if(m.nodeType==3&&c.trim(m.nodeValue).length!=0){if(o){g.setStart(m,0)}else{g.setEnd(m,m.nodeValue.length)}return}if(m.nodeName=="BR"){if(o){g.setStartBefore(m)}else{g.setEndBefore(m)}return}}while(m=(o?n.next():n.prev()))}h(k,1);h(k)}i.setRng(g);return k},isCollapsed:function(){var f=this,h=f.getRng(),g=f.getSel();if(!h||h.item){return false}if(h.compareEndPoints){return h.compareEndPoints("StartToEnd",h)===0}return !g||h.collapsed},collapse:function(f){var g=this,h=g.getRng(),i;if(h.item){i=h.item(0);h=this.win.document.body.createTextRange();h.moveToElementText(i)}h.collapse(!!f);g.setRng(h)},getSel:function(){var g=this,f=this.win;return f.getSelection?f.getSelection():f.document.selection},getRng:function(j){var g=this,h,i;if(j&&g.tridentSel){return g.tridentSel.getRangeAt(0)}try{if(h=g.getSel()){i=h.rangeCount>0?h.getRangeAt(0):(h.createRange?h.createRange():g.win.document.createRange())}}catch(f){}if(!i){i=g.win.document.createRange?g.win.document.createRange():g.win.document.body.createTextRange()}if(g.selectedRange&&g.explicitRange){if(i.compareBoundaryPoints(i.START_TO_START,g.selectedRange)===0&&i.compareBoundaryPoints(i.END_TO_END,g.selectedRange)===0){i=g.explicitRange}else{g.selectedRange=null;g.explicitRange=null}}return i},setRng:function(i){var h,g=this;if(!g.tridentSel){h=g.getSel();if(h){g.explicitRange=i;h.removeAllRanges();h.addRange(i);g.selectedRange=h.getRangeAt(0)}}else{if(i.cloneRange){g.tridentSel.addRange(i);return}try{i.select()}catch(f){}}},setNode:function(g){var f=this;f.setContent(f.dom.getOuterHTML(g));return g},getNode:function(){var g=this,f=g.getRng(),h=g.getSel(),i;if(f.setStart){if(!f){return g.dom.getRoot()}i=f.commonAncestorContainer;if(!f.collapsed){if(f.startContainer==f.endContainer){if(f.startOffset-f.endOffset<2){if(f.startContainer.hasChildNodes()){i=f.startContainer.childNodes[f.startOffset]}}}if(c.isWebKit&&h.anchorNode&&h.anchorNode.nodeType==1){return h.anchorNode.childNodes[h.anchorOffset]}}if(i&&i.nodeType==3){return i.parentNode}return i}return f.item?f.item(0):f.parentElement()},getSelectedBlocks:function(g,f){var i=this,j=i.dom,m,h,l,k=[];m=j.getParent(g||i.getStart(),j.isBlock);h=j.getParent(f||i.getEnd(),j.isBlock);if(m){k.push(m)}if(m&&h&&m!=h){l=m;while((l=l.nextSibling)&&l!=h){if(j.isBlock(l)){k.push(l)}}}if(h&&m!=h){k.push(h)}return k},destroy:function(g){var f=this;f.win=null;if(f.tridentSel){f.tridentSel.destroy()}if(!g){c.removeUnload(f.destroy)}}})})(tinymce);(function(a){a.create("tinymce.dom.XMLWriter",{node:null,XMLWriter:function(c){function b(){var e=document.implementation;if(!e||!e.createDocument){try{return new ActiveXObject("MSXML2.DOMDocument")}catch(d){}try{return new ActiveXObject("Microsoft.XmlDom")}catch(d){}}else{return e.createDocument("","",null)}}this.doc=b();this.valid=a.isOpera||a.isWebKit;this.reset()},reset:function(){var b=this,c=b.doc;if(c.firstChild){c.removeChild(c.firstChild)}b.node=c.appendChild(c.createElement("html"))},writeStartElement:function(c){var b=this;b.node=b.node.appendChild(b.doc.createElement(c))},writeAttribute:function(c,b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.setAttribute(c,b)},writeEndElement:function(){this.node=this.node.parentNode},writeFullEndElement:function(){var b=this,c=b.node;c.appendChild(b.doc.createTextNode(""));b.node=c.parentNode},writeText:function(b){if(this.valid){b=b.replace(/>/g,"%MCGT%")}this.node.appendChild(this.doc.createTextNode(b))},writeCDATA:function(b){this.node.appendChild(this.doc.createCDATASection(b))},writeComment:function(b){if(a.isIE){b=b.replace(/^\-|\-$/g," ")}this.node.appendChild(this.doc.createComment(b.replace(/\-\-/g," ")))},getContent:function(){var b;b=this.doc.xml||new XMLSerializer().serializeToString(this.doc);b=b.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,"");b=b.replace(/ ?\/>/g," />");if(this.valid){b=b.replace(/\%MCGT%/g,"&gt;")}return b}})})(tinymce);(function(a){a.create("tinymce.dom.StringWriter",{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(b){this.settings=a.extend({indent_char:" ",indentation:0},b);this.reset()},reset:function(){this.indent="";this.str="";this.tags=[];this.count=0},writeStartElement:function(b){this._writeAttributesEnd();this.writeRaw("<"+b);this.tags.push(b);this.inAttr=true;this.count++;this.elementCount=this.count},writeAttribute:function(d,b){var c=this;c.writeRaw(" "+c.encode(d)+'="'+c.encode(b)+'"')},writeEndElement:function(){var b;if(this.tags.length>0){b=this.tags.pop();if(this._writeAttributesEnd(1)){this.writeRaw("</"+b+">")}if(this.settings.indentation>0){this.writeRaw("\n")}}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw("</"+this.tags.pop()+">");if(this.settings.indentation>0){this.writeRaw("\n")}}},writeText:function(b){this._writeAttributesEnd();this.writeRaw(this.encode(b));this.count++},writeCDATA:function(b){this._writeAttributesEnd();this.writeRaw("<![CDATA["+b+"]]>");this.count++},writeComment:function(b){this._writeAttributesEnd();this.writeRaw("<!-- "+b+"-->");this.count++},writeRaw:function(b){this.str+=b},encode:function(b){return b.replace(/[<>&"]/g,function(c){switch(c){case"<":return"&lt;";case">":return"&gt;";case"&":return"&amp;";case'"':return"&quot;"}return c})},getContent:function(){return this.str},_writeAttributesEnd:function(b){if(!this.inAttr){return}this.inAttr=false;if(b&&this.elementCount==this.count){this.writeRaw(" />");return false}this.writeRaw(">");return true}})})(tinymce);(function(e){var g=e.extend,f=e.each,b=e.util.Dispatcher,d=e.isIE,a=e.isGecko;function c(h){return h.replace(/([?+*])/g,".$1")}e.create("tinymce.dom.Serializer",{Serializer:function(j){var i=this;i.key=0;i.onPreProcess=new b(i);i.onPostProcess=new b(i);try{i.writer=new e.dom.XMLWriter()}catch(h){i.writer=new e.dom.StringWriter()}i.settings=j=g({dom:e.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(_mce_|_moz_|sizset|sizcache)/,closed:/^(br|hr|input|meta|img|link|param|area)$/,entity_encoding:"named",entities:"160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro",valid_elements:"*[*]",extended_valid_elements:0,invalid_elements:0,fix_table_elements:1,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,apply_source_formatting:0,indent_mode:"simple",indent_char:"\t",indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:"xhtml"},j);i.dom=j.dom;i.schema=j.schema;if(j.entity_encoding=="named"&&!j.entities){j.entity_encoding="raw"}if(j.remove_redundant_brs){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi,function(n,m,o){if(/^<br \/>\s*<\//.test(n)){return"</"+o+">"}return n})})}if(j.element_format=="html"){i.onPostProcess.add(function(k,l){l.content=l.content.replace(/<([^>]+) \/>/g,"<$1>")})}if(j.fix_list_elements){i.onPreProcess.add(function(v,s){var l,z,y=["ol","ul"],u,t,q,k=/^(OL|UL)$/,A;function m(r,x){var o=x.split(","),p;while((r=r.previousSibling)!=null){for(p=0;p<o.length;p++){if(r.nodeName==o[p]){return r}}}return null}for(z=0;z<y.length;z++){l=i.dom.select(y[z],s.node);for(u=0;u<l.length;u++){t=l[u];q=t.parentNode;if(k.test(q.nodeName)){A=m(t,"LI");if(!A){A=i.dom.create("li");A.innerHTML="&nbsp;";A.appendChild(t);q.insertBefore(A,q.firstChild)}else{A.appendChild(t)}}}}})}if(j.fix_table_elements){i.onPreProcess.add(function(k,l){if(!e.isOpera||opera.buildNumber()>=1767){f(i.dom.select("p table",l.node).reverse(),function(p){var o=i.dom.getParent(p.parentNode,"table,p");if(o.nodeName!="TABLE"){try{i.dom.split(o,p)}catch(m){}}})}})}},setEntities:function(o){var n=this,j,m,h={},k;if(n.entityLookup){return}j=o.split(",");for(m=0;m<j.length;m+=2){k=j[m];if(k==34||k==38||k==60||k==62){continue}h[String.fromCharCode(j[m])]=j[m+1];k=parseInt(j[m]).toString(16)}n.entityLookup=h},setRules:function(i){var h=this;h._setup();h.rules={};h.wildRules=[];h.validElements={};return h.addRules(i)},addRules:function(i){var h=this,j;if(!i){return}h._setup();f(i.split(","),function(m){var q=m.split(/\[|\]/),l=q[0].split("/"),r,k,o,n=[];if(j){k=e.extend([],j.attribs)}if(q.length>1){f(q[1].split("|"),function(u){var p={},t;k=k||[];u=u.replace(/::/g,"~");u=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(u);u[2]=u[2].replace(/~/g,":");if(u[1]=="!"){r=r||[];r.push(u[2])}if(u[1]=="-"){for(t=0;t<k.length;t++){if(k[t].name==u[2]){k.splice(t,1);return}}}switch(u[3]){case"=":p.defaultVal=u[4]||"";break;case":":p.forcedVal=u[4];break;case"<":p.validVals=u[4].split("?");break}if(/[*.?]/.test(u[2])){o=o||[];p.nameRE=new RegExp("^"+c(u[2])+"$");o.push(p)}else{p.name=u[2];k.push(p)}n.push(u[2])})}f(l,function(v,u){var y=v.charAt(0),t=1,p={};if(j){if(j.noEmpty){p.noEmpty=j.noEmpty}if(j.fullEnd){p.fullEnd=j.fullEnd}if(j.padd){p.padd=j.padd}}switch(y){case"-":p.noEmpty=true;break;case"+":p.fullEnd=true;break;case"#":p.padd=true;break;default:t=0}l[u]=v=v.substring(t);h.validElements[v]=1;if(/[*.?]/.test(l[0])){p.nameRE=new RegExp("^"+c(l[0])+"$");h.wildRules=h.wildRules||{};h.wildRules.push(p)}else{p.name=l[0];if(l[0]=="@"){j=p}h.rules[v]=p}p.attribs=k;if(r){p.requiredAttribs=r}if(o){v="";f(n,function(s){if(v){v+="|"}v+="("+c(s)+")"});p.validAttribsRE=new RegExp("^"+v.toLowerCase()+"$");p.wildAttribs=o}})});i="";f(h.validElements,function(m,l){if(i){i+="|"}if(l!="@"){i+=l}});h.validElementsRE=new RegExp("^("+c(i.toLowerCase())+")$")},findRule:function(m){var j=this,l=j.rules,h,k;j._setup();k=l[m];if(k){return k}l=j.wildRules;for(h=0;h<l.length;h++){if(l[h].nameRE.test(m)){return l[h]}}return null},findAttribRule:function(h,l){var j,k=h.wildAttribs;for(j=0;j<k.length;j++){if(k[j].nameRE.test(l)){return k[j]}}return null},serialize:function(r,q){var m,k=this,p,i,j,l;k._setup();q=q||{};q.format=q.format||"html";k.processObj=q;if(d){l=[];f(r.getElementsByTagName("option"),function(o){var h=k.dom.getAttrib(o,"selected");l.push(h?h:null)})}r=r.cloneNode(true);if(d){f(r.getElementsByTagName("option"),function(o,h){k.dom.setAttrib(o,"selected",l[h])})}j=r.ownerDocument.implementation;if(j.createHTMLDocument&&(e.isOpera&&opera.buildNumber()>=1767)){p=j.createHTMLDocument("");f(r.nodeName=="BODY"?r.childNodes:[r],function(h){p.body.appendChild(p.importNode(h,true))});if(r.nodeName!="BODY"){r=p.body.firstChild}else{r=p.body}i=k.dom.doc;k.dom.doc=p}k.key=""+(parseInt(k.key)+1);if(!q.no_events){q.node=r;k.onPreProcess.dispatch(k,q)}k.writer.reset();k._info=q;k._serializeNode(r,q.getInner);q.content=k.writer.getContent();if(i){k.dom.doc=i}if(!q.no_events){k.onPostProcess.dispatch(k,q)}k._postProcess(q);q.node=null;return e.trim(q.content)},_postProcess:function(n){var i=this,k=i.settings,j=n.content,m=[],l;if(n.format=="html"){l=i._protect({content:j,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<noscript[^>]*>)(.*?)(<\/noscript>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});j=l.content;if(k.entity_encoding!=="raw"){j=i._encode(j)}if(!n.set){j=j.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,k.entity_encoding=="numeric"?"<p$1>&#160;</p>":"<p$1>&nbsp;</p>");if(k.remove_linebreaks){j=j.replace(/\r?\n|\r/g," ");j=j.replace(/(<[^>]+>)\s+/g,"$1 ");j=j.replace(/\s+(<\/[^>]+>)/g," $1");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,"<$1 $2>");j=j.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,"<$1>");j=j.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,"</$1>")}if(k.apply_source_formatting&&k.indent_mode=="simple"){j=j.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,"\n<$1$2$3>\n");j=j.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,"\n<$1$2>");j=j.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,"</$1>\n");j=j.replace(/\n\n/g,"\n")}}j=i._unprotect(j,l);j=j.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,"<![CDATA[$1]]>");if(k.entity_encoding=="raw"){j=j.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g,"<p$1>\u00a0</p>")}j=j.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g,function(h,p,o){return"<noscript"+p+">"+i.dom.decode(o.replace(/<!--|-->/g,""))+"</noscript>"})}n.content=j},_serializeNode:function(E,J){var A=this,B=A.settings,y=A.writer,q,j,u,G,F,I,C,h,z,k,r,D,p,m,H,o,x;if(!B.node_filter||B.node_filter(E)){switch(E.nodeType){case 1:if(E.hasAttribute?E.hasAttribute("_mce_bogus"):E.getAttribute("_mce_bogus")){return}p=H=false;q=E.hasChildNodes();k=E.getAttribute("_mce_name")||E.nodeName.toLowerCase();o=E.getAttribute("_mce_type");if(o){if(!A._info.cleanup){p=true;return}else{H=1}}if(d){x=E.scopeName;if(x&&x!=="HTML"&&x!=="html"){k=x+":"+k}}if(k.indexOf("mce:")===0){k=k.substring(4)}if(!H){if(!A.validElementsRE||!A.validElementsRE.test(k)||(A.invalidElementsRE&&A.invalidElementsRE.test(k))||J){p=true;break}}if(d){if(B.fix_content_duplication){if(E._mce_serialized==A.key){return}E._mce_serialized=A.key}if(k.charAt(0)=="/"){k=k.substring(1)}}else{if(a){if(E.nodeName==="BR"&&E.getAttribute("type")=="_moz"){return}}}if(B.validate_children){if(A.elementName&&!A.schema.isValid(A.elementName,k)){p=true;break}A.elementName=k}r=A.findRule(k);if(!r){p=true;break}k=r.name||k;m=B.closed.test(k);if((!q&&r.noEmpty)||(d&&!k)){p=true;break}if(r.requiredAttribs){I=r.requiredAttribs;for(G=I.length-1;G>=0;G--){if(this.dom.getAttrib(E,I[G])!==""){break}}if(G==-1){p=true;break}}y.writeStartElement(k);if(r.attribs){for(G=0,C=r.attribs,F=C.length;G<F;G++){I=C[G];z=A._getAttrib(E,I);if(z!==null){y.writeAttribute(I.name,z)}}}if(r.validAttribsRE){C=A.dom.getAttribs(E);for(G=C.length-1;G>-1;G--){h=C[G];if(h.specified){I=h.nodeName.toLowerCase();if(B.invalid_attrs.test(I)||!r.validAttribsRE.test(I)){continue}D=A.findAttribRule(r,I);z=A._getAttrib(E,D,I);if(z!==null){y.writeAttribute(I,z)}}}}if(o&&H){y.writeAttribute("_mce_type",o)}if(k==="script"&&e.trim(E.innerHTML)){y.writeText("// ");y.writeCDATA(E.innerHTML.replace(/<!--|-->|<\[CDATA\[|\]\]>/g,""));q=false;break}if(r.padd){if(q&&(u=E.firstChild)&&u.nodeType===1&&E.childNodes.length===1){if(u.hasAttribute?u.hasAttribute("_mce_bogus"):u.getAttribute("_mce_bogus")){y.writeText("\u00a0")}}else{if(!q){y.writeText("\u00a0")}}}break;case 3:if(B.validate_children&&A.elementName&&!A.schema.isValid(A.elementName,"#text")){return}return y.writeText(E.nodeValue);case 4:return y.writeCDATA(E.nodeValue);case 8:return y.writeComment(E.nodeValue)}}else{if(E.nodeType==1){q=E.hasChildNodes()}}if(q&&!m){u=E.firstChild;while(u){A._serializeNode(u);A.elementName=k;u=u.nextSibling}}if(!p){if(!m){y.writeFullEndElement()}else{y.writeEndElement()}}},_protect:function(j){var i=this;j.items=j.items||[];function h(l){return l.replace(/[\r\n\\]/g,function(m){if(m==="\n"){return"\\n"}else{if(m==="\\"){return"\\\\"}}return"\\r"})}function k(l){return l.replace(/\\[\\rn]/g,function(m){if(m==="\\n"){return"\n"}else{if(m==="\\\\"){return"\\"}}return"\r"})}f(j.patterns,function(l){j.content=k(h(j.content).replace(l.pattern,function(n,o,m,p){m=k(m);if(l.encode){m=i._encode(m)}j.items.push(m);return o+"<!--mce:"+(j.items.length-1)+"-->"+p}))});return j},_unprotect:function(i,j){i=i.replace(/\<!--mce:([0-9]+)--\>/g,function(k,h){return j.items[parseInt(h)]});j.items=[];return i},_encode:function(m){var j=this,k=j.settings,i;if(k.entity_encoding!=="raw"){if(k.entity_encoding.indexOf("named")!=-1){j.setEntities(k.entities);i=j.entityLookup;m=m.replace(/[\u007E-\uFFFF]/g,function(h){var l;if(l=i[h]){h="&"+l+";"}return h})}if(k.entity_encoding.indexOf("numeric")!=-1){m=m.replace(/[\u007E-\uFFFF]/g,function(h){return"&#"+h.charCodeAt(0)+";"})}}return m},_setup:function(){var h=this,i=this.settings;if(h.done){return}h.done=1;h.setRules(i.valid_elements);h.addRules(i.extended_valid_elements);if(i.invalid_elements){h.invalidElementsRE=new RegExp("^("+c(i.invalid_elements.replace(/,/g,"|").toLowerCase())+")$")}if(i.attrib_value_filter){h.attribValueFilter=i.attribValueFilter}},_getAttrib:function(m,j,h){var l,k;h=h||j.name;if(j.forcedVal&&(k=j.forcedVal)){if(k==="{$uid}"){return this.dom.uniqueId()}return k}k=this.dom.getAttrib(m,h);switch(h){case"rowspan":case"colspan":if(k=="1"){k=""}break}if(this.attribValueFilter){k=this.attribValueFilter(h,k,m)}if(j.validVals){for(l=j.validVals.length-1;l>=0;l--){if(k==j.validVals[l]){break}}if(l==-1){return null}}if(k===""&&typeof(j.defaultVal)!="undefined"){k=j.defaultVal;if(k==="{$uid}"){return this.dom.uniqueId()}return k}else{if(h=="class"&&this.processObj.get){k=k.replace(/\s?mceItem\w+\s?/g,"")}}if(k===""){return null}return k}})})(tinymce);(function(a){a.dom.ScriptLoader=function(h){var c=0,k=1,i=2,l={},j=[],f={},d=[],g=0,e;function b(m,u){var v=this,q=a.DOM,s,o,r,n;function p(){q.remove(n);if(s){s.onreadystatechange=s.onload=s=null}u()}n=q.uniqueId();if(a.isIE6){o=new a.util.URI(m);r=location;if(o.host==r.hostname&&o.port==r.port&&(o.protocol+":")==r.protocol){a.util.XHR.send({url:a._addVer(o.getURI()),success:function(x){var t=q.create("script",{type:"text/javascript"});t.text=x;document.getElementsByTagName("head")[0].appendChild(t);q.remove(t);p()}});return}}s=q.create("script",{id:n,type:"text/javascript",src:a._addVer(m)});s.onload=p;s.onreadystatechange=function(){var t=s.readyState;if(t=="complete"||t=="loaded"){p()}};(document.getElementsByTagName("head")[0]||document.body).appendChild(s)}this.isDone=function(m){return l[m]==i};this.markDone=function(m){l[m]=i};this.add=this.load=function(m,q,n){var o,p=l[m];if(p==e){j.push(m);l[m]=c}if(q){if(!f[m]){f[m]=[]}f[m].push({func:q,scope:n||this})}};this.loadQueue=function(n,m){this.loadScripts(j,n,m)};this.loadScripts=function(m,q,p){var o;function n(r){a.each(f[r],function(s){s.func.call(s.scope)});f[r]=e}d.push({func:q,scope:p||this});o=function(){var r=a.grep(m);m.length=0;a.each(r,function(s){if(l[s]==i){n(s);return}if(l[s]!=k){l[s]=k;g++;b(s,function(){l[s]=i;g--;n(s);o()})}});if(!g){a.each(d,function(s){s.func.call(s.scope)});d.length=0}};o()}};a.ScriptLoader=new a.dom.ScriptLoader()})(tinymce);tinymce.dom.TreeWalker=function(a,c){var b=a;function d(i,f,e,j){var h,g;if(i){if(!j&&i[f]){return i[f]}if(i!=c){h=i[e];if(h){return h}for(g=i.parentNode;g&&g!=c;g=g.parentNode){h=g[e];if(h){return h}}}}}this.current=function(){return b};this.next=function(e){return(b=d(b,"firstChild","nextSibling",e))};this.prev=function(e){return(b=d(b,"lastChild","lastSibling",e))}};(function(){var a={};function b(f,e){var d;function c(g){return g.replace(/[A-Z]+/g,function(h){return c(f[h])})}for(d in f){if(f.hasOwnProperty(d)){f[d]=c(f[d])}}c(e).replace(/#/g,"#text").replace(/(\w+)\[([^\]]+)\]/g,function(l,g,j){var h,k={};j=j.split(/\|/);for(h=j.length-1;h>=0;h--){k[j[h]]=1}a[g]=k})}b({Z:"#|H|K|N|O|P",Y:"#|X|form|R|Q",X:"p|T|div|U|W|isindex|fieldset|table",W:"pre|hr|blockquote|address|center|noframes",U:"ul|ol|dl|menu|dir",ZC:"#|p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q",T:"h1|h2|h3|h4|h5|h6",ZB:"#|X|S|Q",S:"R|P",ZA:"#|a|G|J|M|O|P",R:"#|a|H|K|N|O",Q:"noscript|P",P:"ins|del|script",O:"input|select|textarea|label|button",N:"M|L",M:"em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym",L:"sub|sup",K:"J|I",J:"tt|i|b|u|s|strike",I:"big|small|font|basefont",H:"G|F",G:"br|span|bdo",F:"object|applet|img|map|iframe"},"script[]style[]object[#|param|X|form|a|H|K|N|O|Q]param[]p[S]a[Z]br[]span[S]bdo[S]applet[#|param|X|form|a|H|K|N|O|Q]h1[S]img[]map[X|form|Q|area]h2[S]iframe[#|X|form|a|H|K|N|O|Q]h3[S]tt[S]i[S]b[S]u[S]s[S]strike[S]big[S]small[S]font[S]basefont[]em[S]strong[S]dfn[S]code[S]q[S]samp[S]kbd[S]var[S]cite[S]abbr[S]acronym[S]sub[S]sup[S]input[]select[optgroup|option]optgroup[option]option[]textarea[]label[S]button[#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]h4[S]ins[#|X|form|a|H|K|N|O|Q]h5[S]del[#|X|form|a|H|K|N|O|Q]h6[S]div[#|X|form|a|H|K|N|O|Q]ul[li]li[#|X|form|a|H|K|N|O|Q]ol[li]dl[dt|dd]dt[S]dd[#|X|form|a|H|K|N|O|Q]menu[li]dir[li]pre[ZA]hr[]blockquote[#|X|form|a|H|K|N|O|Q]address[S|p]center[#|X|form|a|H|K|N|O|Q]noframes[#|X|form|a|H|K|N|O|Q]isindex[]fieldset[#|legend|X|form|a|H|K|N|O|Q]legend[S]table[caption|col|colgroup|thead|tfoot|tbody|tr]caption[S]col[]colgroup[col]thead[tr]tr[th|td]th[#|X|form|a|H|K|N|O|Q]form[#|X|a|H|K|N|O|Q]noscript[#|X|form|a|H|K|N|O|Q]td[#|X|form|a|H|K|N|O|Q]tfoot[tr]tbody[tr]area[]base[]body[#|X|form|a|H|K|N|O|Q]");tinymce.dom.Schema=function(){var c=this,d=a;c.isValid=function(f,e){var g=d[f];return !!(g&&(!e||g[e]))}}})();(function(a){a.dom.RangeUtils=function(c){var b="\uFEFF";this.walk=function(d,r){var h=d.startContainer,k=d.startOffset,s=d.endContainer,l=d.endOffset,i,f,n,g,q,p,e;e=c.select("td.mceSelected,th.mceSelected");if(e.length>0){a.each(e,function(t){r([t])});return}function o(v,u,t){var x=[];for(;v&&v!=t;v=v[u]){x.push(v)}return x}function m(u,t){do{if(u.parentNode==t){return u}u=u.parentNode}while(u)}function j(v,u,x){var t=x?"nextSibling":"previousSibling";for(g=v,q=g.parentNode;g&&g!=u;g=q){q=g.parentNode;p=o(g==v?g:g[t],t);if(p.length){if(!x){p.reverse()}r(p)}}}if(h.nodeType==1&&h.hasChildNodes()){h=h.childNodes[k]}if(s.nodeType==1&&s.hasChildNodes()){s=s.childNodes[Math.min(k==l?l:l-1,s.childNodes.length-1)]}i=c.findCommonAncestor(h,s);if(h==s){return r([h])}for(g=h;g;g=g.parentNode){if(g==s){return j(h,i,true)}if(g==i){break}}for(g=s;g;g=g.parentNode){if(g==h){return j(s,i)}if(g==i){break}}f=m(h,i)||h;n=m(s,i)||s;j(h,f,true);p=o(f==h?f:f.nextSibling,"nextSibling",n==s?n.nextSibling:n);if(p.length){r(p)}j(s,n)}};a.dom.RangeUtils.compareRanges=function(c,b){if(c&&b){if(c.item||c.duplicate){if(c.item&&b.item&&c.item(0)===b.item(0)){return true}if(c.isEqual&&b.isEqual&&b.isEqual(c)){return true}}else{return c.startContainer==b.startContainer&&c.startOffset==b.startOffset}}return false}})(tinymce);(function(c){var b=c.DOM,a=c.is;c.create("tinymce.ui.Control",{Control:function(e,d){this.id=e;this.settings=d=d||{};this.rendered=false;this.onRender=new c.util.Dispatcher(this);this.classPrefix="";this.scope=d.scope||this;this.disabled=0;this.active=0},setDisabled:function(d){var f;if(d!=this.disabled){f=b.get(this.id);if(f&&this.settings.unavailable_prefix){if(d){this.prevTitle=f.title;f.title=this.settings.unavailable_prefix+": "+f.title}else{f.title=this.prevTitle}}this.setState("Disabled",d);this.setState("Enabled",!d);this.disabled=d}},isDisabled:function(){return this.disabled},setActive:function(d){if(d!=this.active){this.setState("Active",d);this.active=d}},isActive:function(){return this.active},setState:function(f,d){var e=b.get(this.id);f=this.classPrefix+f;if(d){b.addClass(e,f)}else{b.removeClass(e,f)}},isRendered:function(){return this.rendered},renderHTML:function(){},renderTo:function(d){b.setHTML(d,this.renderHTML())},postRender:function(){var e=this,d;if(a(e.disabled)){d=e.disabled;e.disabled=-1;e.setDisabled(d)}if(a(e.active)){d=e.active;e.active=-1;e.setActive(d)}},remove:function(){b.remove(this.id);this.destroy()},destroy:function(){c.dom.Event.clear(this.id)}})})(tinymce);tinymce.create("tinymce.ui.Container:tinymce.ui.Control",{Container:function(b,a){this.parent(b,a);this.controls=[];this.lookup={}},add:function(a){this.lookup[a.id]=a;this.controls.push(a);return a},get:function(a){return this.lookup[a]}});tinymce.create("tinymce.ui.Separator:tinymce.ui.Control",{Separator:function(b,a){this.parent(b,a);this.classPrefix="mceSeparator"},renderHTML:function(){return tinymce.DOM.createHTML("span",{"class":this.classPrefix})}});(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.MenuItem:tinymce.ui.Control",{MenuItem:function(g,f){this.parent(g,f);this.classPrefix="mceMenuItem"},setSelected:function(f){this.setState("Selected",f);this.selected=f},isSelected:function(){return this.selected},postRender:function(){var f=this;f.parent();if(c(f.selected)){f.setSelected(f.selected)}}})})(tinymce);(function(d){var c=d.is,b=d.DOM,e=d.each,a=d.walk;d.create("tinymce.ui.Menu:tinymce.ui.MenuItem",{Menu:function(h,g){var f=this;f.parent(h,g);f.items={};f.collapsed=false;f.menuCount=0;f.onAddItem=new d.util.Dispatcher(this)},expand:function(g){var f=this;if(g){a(f,function(h){if(h.expand){h.expand()}},"items",f)}f.collapsed=false},collapse:function(g){var f=this;if(g){a(f,function(h){if(h.collapse){h.collapse()}},"items",f)}f.collapsed=true},isCollapsed:function(){return this.collapsed},add:function(f){if(!f.settings){f=new d.ui.MenuItem(f.id||b.uniqueId(),f)}this.onAddItem.dispatch(this,f);return this.items[f.id]=f},addSeparator:function(){return this.add({separator:true})},addMenu:function(f){if(!f.collapse){f=this.createMenu(f)}this.menuCount++;return this.add(f)},hasMenus:function(){return this.menuCount!==0},remove:function(f){delete this.items[f.id]},removeAll:function(){var f=this;a(f,function(g){if(g.removeAll){g.removeAll()}else{g.remove()}g.destroy()},"items",f);f.items={}},createMenu:function(g){var f=new d.ui.Menu(g.id||b.uniqueId(),g);f.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return f}})})(tinymce);(function(e){var d=e.is,c=e.DOM,f=e.each,a=e.dom.Event,b=e.dom.Element;e.create("tinymce.ui.DropMenu:tinymce.ui.Menu",{DropMenu:function(h,g){g=g||{};g.container=g.container||c.doc.body;g.offset_x=g.offset_x||0;g.offset_y=g.offset_y||0;g.vp_offset_x=g.vp_offset_x||0;g.vp_offset_y=g.vp_offset_y||0;if(d(g.icons)&&!g.icons){g["class"]+=" mceNoIcons"}this.parent(h,g);this.onShowMenu=new e.util.Dispatcher(this);this.onHideMenu=new e.util.Dispatcher(this);this.classPrefix="mceMenu"},createMenu:function(j){var h=this,i=h.settings,g;j.container=j.container||i.container;j.parent=h;j.constrain=j.constrain||i.constrain;j["class"]=j["class"]||i["class"];j.vp_offset_x=j.vp_offset_x||i.vp_offset_x;j.vp_offset_y=j.vp_offset_y||i.vp_offset_y;g=new e.ui.DropMenu(j.id||c.uniqueId(),j);g.onAddItem.add(h.onAddItem.dispatch,h.onAddItem);return g},update:function(){var i=this,j=i.settings,g=c.get("menu_"+i.id+"_tbl"),l=c.get("menu_"+i.id+"_co"),h,k;h=j.max_width?Math.min(g.clientWidth,j.max_width):g.clientWidth;k=j.max_height?Math.min(g.clientHeight,j.max_height):g.clientHeight;if(!c.boxModel){i.element.setStyles({width:h+2,height:k+2})}else{i.element.setStyles({width:h,height:k})}if(j.max_width){c.setStyle(l,"width",h)}if(j.max_height){c.setStyle(l,"height",k);if(g.clientHeight<j.max_height){c.setStyle(l,"overflow","hidden")}}},showMenu:function(p,n,r){var z=this,A=z.settings,o,g=c.getViewPort(),u,l,v,q,i=2,k,j,m=z.classPrefix;z.collapse(1);if(z.isMenuVisible){return}if(!z.rendered){o=c.add(z.settings.container,z.renderNode());f(z.items,function(h){h.postRender()});z.element=new b("menu_"+z.id,{blocker:1,container:A.container})}else{o=c.get("menu_"+z.id)}if(!e.isOpera){c.setStyles(o,{left:-65535,top:-65535})}c.show(o);z.update();p+=A.offset_x||0;n+=A.offset_y||0;g.w-=4;g.h-=4;if(A.constrain){u=o.clientWidth-i;l=o.clientHeight-i;v=g.x+g.w;q=g.y+g.h;if((p+A.vp_offset_x+u)>v){p=r?r-u:Math.max(0,(v-A.vp_offset_x)-u)}if((n+A.vp_offset_y+l)>q){n=Math.max(0,(q-A.vp_offset_y)-l)}}c.setStyles(o,{left:p,top:n});z.element.update();z.isMenuVisible=1;z.mouseClickFunc=a.add(o,"click",function(s){var h;s=s.target;if(s&&(s=c.getParent(s,"tr"))&&!c.hasClass(s,m+"ItemSub")){h=z.items[s.id];if(h.isDisabled()){return}k=z;while(k){if(k.hideMenu){k.hideMenu()}k=k.settings.parent}if(h.settings.onclick){h.settings.onclick(s)}return a.cancel(s)}});if(z.hasMenus()){z.mouseOverFunc=a.add(o,"mouseover",function(x){var h,t,s;x=x.target;if(x&&(x=c.getParent(x,"tr"))){h=z.items[x.id];if(z.lastMenu){z.lastMenu.collapse(1)}if(h.isDisabled()){return}if(x&&c.hasClass(x,m+"ItemSub")){t=c.getRect(x);h.showMenu((t.x+t.w-i),t.y-i,t.x);z.lastMenu=h;c.addClass(c.get(h.id).firstChild,m+"ItemActive")}}})}z.onShowMenu.dispatch(z);if(A.keyboard_focus){a.add(o,"keydown",z._keyHandler,z);c.select("a","menu_"+z.id)[0].focus();z._focusIdx=0}},hideMenu:function(j){var g=this,i=c.get("menu_"+g.id),h;if(!g.isMenuVisible){return}a.remove(i,"mouseover",g.mouseOverFunc);a.remove(i,"click",g.mouseClickFunc);a.remove(i,"keydown",g._keyHandler);c.hide(i);g.isMenuVisible=0;if(!j){g.collapse(1)}if(g.element){g.element.hide()}if(h=c.get(g.id)){c.removeClass(h.firstChild,g.classPrefix+"ItemActive")}g.onHideMenu.dispatch(g)},add:function(i){var g=this,h;i=g.parent(i);if(g.isRendered&&(h=c.get("menu_"+g.id))){g._add(c.select("tbody",h)[0],i)}return i},collapse:function(g){this.parent(g);this.hideMenu(1)},remove:function(g){c.remove(g.id);this.destroy();return this.parent(g)},destroy:function(){var g=this,h=c.get("menu_"+g.id);a.remove(h,"mouseover",g.mouseOverFunc);a.remove(h,"click",g.mouseClickFunc);if(g.element){g.element.remove()}c.remove(h)},renderNode:function(){var i=this,j=i.settings,l,h,k,g;g=c.create("div",{id:"menu_"+i.id,"class":j["class"],style:"position:absolute;left:0;top:0;z-index:200000"});k=c.add(g,"div",{id:"menu_"+i.id+"_co","class":i.classPrefix+(j["class"]?" "+j["class"]:"")});i.element=new b("menu_"+i.id,{blocker:1,container:j.container});if(j.menu_line){c.add(k,"span",{"class":i.classPrefix+"Line"})}l=c.add(k,"table",{id:"menu_"+i.id+"_tbl",border:0,cellPadding:0,cellSpacing:0});h=c.add(l,"tbody");f(i.items,function(m){i._add(h,m)});i.rendered=true;return g},_keyHandler:function(j){var i=this,h=j.keyCode;function g(m){var k=i._focusIdx+m,l=c.select("a","menu_"+i.id)[k];if(l){i._focusIdx=k;l.focus()}}switch(h){case 38:g(-1);return;case 40:g(1);return;case 13:return;case 27:return this.hideMenu()}},_add:function(j,h){var i,q=h.settings,p,l,k,m=this.classPrefix,g;if(q.separator){l=c.add(j,"tr",{id:h.id,"class":m+"ItemSeparator"});c.add(l,"td",{"class":m+"ItemSeparator"});if(i=l.previousSibling){c.addClass(i,"mceLast")}return}i=l=c.add(j,"tr",{id:h.id,"class":m+"Item "+m+"ItemEnabled"});i=k=c.add(i,"td");i=p=c.add(i,"a",{href:"javascript:;",onclick:"return false;",onmousedown:"return false;"});c.addClass(k,q["class"]);g=c.add(i,"span",{"class":"mceIcon"+(q.icon?" mce_"+q.icon:"")});if(q.icon_src){c.add(g,"img",{src:q.icon_src})}i=c.add(i,q.element||"span",{"class":"mceText",title:h.settings.title},h.settings.title);if(h.settings.style){c.setAttrib(i,"style",h.settings.style)}if(j.childNodes.length==1){c.addClass(l,"mceFirst")}if((i=l.previousSibling)&&c.hasClass(i,m+"ItemSeparator")){c.addClass(l,"mceFirst")}if(h.collapse){c.addClass(l,m+"ItemSub")}if(i=l.previousSibling){c.removeClass(i,"mceLast")}c.addClass(l,"mceLast")}})})(tinymce);(function(b){var a=b.DOM;b.create("tinymce.ui.Button:tinymce.ui.Control",{Button:function(d,c){this.parent(d,c);this.classPrefix="mceButton"},renderHTML:function(){var f=this.classPrefix,e=this.settings,d,c;c=a.encode(e.label||"");d='<a id="'+this.id+'" href="javascript:;" class="'+f+" "+f+"Enabled "+e["class"]+(c?" "+f+"Labeled":"")+'" onmousedown="return false;" onclick="return false;" title="'+a.encode(e.title)+'">';if(e.image){d+='<img class="mceIcon" src="'+e.image+'" />'+c+"</a>"}else{d+='<span class="mceIcon '+e["class"]+'"></span>'+(c?'<span class="'+f+'Label">'+c+"</span>":"")+"</a>"}return d},postRender:function(){var c=this,d=c.settings;b.dom.Event.add(c.id,"click",function(f){if(!c.isDisabled()){return d.onclick.call(d.scope,f)}})}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.ListBox:tinymce.ui.Control",{ListBox:function(h,g){var f=this;f.parent(h,g);f.items=[];f.onChange=new a(f);f.onPostRender=new a(f);f.onAdd=new a(f);f.onRenderMenu=new d.util.Dispatcher(this);f.classPrefix="mceListBox"},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){var g=this,h,i;if(f!=g.selectedIndex){h=c.get(g.id+"_text");i=g.items[f];if(i){g.selectedValue=i.value;g.selectedIndex=f;c.setHTML(h,c.encode(i.title));c.removeClass(h,"mceTitle")}else{c.setHTML(h,c.encode(g.settings.title));c.addClass(h,"mceTitle");g.selectedValue=g.selectedIndex=null}h=0}},add:function(i,f,h){var g=this;h=h||{};h=d.extend(h,{title:i,value:f});g.items.push(h);g.onAdd.dispatch(g,h)},getLength:function(){return this.items.length},renderHTML:function(){var i="",f=this,g=f.settings,j=f.classPrefix;i='<table id="'+f.id+'" cellpadding="0" cellspacing="0" class="'+j+" "+j+"Enabled"+(g["class"]?(" "+g["class"]):"")+'"><tbody><tr>';i+="<td>"+c.createHTML("a",{id:f.id+"_text",href:"javascript:;","class":"mceText",onclick:"return false;",onmousedown:"return false;"},c.encode(f.settings.title))+"</td>";i+="<td>"+c.createHTML("a",{id:f.id+"_open",tabindex:-1,href:"javascript:;","class":"mceOpen",onclick:"return false;",onmousedown:"return false;"},"<span></span>")+"</td>";i+="</tr></tbody></table>";return i},showMenu:function(){var g=this,j,i,h=c.get(this.id),f;if(g.isDisabled()||g.items.length==0){return}if(g.menu&&g.menu.isMenuVisible){return g.hideMenu()}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}j=c.getPos(this.settings.menu_container);i=c.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.keyboard_focus=!d.isOpera;if(g.oldID){f.items[g.oldID].setSelected(0)}e(g.items,function(k){if(k.value===g.selectedValue){f.items[k.id].setSelected(1);g.oldID=k.id}});f.showMenu(0,h.clientHeight);b.add(c.doc,"mousedown",g.hideMenu,g);c.addClass(g.id,g.classPrefix+"Selected")},hideMenu:function(g){var f=this;if(f.menu&&f.menu.isMenuVisible){if(g&&g.type=="mousedown"&&(g.target.id==f.id+"_text"||g.target.id==f.id+"_open")){return}if(!g||!c.getParent(g.target,".mceMenu")){c.removeClass(f.id,f.classPrefix+"Selected");b.remove(c.doc,"mousedown",f.hideMenu,f);f.menu.hideMenu()}}},renderMenu:function(){var g=this,f;f=g.settings.control_manager.createDropMenu(g.id+"_menu",{menu_line:1,"class":g.classPrefix+"Menu mceNoIcons",max_width:150,max_height:150});f.onHideMenu.add(g.hideMenu,g);f.add({title:g.settings.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}});e(g.items,function(h){if(h.value===undefined){f.add({title:h.title,"class":"mceMenuItemTitle",onclick:function(){if(g.settings.onselect("")!==false){g.select("")}}})}else{h.id=c.uniqueId();h.onclick=function(){if(g.settings.onselect(h.value)!==false){g.select(h.value)}};f.add(h)}});g.onRenderMenu.dispatch(g,f);g.menu=f},postRender:function(){var f=this,g=f.classPrefix;b.add(f.id,"click",f.showMenu,f);b.add(f.id+"_text","focus",function(){if(!f._focused){f.keyDownHandler=b.add(f.id+"_text","keydown",function(k){var h=-1,i,j=k.keyCode;e(f.items,function(l,m){if(f.selectedValue==l.value){h=m}});if(j==38){i=f.items[h-1]}else{if(j==40){i=f.items[h+1]}else{if(j==13){i=f.selectedValue;f.selectedValue=null;f.settings.onselect(i);return b.cancel(k)}}}if(i){f.hideMenu();f.select(i.value)}})}f._focused=1});b.add(f.id+"_text","blur",function(){b.remove(f.id+"_text","keydown",f.keyDownHandler);f._focused=0});if(d.isIE6||!c.boxModel){b.add(f.id,"mouseover",function(){if(!c.hasClass(f.id,g+"Disabled")){c.addClass(f.id,g+"Hover")}});b.add(f.id,"mouseout",function(){if(!c.hasClass(f.id,g+"Disabled")){c.removeClass(f.id,g+"Hover")}})}f.onPostRender.dispatch(f,c.get(f.id))},destroy:function(){this.parent();b.clear(this.id+"_text");b.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,b=d.dom.Event,e=d.each,a=d.util.Dispatcher;d.create("tinymce.ui.NativeListBox:tinymce.ui.ListBox",{NativeListBox:function(g,f){this.parent(g,f);this.classPrefix="mceNativeListBox"},setDisabled:function(f){c.get(this.id).disabled=f},isDisabled:function(){return c.get(this.id).disabled},select:function(h){var g=this,j,i;if(h==undefined){return g.selectByIndex(-1)}if(h&&h.call){i=h}else{i=function(f){return f==h}}if(h!=g.selectedValue){e(g.items,function(k,f){if(i(k.value)){j=1;g.selectByIndex(f);return false}});if(!j){g.selectByIndex(-1)}}},selectByIndex:function(f){c.get(this.id).selectedIndex=f+1;this.selectedValue=this.items[f]?this.items[f].value:null},add:function(j,g,f){var i,h=this;f=f||{};f.value=g;if(h.isRendered()){c.add(c.get(this.id),"option",f,j)}i={title:j,value:g,attribs:f};h.items.push(i);h.onAdd.dispatch(h,i)},getLength:function(){return this.items.length},renderHTML:function(){var g,f=this;g=c.createHTML("option",{value:""},"-- "+f.settings.title+" --");e(f.items,function(h){g+=c.createHTML("option",{value:h.value},h.title)});g=c.createHTML("select",{id:f.id,"class":"mceNativeListBox"},g);return g},postRender:function(){var g=this,h;g.rendered=true;function f(j){var i=g.items[j.target.selectedIndex-1];if(i&&(i=i.value)){g.onChange.dispatch(g,i);if(g.settings.onselect){g.settings.onselect(i)}}}b.add(g.id,"change",f);b.add(g.id,"keydown",function(j){var i;b.remove(g.id,"change",h);i=b.add(g.id,"blur",function(){b.add(g.id,"change",f);b.remove(g.id,"blur",i)});if(j.keyCode==13||j.keyCode==32){f(j);return b.cancel(j)}});g.onPostRender.dispatch(g,c.get(g.id))}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.MenuButton:tinymce.ui.Button",{MenuButton:function(f,e){this.parent(f,e);this.onRenderMenu=new c.util.Dispatcher(this);e.menu_container=e.menu_container||b.doc.body},showMenu:function(){var g=this,j,i,h=b.get(g.id),f;if(g.isDisabled()){return}if(!g.isMenuRendered){g.renderMenu();g.isMenuRendered=true}if(g.isMenuVisible){return g.hideMenu()}j=b.getPos(g.settings.menu_container);i=b.getPos(h);f=g.menu;f.settings.offset_x=i.x;f.settings.offset_y=i.y;f.settings.vp_offset_x=i.x;f.settings.vp_offset_y=i.y;f.settings.keyboard_focus=g._focused;f.showMenu(0,h.clientHeight);a.add(b.doc,"mousedown",g.hideMenu,g);g.setState("Selected",1);g.isMenuVisible=1},renderMenu:function(){var f=this,e;e=f.settings.control_manager.createDropMenu(f.id+"_menu",{menu_line:1,"class":this.classPrefix+"Menu",icons:f.settings.icons});e.onHideMenu.add(f.hideMenu,f);f.onRenderMenu.dispatch(f,e);f.menu=e},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&b.getParent(g.target,function(h){return h.id===f.id||h.id===f.id+"_open"})){return}if(!g||!b.getParent(g.target,".mceMenu")){f.setState("Selected",0);a.remove(b.doc,"mousedown",f.hideMenu,f);if(f.menu){f.menu.hideMenu()}}f.isMenuVisible=0},postRender:function(){var e=this,f=e.settings;a.add(e.id,"click",function(){if(!e.isDisabled()){if(f.onclick){f.onclick(e.value)}e.showMenu()}})}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each;c.create("tinymce.ui.SplitButton:tinymce.ui.MenuButton",{SplitButton:function(f,e){this.parent(f,e);this.classPrefix="mceSplitButton"},renderHTML:function(){var i,f=this,g=f.settings,e;i="<tbody><tr>";if(g.image){e=b.createHTML("img ",{src:g.image,"class":"mceAction "+g["class"]})}else{e=b.createHTML("span",{"class":"mceAction "+g["class"]},"")}i+="<td>"+b.createHTML("a",{id:f.id+"_action",href:"javascript:;","class":"mceAction "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";e=b.createHTML("span",{"class":"mceOpen "+g["class"]});i+="<td>"+b.createHTML("a",{id:f.id+"_open",href:"javascript:;","class":"mceOpen "+g["class"],onclick:"return false;",onmousedown:"return false;",title:g.title},e)+"</td>";i+="</tr></tbody>";return b.createHTML("table",{id:f.id,"class":"mceSplitButton mceSplitButtonEnabled "+g["class"],cellpadding:"0",cellspacing:"0",onmousedown:"return false;",title:g.title},i)},postRender:function(){var e=this,f=e.settings;if(f.onclick){a.add(e.id+"_action","click",function(){if(!e.isDisabled()){f.onclick(e.value)}})}a.add(e.id+"_open","click",e.showMenu,e);a.add(e.id+"_open","focus",function(){e._focused=1});a.add(e.id+"_open","blur",function(){e._focused=0});if(c.isIE6||!b.boxModel){a.add(e.id,"mouseover",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.addClass(e.id,"mceSplitButtonHover")}});a.add(e.id,"mouseout",function(){if(!b.hasClass(e.id,"mceSplitButtonDisabled")){b.removeClass(e.id,"mceSplitButtonHover")}})}},destroy:function(){this.parent();a.clear(this.id+"_action");a.clear(this.id+"_open")}})})(tinymce);(function(d){var c=d.DOM,a=d.dom.Event,b=d.is,e=d.each;d.create("tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton",{ColorSplitButton:function(h,g){var f=this;f.parent(h,g);f.settings=g=d.extend({colors:"000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF",grid_width:8,default_color:"#888888"},f.settings);f.onShowMenu=new d.util.Dispatcher(f);f.onHideMenu=new d.util.Dispatcher(f);f.value=g.default_color},showMenu:function(){var f=this,g,j,i,h;if(f.isDisabled()){return}if(!f.isMenuRendered){f.renderMenu();f.isMenuRendered=true}if(f.isMenuVisible){return f.hideMenu()}i=c.get(f.id);c.show(f.id+"_menu");c.addClass(i,"mceSplitButtonSelected");h=c.getPos(i);c.setStyles(f.id+"_menu",{left:h.x,top:h.y+i.clientHeight,zIndex:200000});i=0;a.add(c.doc,"mousedown",f.hideMenu,f);f.onShowMenu.dispatch(f);if(f._focused){f._keyHandler=a.add(f.id+"_menu","keydown",function(k){if(k.keyCode==27){f.hideMenu()}});c.select("a",f.id+"_menu")[0].focus()}f.isMenuVisible=1},hideMenu:function(g){var f=this;if(g&&g.type=="mousedown"&&c.getParent(g.target,function(h){return h.id===f.id+"_open"})){return}if(!g||!c.getParent(g.target,".mceSplitButtonMenu")){c.removeClass(f.id,"mceSplitButtonSelected");a.remove(c.doc,"mousedown",f.hideMenu,f);a.remove(f.id+"_menu","keydown",f._keyHandler);c.hide(f.id+"_menu")}f.onHideMenu.dispatch(f);f.isMenuVisible=0},renderMenu:function(){var k=this,f,j=0,l=k.settings,p,h,o,g;g=c.add(l.menu_container,"div",{id:k.id+"_menu","class":l.menu_class+" "+l["class"],style:"position:absolute;left:0;top:-1000px;"});f=c.add(g,"div",{"class":l["class"]+" mceSplitButtonMenu"});c.add(f,"span",{"class":"mceMenuLine"});p=c.add(f,"table",{"class":"mceColorSplitMenu"});h=c.add(p,"tbody");j=0;e(b(l.colors,"array")?l.colors:l.colors.split(","),function(i){i=i.replace(/^#/,"");if(!j--){o=c.add(h,"tr");j=l.grid_width-1}p=c.add(o,"td");p=c.add(p,"a",{href:"javascript:;",style:{backgroundColor:"#"+i},_mce_color:"#"+i})});if(l.more_colors_func){p=c.add(h,"tr");p=c.add(p,"td",{colspan:l.grid_width,"class":"mceMoreColors"});p=c.add(p,"a",{id:k.id+"_more",href:"javascript:;",onclick:"return false;","class":"mceMoreColors"},l.more_colors_title);a.add(p,"click",function(i){l.more_colors_func.call(l.more_colors_scope||this);return a.cancel(i)})}c.addClass(f,"mceColorSplitMenu");a.add(k.id+"_menu","click",function(i){var m;i=i.target;if(i.nodeName=="A"&&(m=i.getAttribute("_mce_color"))){k.setColor(m)}return a.cancel(i)});return g},setColor:function(g){var f=this;c.setStyle(f.id+"_preview","backgroundColor",g);f.value=g;f.hideMenu();f.settings.onselect(g)},postRender:function(){var f=this,g=f.id;f.parent();c.add(g+"_action","div",{id:g+"_preview","class":"mceColorPreview"});c.setStyle(f.id+"_preview","backgroundColor",f.value)},destroy:function(){this.parent();a.clear(this.id+"_menu");a.clear(this.id+"_more");c.remove(this.id+"_menu")}})})(tinymce);tinymce.create("tinymce.ui.Toolbar:tinymce.ui.Container",{renderHTML:function(){var l=this,e="",g,j,b=tinymce.DOM,m=l.settings,d,a,f,k;k=l.controls;for(d=0;d<k.length;d++){j=k[d];a=k[d-1];f=k[d+1];if(d===0){g="mceToolbarStart";if(j.Button){g+=" mceToolbarStartButton"}else{if(j.SplitButton){g+=" mceToolbarStartSplitButton"}else{if(j.ListBox){g+=" mceToolbarStartListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"))}if(a&&j.ListBox){if(a.Button||a.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarEnd"},b.createHTML("span",null,"<!-- IE -->"))}}if(b.stdMode){e+='<td style="position: relative">'+j.renderHTML()+"</td>"}else{e+="<td>"+j.renderHTML()+"</td>"}if(f&&j.ListBox){if(f.Button||f.SplitButton){e+=b.createHTML("td",{"class":"mceToolbarStart"},b.createHTML("span",null,"<!-- IE -->"))}}}g="mceToolbarEnd";if(j.Button){g+=" mceToolbarEndButton"}else{if(j.SplitButton){g+=" mceToolbarEndSplitButton"}else{if(j.ListBox){g+=" mceToolbarEndListBox"}}}e+=b.createHTML("td",{"class":g},b.createHTML("span",null,"<!-- IE -->"));return b.createHTML("table",{id:l.id,"class":"mceToolbar"+(m["class"]?" "+m["class"]:""),cellpadding:"0",cellspacing:"0",align:l.settings.align||""},"<tbody><tr>"+e+"</tr></tbody>")}});(function(b){var a=b.util.Dispatcher,c=b.each;b.create("tinymce.AddOnManager",{items:[],urls:{},lookup:{},onAdd:new a(this),get:function(d){return this.lookup[d]},requireLangPack:function(e){var d=b.settings;if(d&&d.language){b.ScriptLoader.add(this.urls[e]+"/langs/"+d.language+".js")}},add:function(e,d){this.items.push(d);this.lookup[e]=d;this.onAdd.dispatch(this,e,d);return d},load:function(h,e,d,g){var f=this;if(f.urls[h]){return}if(e.indexOf("/")!=0&&e.indexOf("://")==-1){e=b.baseURL+"/"+e}f.urls[h]=e.substring(0,e.lastIndexOf("/"));b.ScriptLoader.add(e,d,g)}});b.PluginManager=new b.AddOnManager();b.ThemeManager=new b.AddOnManager()}(tinymce));(function(j){var g=j.each,d=j.extend,k=j.DOM,i=j.dom.Event,f=j.ThemeManager,b=j.PluginManager,e=j.explode,h=j.util.Dispatcher,a,c=0;j.documentBaseURL=window.location.href.replace(/[\?#].*$/,"").replace(/[\/\\][^\/]+$/,"");if(!/[\/\\]$/.test(j.documentBaseURL)){j.documentBaseURL+="/"}j.baseURL=new j.util.URI(j.documentBaseURL).toAbsolute(j.baseURL);j.baseURI=new j.util.URI(j.baseURL);j.onBeforeUnload=new h(j);i.add(window,"beforeunload",function(l){j.onBeforeUnload.dispatch(j,l)});j.onAddEditor=new h(j);j.onRemoveEditor=new h(j);j.EditorManager=d(j,{editors:[],i18n:{},activeEditor:null,init:function(q){var n=this,p,l=j.ScriptLoader,u,o=[],m;function r(x,y,t){var v=x[y];if(!v){return}if(j.is(v,"string")){t=v.replace(/\.\w+$/,"");t=t?j.resolve(t):0;v=j.resolve(v)}return v.apply(t||this,Array.prototype.slice.call(arguments,2))}q=d({theme:"simple",language:"en"},q);n.settings=q;i.add(document,"init",function(){var s,v;r(q,"onpageload");switch(q.mode){case"exact":s=q.elements||"";if(s.length>0){g(e(s),function(x){if(k.get(x)){m=new j.Editor(x,q);o.push(m);m.render(1)}else{g(document.forms,function(y){g(y.elements,function(z){if(z.name===x){x="mce_editor_"+c++;k.setAttrib(z,"id",x);m=new j.Editor(x,q);o.push(m);m.render(1)}})})}})}break;case"textareas":case"specific_textareas":function t(y,x){return x.constructor===RegExp?x.test(y.className):k.hasClass(y,x)}g(k.select("textarea"),function(x){if(q.editor_deselector&&t(x,q.editor_deselector)){return}if(!q.editor_selector||t(x,q.editor_selector)){u=k.get(x.name);if(!x.id&&!u){x.id=x.name}if(!x.id||n.get(x.id)){x.id=k.uniqueId()}m=new j.Editor(x.id,q);o.push(m);m.render(1)}});break}if(q.oninit){s=v=0;g(o,function(x){v++;if(!x.initialized){x.onInit.add(function(){s++;if(s==v){r(q,"oninit")}})}else{s++}if(s==v){r(q,"oninit")}})}})},get:function(l){if(l===a){return this.editors}return this.editors[l]},getInstanceById:function(l){return this.get(l)},add:function(m){var l=this,n=l.editors;n[m.id]=m;n.push(m);l._setActive(m);l.onAddEditor.dispatch(l,m);if(j.adapter){j.adapter.patchEditor(m)}return m},remove:function(n){var m=this,l,o=m.editors;if(!o[n.id]){return null}delete o[n.id];for(l=0;l<o.length;l++){if(o[l]==n){o.splice(l,1);break}}if(m.activeEditor==n){m._setActive(o[0])}n.destroy();m.onRemoveEditor.dispatch(m,n);return n},execCommand:function(r,p,o){var q=this,n=q.get(o),l;switch(r){case"mceFocus":n.focus();return true;case"mceAddEditor":case"mceAddControl":if(!q.get(o)){new j.Editor(o,q.settings).render()}return true;case"mceAddFrameControl":l=o.window;l.tinyMCE=tinyMCE;l.tinymce=j;j.DOM.doc=l.document;j.DOM.win=l;n=new j.Editor(o.element_id,o);n.render();if(j.isIE){function m(){n.destroy();l.detachEvent("onunload",m);l=l.tinyMCE=l.tinymce=null}l.attachEvent("onunload",m)}o.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(n){n.remove()}return true;case"mceToggleEditor":if(!n){q.execCommand("mceAddControl",0,o);return true}if(n.isHidden()){n.show()}else{n.hide()}return true}if(q.activeEditor){return q.activeEditor.execCommand(r,p,o)}return false},execInstanceCommand:function(p,o,n,m){var l=this.get(p);if(l){return l.execCommand(o,n,m)}return false},triggerSave:function(){g(this.editors,function(l){l.save()})},addI18n:function(n,q){var l,m=this.i18n;if(!j.is(n,"string")){g(n,function(r,p){g(r,function(t,s){g(t,function(v,u){if(s==="common"){m[p+"."+u]=v}else{m[p+"."+s+"."+u]=v}})})})}else{g(q,function(r,p){m[n+"."+p]=r})}},_setActive:function(l){this.selectedInstance=this.activeEditor=l}})})(tinymce);(function(m){var n=m.DOM,j=m.dom.Event,f=m.extend,k=m.util.Dispatcher,i=m.each,a=m.isGecko,b=m.isIE,e=m.isWebKit,d=m.is,h=m.ThemeManager,c=m.PluginManager,o=m.inArray,l=m.grep,g=m.explode;m.create("tinymce.Editor",{Editor:function(r,q){var p=this;p.id=p.editorId=r;p.execCommands={};p.queryStateCommands={};p.queryValueCommands={};p.isNotDirty=false;p.plugins={};i(["onPreInit","onBeforeRenderUI","onPostRender","onInit","onRemove","onActivate","onDeactivate","onClick","onEvent","onMouseUp","onMouseDown","onDblClick","onKeyDown","onKeyUp","onKeyPress","onContextMenu","onSubmit","onReset","onPaste","onPreProcess","onPostProcess","onBeforeSetContent","onBeforeGetContent","onSetContent","onGetContent","onLoadContent","onSaveContent","onNodeChange","onChange","onBeforeExecCommand","onExecCommand","onUndo","onRedo","onVisualAid","onSetProgressState"],function(s){p[s]=new k(p)});p.settings=q=f({id:r,language:"en",docs_language:"en",theme:"simple",skin:"default",delta_width:0,delta_height:0,popup_css:"",plugins:"",document_base_url:m.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:m.isIE6?'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">':"<!DOCTYPE>",visual_table_class:"mceItemTable",visual:1,font_size_style_values:"xx-small,x-small,small,medium,large,x-large,xx-large",apply_source_formatting:1,directionality:"ltr",forced_root_block:"p",valid_elements:"@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p,-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big",hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:"30px",keep_styles:1,fix_table_elements:1,inline_styles:1,convert_fonts_to_spans:true},q);p.documentBaseURI=new m.util.URI(q.document_base_url||m.documentBaseURL,{base_uri:tinyMCE.baseURI});p.baseURI=m.baseURI;p.execCallback("setup",p)},render:function(r){var u=this,v=u.settings,x=u.id,p=m.ScriptLoader;if(!j.domLoaded){j.add(document,"init",function(){u.render()});return}tinyMCE.settings=v;if(!u.getElement()){return}if(m.isIDevice){return}if(!/TEXTAREA|INPUT/i.test(u.getElement().nodeName)&&v.hidden_input&&n.getParent(x,"form")){n.insertAfter(n.create("input",{type:"hidden",name:x}),x)}if(m.WindowManager){u.windowManager=new m.WindowManager(u)}if(v.encoding=="xml"){u.onGetContent.add(function(s,t){if(t.save){t.content=n.encode(t.content)}})}if(v.add_form_submit_trigger){u.onSubmit.addToTop(function(){if(u.initialized){u.save();u.isNotDirty=1}})}if(v.add_unload_trigger){u._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(u.initialized&&!u.destroyed&&!u.isHidden()){u.save({format:"raw",no_events:true})}})}m.addUnload(u.destroy,u);if(v.submit_patch){u.onBeforeRenderUI.add(function(){var s=u.getElement().form;if(!s){return}if(s._mceOldSubmit){return}if(!s.submit.nodeType&&!s.submit.length){u.formElement=s;s._mceOldSubmit=s.submit;s.submit=function(){m.triggerSave();u.isNotDirty=1;return u.formElement._mceOldSubmit(u.formElement)}}s=null})}function q(){if(v.language){p.add(m.baseURL+"/langs/"+v.language+".js")}if(v.theme&&v.theme.charAt(0)!="-"&&!h.urls[v.theme]){h.load(v.theme,"themes/"+v.theme+"/editor_template"+m.suffix+".js")}i(g(v.plugins),function(s){if(s&&s.charAt(0)!="-"&&!c.urls[s]){if(s=="safari"){return}c.load(s,"plugins/"+s+"/editor_plugin"+m.suffix+".js")}});p.loadQueue(function(){if(!u.removed){u.init()}})}q()},init:function(){var r,E=this,F=E.settings,B,y,A=E.getElement(),q,p,C,x,z,D;m.add(E);if(F.theme){F.theme=F.theme.replace(/-/,"");q=h.get(F.theme);E.theme=new q();if(E.theme.init&&F.init_theme){E.theme.init(E,h.urls[F.theme]||m.documentBaseURL.replace(/\/$/,""))}}i(g(F.plugins.replace(/\-/g,"")),function(G){var H=c.get(G),t=c.urls[G]||m.documentBaseURL.replace(/\/$/,""),s;if(H){s=new H(E,t);E.plugins[G]=s;if(s.init){s.init(E,t)}}});if(F.popup_css!==false){if(F.popup_css){F.popup_css=E.documentBaseURI.toAbsolute(F.popup_css)}else{F.popup_css=E.baseURI.toAbsolute("themes/"+F.theme+"/skins/"+F.skin+"/dialog.css")}}if(F.popup_css_add){F.popup_css+=","+E.documentBaseURI.toAbsolute(F.popup_css_add)}E.controlManager=new m.ControlManager(E);if(F.custom_undo_redo){E.onBeforeExecCommand.add(function(t,G,u,H,s){if(G!="Undo"&&G!="Redo"&&G!="mceRepaint"&&(!s||!s.skip_undo)){if(!E.undoManager.hasUndo()){E.undoManager.add()}}});E.onExecCommand.add(function(t,G,u,H,s){if(G!="Undo"&&G!="Redo"&&G!="mceRepaint"&&(!s||!s.skip_undo)){E.undoManager.add()}})}E.onExecCommand.add(function(s,t){if(!/^(FontName|FontSize)$/.test(t)){E.nodeChanged()}});if(a){function v(s,t){if(!t||!t.initial){E.execCommand("mceRepaint")}}E.onUndo.add(v);E.onRedo.add(v);E.onSetContent.add(v)}E.onBeforeRenderUI.dispatch(E,E.controlManager);if(F.render_ui){B=F.width||A.style.width||A.offsetWidth;y=F.height||A.style.height||A.offsetHeight;E.orgDisplay=A.style.display;D=/^[0-9\.]+(|px)$/i;if(D.test(""+B)){B=Math.max(parseInt(B)+(q.deltaWidth||0),100)}if(D.test(""+y)){y=Math.max(parseInt(y)+(q.deltaHeight||0),100)}q=E.theme.renderUI({targetNode:A,width:B,height:y,deltaWidth:F.delta_width,deltaHeight:F.delta_height});E.editorContainer=q.editorContainer}if(document.domain&&location.hostname!=document.domain){m.relaxedDomain=document.domain}n.setStyles(q.sizeContainer||q.editorContainer,{width:B,height:y});y=(q.iframeHeight||y)+(typeof(y)=="number"?(q.deltaHeight||0):"");if(y<100){y=100}E.iframeHTML=F.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml">';if(F.document_base_url!=m.documentBaseURL){E.iframeHTML+='<base href="'+E.documentBaseURI.getURI()+'" />'}E.iframeHTML+='<meta http-equiv="X-UA-Compatible" content="IE=7" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(m.relaxedDomain){E.iframeHTML+='<script type="text/javascript">document.domain = "'+m.relaxedDomain+'";<\/script>'}x=F.body_id||"tinymce";if(x.indexOf("=")!=-1){x=E.getParam("body_id","","hash");x=x[E.id]||x}z=F.body_class||"";if(z.indexOf("=")!=-1){z=E.getParam("body_class","","hash");z=z[E.id]||""}E.iframeHTML+='</head><body id="'+x+'" class="mceContentBody '+z+'"></body></html>';if(m.relaxedDomain){if(b||(m.isOpera&&parseFloat(opera.version())>=9.5)){C='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+E.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()'}else{if(m.isOpera){C='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()'}}}r=n.add(q.iframeContainer,"iframe",{id:E.id+"_ifr",src:C||'javascript:""',frameBorder:"0",style:{width:"100%",height:y}});E.contentAreaContainer=q.iframeContainer;n.get(q.editorContainer).style.display=E.orgDisplay;n.get(E.id).style.display="none";if(!b||!m.relaxedDomain){E.setupIframe()}A=r=q=null},setupIframe:function(){var z=this,A=z.settings,r=n.get(z.id),u=z.getDoc(),q,x;if(!b||!m.relaxedDomain){u.open();u.write(z.iframeHTML);u.close()}if(!b){try{if(!A.readonly){u.designMode="On"}}catch(v){}}if(b){x=z.getBody();n.hide(x);if(!A.readonly){x.contentEditable=true}n.show(x)}z.dom=new m.dom.DOMUtils(z.getDoc(),{keep_values:true,url_converter:z.convertURL,url_converter_scope:z,hex_colors:A.force_hex_style_colors,class_filter:A.class_filter,update_styles:1,fix_ie_paragraphs:1,valid_styles:A.valid_styles});z.schema=new m.dom.Schema();z.serializer=new m.dom.Serializer(f(A,{valid_elements:A.verify_html===false?"*[*]":A.valid_elements,dom:z.dom,schema:z.schema}));z.selection=new m.dom.Selection(z.dom,z.getWin(),z.serializer);z.formatter=new m.Formatter(this);z.formatter.register({alignleft:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"left"}},{selector:"img,table",styles:{"float":"left"}}],aligncenter:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"center"}},{selector:"img",styles:{display:"block",marginLeft:"auto",marginRight:"auto"}},{selector:"table",styles:{marginLeft:"auto",marginRight:"auto"}}],alignright:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"right"}},{selector:"img,table",styles:{"float":"right"}}],alignfull:[{selector:"p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li",styles:{textAlign:"justify"}}],bold:[{inline:"strong"},{inline:"span",styles:{fontWeight:"bold"}},{inline:"b"}],italic:[{inline:"em"},{inline:"span",styles:{fontStyle:"italic"}},{inline:"i"}],underline:[{inline:"span",styles:{textDecoration:"underline"},exact:true},{inline:"u"}],strikethrough:[{inline:"span",styles:{textDecoration:"line-through"},exact:true},{inline:"u"}],forecolor:{inline:"span",styles:{color:"%value"}},hilitecolor:{inline:"span",styles:{backgroundColor:"%value"}},fontname:{inline:"span",styles:{fontFamily:"%value"}},fontsize:{inline:"span",styles:{fontSize:"%value"}},fontsize_class:{inline:"span",attributes:{"class":"%value"}},blockquote:{block:"blockquote",wrapper:1,remove:"all"},removeformat:[{selector:"b,strong,em,i,font,u,strike",remove:"all",split:true,expand:false,block_expand:true,deep:true},{selector:"span",attributes:["style","class"],remove:"empty",split:true,expand:false,deep:true},{selector:"*",attributes:["style","class"],split:false,expand:false,deep:true}]});i("p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp".split(/\s/),function(s){z.formatter.register(s,{block:s,remove:"all"})});z.formatter.register(z.settings.formats);z.undoManager=new m.UndoManager(z);z.undoManager.onAdd.add(function(t,s){if(!s.initial){return z.onChange.dispatch(z,s,t)}});z.undoManager.onUndo.add(function(t,s){return z.onUndo.dispatch(z,s,t)});z.undoManager.onRedo.add(function(t,s){return z.onRedo.dispatch(z,s,t)});z.forceBlocks=new m.ForceBlocks(z,{forced_root_block:A.forced_root_block});z.editorCommands=new m.EditorCommands(z);z.serializer.onPreProcess.add(function(s,t){return z.onPreProcess.dispatch(z,t,s)});z.serializer.onPostProcess.add(function(s,t){return z.onPostProcess.dispatch(z,t,s)});z.onPreInit.dispatch(z);if(!A.gecko_spellcheck){z.getBody().spellcheck=0}if(!A.readonly){z._addEvents()}z.controlManager.onPostRender.dispatch(z,z.controlManager);z.onPostRender.dispatch(z);if(A.directionality){z.getBody().dir=A.directionality}if(A.nowrap){z.getBody().style.whiteSpace="nowrap"}if(A.custom_elements){function y(s,t){i(g(A.custom_elements),function(B){var C;if(B.indexOf("~")===0){B=B.substring(1);C="span"}else{C="div"}t.content=t.content.replace(new RegExp("<("+B+")([^>]*)>","g"),"<"+C+' _mce_name="$1"$2>');t.content=t.content.replace(new RegExp("</("+B+")>","g"),"</"+C+">")})}z.onBeforeSetContent.add(y);z.onPostProcess.add(function(s,t){if(t.set){y(s,t)}})}if(A.handle_node_change_callback){z.onNodeChange.add(function(t,s,B){z.execCallback("handle_node_change_callback",z.id,B,-1,-1,true,z.selection.isCollapsed())})}if(A.save_callback){z.onSaveContent.add(function(s,B){var t=z.execCallback("save_callback",z.id,B.content,z.getBody());if(t){B.content=t}})}if(A.onchange_callback){z.onChange.add(function(t,s){z.execCallback("onchange_callback",z,s)})}if(A.convert_newlines_to_brs){z.onBeforeSetContent.add(function(s,t){if(t.initial){t.content=t.content.replace(/\r?\n/g,"<br />")}})}if(A.fix_nesting&&b){z.onBeforeSetContent.add(function(s,t){t.content=z._fixNesting(t.content)})}if(A.preformatted){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^\s*<pre.*?>/,"");t.content=t.content.replace(/<\/pre>\s*$/,"");if(t.set){t.content='<pre class="mceItemHidden">'+t.content+"</pre>"}})}if(A.verify_css_classes){z.serializer.attribValueFilter=function(D,B){var C,t;if(D=="class"){if(!z.classesRE){t=z.dom.getClasses();if(t.length>0){C="";i(t,function(s){C+=(C?"|":"")+s["class"]});z.classesRE=new RegExp("("+C+")","gi")}}return !z.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(B)||z.classesRE.test(B)?B:""}return B}}if(A.cleanup_callback){z.onBeforeSetContent.add(function(s,t){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)});z.onPreProcess.add(function(s,t){if(t.set){z.execCallback("cleanup_callback","insert_to_editor_dom",t.node,t)}if(t.get){z.execCallback("cleanup_callback","get_from_editor_dom",t.node,t)}});z.onPostProcess.add(function(s,t){if(t.set){t.content=z.execCallback("cleanup_callback","insert_to_editor",t.content,t)}if(t.get){t.content=z.execCallback("cleanup_callback","get_from_editor",t.content,t)}})}if(A.save_callback){z.onGetContent.add(function(s,t){if(t.save){t.content=z.execCallback("save_callback",z.id,t.content,z.getBody())}})}if(A.handle_event_callback){z.onEvent.add(function(s,t,B){if(z.execCallback("handle_event_callback",t,s,B)===false){j.cancel(t)}})}z.onSetContent.add(function(){z.addVisual(z.getBody())});if(A.padd_empty_editor){z.onPostProcess.add(function(s,t){t.content=t.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,"")})}if(a){function p(s,t){i(s.dom.select("a"),function(C){var B=C.parentNode;if(s.dom.isBlock(B)&&B.lastChild===C){s.dom.add(B,"br",{_mce_bogus:1})}})}z.onExecCommand.add(function(s,t){if(t==="CreateLink"){p(s)}});z.onSetContent.add(z.selection.onSetContent.add(p));if(!A.readonly){try{u.designMode="Off";u.designMode="On"}catch(v){}}}setTimeout(function(){if(z.removed){return}z.load({initial:true,format:(A.cleanup_on_startup?"html":"raw")});z.startContent=z.getContent({format:"raw"});z.initialized=true;z.onInit.dispatch(z);z.execCallback("setupcontent_callback",z.id,z.getBody(),z.getDoc());z.execCallback("init_instance_callback",z);z.focus(true);z.nodeChanged({initial:1});if(A.content_css){m.each(g(A.content_css),function(s){z.dom.loadCSS(z.documentBaseURI.toAbsolute(s))})}if(A.auto_focus){setTimeout(function(){var s=m.get(A.auto_focus);s.selection.select(s.getBody(),1);s.selection.collapse(1);s.getWin().focus()},100)}},1);r=null},focus:function(s){var x,q=this,v=q.settings.content_editable,r,p,u=q.getDoc();if(!s){r=q.selection.getRng();if(r.item){p=r.item(0)}if(!v){q.getWin().focus()}if(p&&p.ownerDocument==u){r=u.body.createControlRange();r.addElement(p);r.select()}}if(m.activeEditor!=q){if((x=m.activeEditor)!=null){x.onDeactivate.dispatch(x,q)}q.onActivate.dispatch(q,x)}m._setActive(q)},execCallback:function(u){var p=this,r=p.settings[u],q;if(!r){return}if(p.callbackLookup&&(q=p.callbackLookup[u])){r=q.func;q=q.scope}if(d(r,"string")){q=r.replace(/\.\w+$/,"");q=q?m.resolve(q):0;r=m.resolve(r);p.callbackLookup=p.callbackLookup||{};p.callbackLookup[u]={func:r,scope:q}}return r.apply(q||p,Array.prototype.slice.call(arguments,1))},translate:function(p){var r=this.settings.language||"en",q=m.i18n;if(!p){return""}return q[r+"."+p]||p.replace(/{\#([^}]+)\}/g,function(t,s){return q[r+"."+s]||"{#"+s+"}"})},getLang:function(q,p){return m.i18n[(this.settings.language||"en")+"."+q]||(d(p)?p:"{#"+q+"}")},getParam:function(u,r,p){var s=m.trim,q=d(this.settings[u])?this.settings[u]:r,t;if(p==="hash"){t={};if(d(q,"string")){i(q.indexOf("=")>0?q.split(/[;,](?![^=;,]*(?:[;,]|$))/):q.split(","),function(x){x=x.split("=");if(x.length>1){t[s(x[0])]=s(x[1])}else{t[s(x[0])]=s(x)}})}else{t=q}return t}return q},nodeChanged:function(r){var p=this,q=p.selection,u=(b?q.getNode():q.getStart())||p.getBody();if(p.initialized){r=r||{};u=b&&u.ownerDocument!=p.getDoc()?p.getBody():u;r.parents=[];p.dom.getParent(u,function(s){if(s.nodeName=="BODY"){return true}r.parents.push(s)});p.onNodeChange.dispatch(p,r?r.controlManager||p.controlManager:p.controlManager,u,q.isCollapsed(),r)}},addButton:function(r,q){var p=this;p.buttons=p.buttons||{};p.buttons[r]=q},addCommand:function(r,q,p){this.execCommands[r]={func:q,scope:p||this}},addQueryStateHandler:function(r,q,p){this.queryStateCommands[r]={func:q,scope:p||this}},addQueryValueHandler:function(r,q,p){this.queryValueCommands[r]={func:q,scope:p||this}},addShortcut:function(r,u,p,s){var q=this,v;if(!q.settings.custom_shortcuts){return false}q.shortcuts=q.shortcuts||{};if(d(p,"string")){v=p;p=function(){q.execCommand(v,false,null)}}if(d(p,"object")){v=p;p=function(){q.execCommand(v[0],v[1],v[2])}}i(g(r),function(t){var x={func:p,scope:s||this,desc:u,alt:false,ctrl:false,shift:false};i(g(t,"+"),function(y){switch(y){case"alt":case"ctrl":case"shift":x[y]=true;break;default:x.charCode=y.charCodeAt(0);x.keyCode=y.toUpperCase().charCodeAt(0)}});q.shortcuts[(x.ctrl?"ctrl":"")+","+(x.alt?"alt":"")+","+(x.shift?"shift":"")+","+x.keyCode]=x});return true},execCommand:function(x,v,z,p){var r=this,u=0,y,q;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(x)&&(!p||!p.skip_focus)){r.focus()}y={};r.onBeforeExecCommand.dispatch(r,x,v,z,y);if(y.terminate){return false}if(r.execCallback("execcommand_callback",r.id,r.selection.getNode(),x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(y=r.execCommands[x]){q=y.func.call(y.scope,v,z);if(q!==true){r.onExecCommand.dispatch(r,x,v,z,p);return q}}i(r.plugins,function(s){if(s.execCommand&&s.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);u=1;return false}});if(u){return true}if(r.theme&&r.theme.execCommand&&r.theme.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(m.GlobalCommands.execCommand(r,x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}if(r.editorCommands.execCommand(x,v,z)){r.onExecCommand.dispatch(r,x,v,z,p);return true}r.getDoc().execCommand(x,v,z);r.onExecCommand.dispatch(r,x,v,z,p)},queryCommandState:function(u){var q=this,v,r;if(q._isHidden()){return}if(v=q.queryStateCommands[u]){r=v.func.call(v.scope);if(r!==true){return r}}v=q.editorCommands.queryCommandState(u);if(v!==-1){return v}try{return this.getDoc().queryCommandState(u)}catch(p){}},queryCommandValue:function(v){var q=this,u,r;if(q._isHidden()){return}if(u=q.queryValueCommands[v]){r=u.func.call(u.scope);if(r!==true){return r}}u=q.editorCommands.queryCommandValue(v);if(d(u)){return u}try{return this.getDoc().queryCommandValue(v)}catch(p){}},show:function(){var p=this;n.show(p.getContainer());n.hide(p.id);p.load()},hide:function(){var p=this,q=p.getDoc();if(b&&q){q.execCommand("SelectAll")}p.save();n.hide(p.getContainer());n.setStyle(p.id,"display",p.orgDisplay)},isHidden:function(){return !n.isHidden(this.id)},setProgressState:function(p,q,r){this.onSetProgressState.dispatch(this,p,q,r);return p},load:function(s){var p=this,r=p.getElement(),q;if(r){s=s||{};s.load=true;q=p.setContent(d(r.value)?r.value:r.innerHTML,s);s.element=r;if(!s.no_events){p.onLoadContent.dispatch(p,s)}s.element=r=null;return q}},save:function(u){var p=this,s=p.getElement(),q,r;if(!s||!p.initialized){return}u=u||{};u.save=true;if(!u.no_events){p.undoManager.typing=0;p.undoManager.add()}u.element=s;q=u.content=p.getContent(u);if(!u.no_events){p.onSaveContent.dispatch(p,u)}q=u.content;if(!/TEXTAREA|INPUT/i.test(s.nodeName)){s.innerHTML=q;if(r=n.getParent(p.id,"form")){i(r.elements,function(t){if(t.name==p.id){t.value=q;return false}})}}else{s.value=q}u.element=s=null;return q},setContent:function(q,r){var p=this;r=r||{};r.format=r.format||"html";r.set=true;r.content=q;if(!r.no_events){p.onBeforeSetContent.dispatch(p,r)}if(!m.isIE&&(q.length===0||/^\s+$/.test(q))){r.content=p.dom.setHTML(p.getBody(),'<br _mce_bogus="1" />');r.format="raw"}r.content=p.dom.setHTML(p.getBody(),m.trim(r.content));if(r.format!="raw"&&p.settings.cleanup){r.getInner=true;r.content=p.dom.setHTML(p.getBody(),p.serializer.serialize(p.getBody(),r))}if(!r.no_events){p.onSetContent.dispatch(p,r)}return r.content},getContent:function(r){var p=this,q;r=r||{};r.format=r.format||"html";r.get=true;if(!r.no_events){p.onBeforeGetContent.dispatch(p,r)}if(r.format!="raw"&&p.settings.cleanup){r.getInner=true;q=p.serializer.serialize(p.getBody(),r)}else{q=p.getBody().innerHTML}q=q.replace(/^\s*|\s*$/g,"");r.content=q;if(!r.no_events){p.onGetContent.dispatch(p,r)}return r.content},isDirty:function(){var p=this;return m.trim(p.startContent)!=m.trim(p.getContent({format:"raw",no_events:1}))&&!p.isNotDirty},getContainer:function(){var p=this;if(!p.container){p.container=n.get(p.editorContainer||p.id+"_parent")}return p.container},getContentAreaContainer:function(){return this.contentAreaContainer},getElement:function(){return n.get(this.settings.content_element||this.id)},getWin:function(){var p=this,q;if(!p.contentWindow){q=n.get(p.id+"_ifr");if(q){p.contentWindow=q.contentWindow}}return p.contentWindow},getDoc:function(){var q=this,p;if(!q.contentDocument){p=q.getWin();if(p){q.contentDocument=p.document}}return q.contentDocument},getBody:function(){return this.bodyElement||this.getDoc().body},convertURL:function(p,x,v){var q=this,r=q.settings;if(r.urlconverter_callback){return q.execCallback("urlconverter_callback",p,v,true,x)}if(!r.convert_urls||(v&&v.nodeName=="LINK")||p.indexOf("file:")===0){return p}if(r.relative_urls){return q.documentBaseURI.toRelative(p)}p=q.documentBaseURI.toAbsolute(p,r.remove_script_host);return p},addVisual:function(r){var p=this,q=p.settings;r=r||p.getBody();if(!d(p.hasVisual)){p.hasVisual=q.visual}i(p.dom.select("table,a",r),function(t){var s;switch(t.nodeName){case"TABLE":s=p.dom.getAttrib(t,"border");if(!s||s=="0"){if(p.hasVisual){p.dom.addClass(t,q.visual_table_class)}else{p.dom.removeClass(t,q.visual_table_class)}}return;case"A":s=p.dom.getAttrib(t,"name");if(s){if(p.hasVisual){p.dom.addClass(t,"mceItemAnchor")}else{p.dom.removeClass(t,"mceItemAnchor")}}return}});p.onVisualAid.dispatch(p,r,p.hasVisual)},remove:function(){var p=this,q=p.getContainer();p.removed=1;p.hide();p.execCallback("remove_instance_callback",p);p.onRemove.dispatch(p);p.onExecCommand.listeners=[];m.remove(p);n.remove(q)},destroy:function(q){var p=this;if(p.destroyed){return}if(!q){m.removeUnload(p.destroy);tinyMCE.onBeforeUnload.remove(p._beforeUnload);if(p.theme&&p.theme.destroy){p.theme.destroy()}p.controlManager.destroy();p.selection.destroy();p.dom.destroy();if(!p.settings.content_editable){j.clear(p.getWin());j.clear(p.getDoc())}j.clear(p.getBody());j.clear(p.formElement)}if(p.formElement){p.formElement.submit=p.formElement._mceOldSubmit;p.formElement._mceOldSubmit=null}p.contentAreaContainer=p.formElement=p.container=p.settings.content_element=p.bodyElement=p.contentDocument=p.contentWindow=null;if(p.selection){p.selection=p.selection.win=p.selection.dom=p.selection.dom.doc=null}p.destroyed=1},_addEvents:function(){var v=this,u,y=v.settings,x={mouseup:"onMouseUp",mousedown:"onMouseDown",click:"onClick",keyup:"onKeyUp",keydown:"onKeyDown",keypress:"onKeyPress",submit:"onSubmit",reset:"onReset",contextmenu:"onContextMenu",dblclick:"onDblClick",paste:"onPaste"};function r(t,A){var s=t.type;if(v.removed){return}if(v.onEvent.dispatch(v,t,A)!==false){v[x[t.fakeType||t.type]].dispatch(v,t,A)}}i(x,function(t,s){switch(s){case"contextmenu":if(m.isOpera){v.dom.bind(v.getBody(),"mousedown",function(A){if(A.ctrlKey){A.fakeType="contextmenu";r(A)}})}else{v.dom.bind(v.getBody(),s,r)}break;case"paste":v.dom.bind(v.getBody(),s,function(A){r(A)});break;case"submit":case"reset":v.dom.bind(v.getElement().form||n.getParent(v.id,"form"),s,r);break;default:v.dom.bind(y.content_editable?v.getBody():v.getDoc(),s,r)}});v.dom.bind(y.content_editable?v.getBody():(a?v.getDoc():v.getWin()),"focus",function(s){v.focus(true)});if(m.isGecko){v.dom.bind(v.getDoc(),"DOMNodeInserted",function(t){var s;t=t.target;if(t.nodeType===1&&t.nodeName==="IMG"&&(s=t.getAttribute("_mce_src"))){t.src=v.documentBaseURI.toAbsolute(s)}})}if(a){function p(){var B=this,D=B.getDoc(),C=B.settings;if(a&&!C.readonly){if(B._isHidden()){try{if(!C.content_editable){D.designMode="On"}}catch(A){}}try{D.execCommand("styleWithCSS",0,false)}catch(A){if(!B._isHidden()){try{D.execCommand("useCSS",0,true)}catch(A){}}}if(!C.table_inline_editing){try{D.execCommand("enableInlineTableEditing",false,false)}catch(A){}}if(!C.object_resizing){try{D.execCommand("enableObjectResizing",false,false)}catch(A){}}}}v.onBeforeExecCommand.add(p);v.onMouseDown.add(p)}if(m.isWebKit){v.onClick.add(function(s,t){t=t.target;if(t.nodeName=="IMG"||(t.nodeName=="A"&&v.dom.hasClass(t,"mceItemAnchor"))){v.selection.getSel().setBaseAndExtent(t,0,t,1)}})}v.onMouseUp.add(v.nodeChanged);v.onKeyUp.add(function(s,t){var A=t.keyCode;if((A>=33&&A<=36)||(A>=37&&A<=40)||A==13||A==45||A==46||A==8||(m.isMac&&(A==91||A==93))||t.ctrlKey){v.nodeChanged()}});v.onReset.add(function(){v.setContent(v.startContent,{format:"raw"})});if(y.custom_shortcuts){if(y.custom_undo_redo_keyboard_shortcuts){v.addShortcut("ctrl+z",v.getLang("undo_desc"),"Undo");v.addShortcut("ctrl+y",v.getLang("redo_desc"),"Redo")}v.addShortcut("ctrl+b",v.getLang("bold_desc"),"Bold");v.addShortcut("ctrl+i",v.getLang("italic_desc"),"Italic");v.addShortcut("ctrl+u",v.getLang("underline_desc"),"Underline");for(u=1;u<=6;u++){v.addShortcut("ctrl+"+u,"",["FormatBlock",false,"h"+u])}v.addShortcut("ctrl+7","",["FormatBlock",false,"<p>"]);v.addShortcut("ctrl+8","",["FormatBlock",false,"<div>"]);v.addShortcut("ctrl+9","",["FormatBlock",false,"<address>"]);function z(t){var s=null;if(!t.altKey&&!t.ctrlKey&&!t.metaKey){return s}i(v.shortcuts,function(A){if(m.isMac&&A.ctrl!=t.metaKey){return}else{if(!m.isMac&&A.ctrl!=t.ctrlKey){return}}if(A.alt!=t.altKey){return}if(A.shift!=t.shiftKey){return}if(t.keyCode==A.keyCode||(t.charCode&&t.charCode==A.charCode)){s=A;return false}});return s}v.onKeyUp.add(function(s,t){var A=z(t);if(A){return j.cancel(t)}});v.onKeyPress.add(function(s,t){var A=z(t);if(A){return j.cancel(t)}});v.onKeyDown.add(function(s,t){var A=z(t);if(A){A.func.call(A.scope);return j.cancel(t)}})}if(m.isIE){v.dom.bind(v.getDoc(),"controlselect",function(A){var t=v.resizeInfo,s;A=A.target;if(A.nodeName!=="IMG"){return}if(t){v.dom.unbind(t.node,t.ev,t.cb)}if(!v.dom.hasClass(A,"mceItemNoResize")){ev="resizeend";s=v.dom.bind(A,ev,function(C){var B;C=C.target;if(B=v.dom.getStyle(C,"width")){v.dom.setAttrib(C,"width",B.replace(/[^0-9%]+/g,""));v.dom.setStyle(C,"width","")}if(B=v.dom.getStyle(C,"height")){v.dom.setAttrib(C,"height",B.replace(/[^0-9%]+/g,""));v.dom.setStyle(C,"height","")}})}else{ev="resizestart";s=v.dom.bind(A,"resizestart",j.cancel,j)}t=v.resizeInfo={node:A,ev:ev,cb:s}});v.onKeyDown.add(function(s,t){switch(t.keyCode){case 8:if(v.selection.getRng().item){s.dom.remove(v.selection.getRng().item(0));return j.cancel(t)}}})}if(m.isOpera){v.onClick.add(function(s,t){j.prevent(t)})}if(y.custom_undo_redo){function q(){v.undoManager.typing=0;v.undoManager.add()}v.dom.bind(v.getDoc(),"focusout",function(s){if(!v.removed&&v.undoManager.typing){q()}});v.onKeyUp.add(function(s,t){if((t.keyCode>=33&&t.keyCode<=36)||(t.keyCode>=37&&t.keyCode<=40)||t.keyCode==13||t.keyCode==45||t.ctrlKey){q()}});v.onKeyDown.add(function(t,D){var s,C,B;if(b&&D.keyCode==46){s=v.selection.getRng();if(s.parentElement){C=s.parentElement();if(D.ctrlKey){s.moveEnd("word",1);s.select()}v.selection.getSel().clear();if(s.parentElement()==C){B=v.selection.getBookmark();try{C.innerHTML=C.innerHTML}catch(A){}v.selection.moveToBookmark(B)}D.preventDefault();return}}if((D.keyCode>=33&&D.keyCode<=36)||(D.keyCode>=37&&D.keyCode<=40)||D.keyCode==13||D.keyCode==45){if(v.undoManager.typing){q()}return}if(!v.undoManager.typing){v.undoManager.add();v.undoManager.typing=1}});v.onMouseDown.add(function(){if(v.undoManager.typing){q()}})}},_isHidden:function(){var p;if(!a){return 0}p=this.selection.getSel();return(!p||!p.rangeCount||p.rangeCount==0)},_fixNesting:function(q){var r=[],p;q=q.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(t,s,v){var u;if(s==="/"){if(!r.length){return""}if(v!==r[r.length-1].tag){for(p=r.length-1;p>=0;p--){if(r[p].tag===v){r[p].close=1;break}}return""}else{r.pop();if(r.length&&r[r.length-1].close){t=t+"</"+r[r.length-1].tag+">";r.pop()}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(v)){return t}if(/\/>$/.test(t)){return t}r.push({tag:v})}return t});for(p=r.length-1;p>=0;p--){q+="</"+r[p].tag+">"}return q}})})(tinymce);(function(c){var d=c.each,e,a=true,b=false;c.EditorCommands=function(n){var l=n.dom,p=n.selection,j={state:{},exec:{},value:{}},k=n.settings,o;function q(y,x,v){var u;y=y.toLowerCase();if(u=j.exec[y]){u(y,x,v);return a}return b}function m(v){var u;v=v.toLowerCase();if(u=j.state[v]){return u(v)}return -1}function h(v){var u;v=v.toLowerCase();if(u=j.value[v]){return u(v)}return b}function t(u,v){v=v||"exec";d(u,function(y,x){d(x.toLowerCase().split(","),function(z){j[v][z]=y})})}c.extend(this,{execCommand:q,queryCommandState:m,queryCommandValue:h,addCommands:t});function f(x,v,u){if(v===e){v=b}if(u===e){u=null}return n.getDoc().execCommand(x,v,u)}function s(u){return n.formatter.match(u)}function r(u,v){n.formatter.toggle(u,v?{value:v}:e)}function i(u){o=p.getBookmark(u)}function g(){p.moveToBookmark(o)}t({"mceResetDesignMode,mceBeginUndoLevel":function(){},"mceEndUndoLevel,mceAddUndoLevel":function(){n.undoManager.add()},"Cut,Copy,Paste":function(y){var x=n.getDoc(),u;try{f(y)}catch(v){u=a}if(u||!x.queryCommandSupported(y)){if(c.isGecko){n.windowManager.confirm(n.getLang("clipboard_msg"),function(z){if(z){open("http://www.mozilla.org/editor/midasdemo/securityprefs.html","_blank")}})}else{n.windowManager.alert(n.getLang("clipboard_no_support"))}}},unlink:function(u){if(p.isCollapsed()){p.select(p.getNode())}f(u);p.collapse(b)},"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(u){var v=u.substring(7);d("left,center,right,full".split(","),function(x){if(v!=x){n.formatter.remove("align"+x)}});r("align"+v)},"InsertUnorderedList,InsertOrderedList":function(x){var u,v;f(x);u=l.getParent(p.getNode(),"ol,ul");if(u){v=u.parentNode;if(/^(H[1-6]|P|ADDRESS|PRE)$/.test(v.nodeName)){i();l.split(v,u);g()}}},"Bold,Italic,Underline,Strikethrough":function(u){r(u)},"ForeColor,HiliteColor,FontName":function(x,v,u){r(x,u)},FontSize:function(y,x,v){var u,z;if(v>=1&&v<=7){z=c.explode(k.font_size_style_values);u=c.explode(k.font_size_classes);if(u){v=u[v-1]||v}else{v=z[v-1]||v}}r(y,v)},RemoveFormat:function(u){n.formatter.remove(u)},mceBlockQuote:function(u){r("blockquote")},FormatBlock:function(x,v,u){return r(u||"p")},mceCleanup:function(){var u=p.getBookmark();n.setContent(n.getContent({cleanup:a}),{cleanup:a});p.moveToBookmark(u)},mceRemoveNode:function(y,x,v){var u=v||p.getNode();if(u!=n.getBody()){i();n.dom.remove(u,a);g()}},mceSelectNodeDepth:function(y,x,v){var u=0;l.getParent(p.getNode(),function(z){if(z.nodeType==1&&u++==v){p.select(z);return b}},n.getBody())},mceSelectNode:function(x,v,u){p.select(u)},mceInsertContent:function(x,v,u){p.setContent(u)},mceInsertRawHTML:function(x,v,u){p.setContent("tiny_mce_marker");n.setContent(n.getContent().replace(/tiny_mce_marker/g,u))},mceSetContent:function(x,v,u){n.setContent(u)},"Indent,Outdent":function(y){var v,u,x;v=k.indentation;u=/[a-z%]+$/i.exec(v);v=parseInt(v);if(!m("InsertUnorderedList")&&!m("InsertOrderedList")){d(p.getSelectedBlocks(),function(z){if(y=="outdent"){x=Math.max(0,parseInt(z.style.paddingLeft||0)-v);l.setStyle(z,"paddingLeft",x?x+u:"")}else{l.setStyle(z,"paddingLeft",(parseInt(z.style.paddingLeft||0)+v)+u)}})}else{f(y)}},mceRepaint:function(){var v;if(c.isGecko){try{i(a);if(p.getSel()){p.getSel().selectAllChildren(n.getBody())}p.collapse(a);g()}catch(u){}}},mceToggleFormat:function(x,v,u){n.formatter.toggle(u)},InsertHorizontalRule:function(){p.setContent("<hr />")},mceToggleVisualAid:function(){n.hasVisual=!n.hasVisual;n.addVisual()},mceReplaceContent:function(x,v,u){p.setContent(u.replace(/\{\$selection\}/g,p.getContent({format:"text"})))},mceInsertLink:function(y,x,v){var u=l.getParent(p.getNode(),"a");if(c.is(v,"string")){v={href:v}}if(!u){f("CreateLink",b,"javascript:mctmp(0);");d(l.select("a[href=javascript:mctmp(0);]"),function(z){l.setAttribs(z,v)})}else{if(v.href){l.setAttribs(u,v)}else{n.dom.remove(u,a)}}},selectAll:function(){var v=l.getRoot(),u=l.createRng();u.setStart(v,0);u.setEnd(v,v.childNodes.length);n.selection.setRng(u)}});t({"JustifyLeft,JustifyCenter,JustifyRight,JustifyFull":function(u){return s("align"+u.substring(7))},"Bold,Italic,Underline,Strikethrough":function(u){return s(u)},mceBlockQuote:function(){return s("blockquote")},Outdent:function(){var u;if(k.inline_styles){if((u=l.getParent(p.getStart(),l.isBlock))&&parseInt(u.style.paddingLeft)>0){return a}if((u=l.getParent(p.getEnd(),l.isBlock))&&parseInt(u.style.paddingLeft)>0){return a}}return m("InsertUnorderedList")||m("InsertOrderedList")||(!k.inline_styles&&!!l.getParent(p.getNode(),"BLOCKQUOTE"))},"InsertUnorderedList,InsertOrderedList":function(u){return l.getParent(p.getNode(),u=="insertunorderedlist"?"UL":"OL")}},"state");t({"FontSize,FontName":function(x){var v=0,u;if(u=l.getParent(p.getNode(),"span")){if(x=="fontsize"){v=u.style.fontSize}else{v=u.style.fontFamily.replace(/, /g,",").replace(/[\'\"]/g,"").toLowerCase()}}return v}},"value");if(k.custom_undo_redo){t({Undo:function(){n.undoManager.undo()},Redo:function(){n.undoManager.redo()}})}}})(tinymce);(function(b){var a=b.util.Dispatcher;b.UndoManager=function(e){var c,d=0,g=[];function f(){return b.trim(e.getContent({format:"raw",no_events:1}))}return c={typing:0,onAdd:new a(c),onUndo:new a(c),onRedo:new a(c),add:function(l){var h,j=e.settings,k;l=l||{};l.content=f();k=g[d];if(k&&k.content==l.content){if(d>0||g.length==1){return null}}if(j.custom_undo_redo_levels){if(g.length>j.custom_undo_redo_levels){for(h=0;h<g.length-1;h++){g[h]=g[h+1]}g.length--;d=g.length}}l.bookmark=e.selection.getBookmark(2,true);if(d<g.length-1){if(d==0){g=[]}else{g.length=d+1}}g.push(l);d=g.length-1;c.onAdd.dispatch(c,l);e.isNotDirty=0;return l},undo:function(){var j,h;if(c.typing){c.add();c.typing=0}if(d>0){j=g[--d];e.setContent(j.content,{format:"raw"});e.selection.moveToBookmark(j.bookmark);c.onUndo.dispatch(c,j)}return j},redo:function(){var h;if(d<g.length-1){h=g[++d];e.setContent(h.content,{format:"raw"});e.selection.moveToBookmark(h.bookmark);c.onRedo.dispatch(c,h)}return h},clear:function(){g=[];d=c.typing=0},hasUndo:function(){return d>0||c.typing},hasRedo:function(){return d<g.length-1}}}})(tinymce);(function(m){var k=m.dom.Event,c=m.isIE,a=m.isGecko,b=m.isOpera,j=m.each,i=m.extend,d=true,h=false;function l(p){var q,o,n;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(p.nodeName)){if(q){o=p.cloneNode(false);o.appendChild(q);q=o}else{q=n=p.cloneNode(false)}q.removeAttribute("id")}}while(p=p.parentNode);if(q){return{wrapper:q,inner:n}}}function g(o,p){var n=p.ownerDocument.createRange();n.setStart(o.endContainer,o.endOffset);n.setEndAfter(p);return n.cloneContents().textContent.length==0}function f(o){o=o.innerHTML;o=o.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi,"-");o=o.replace(/<[^>]+>/g,"");return o.replace(/[ \u00a0\t\r\n]+/g,"")==""}function e(p,r,n){var o,q;if(f(n)){o=r.getParent(n,"ul,ol");if(!r.getParent(o.parentNode,"ul,ol")){r.split(o,n);q=r.create("p",0,'<br _mce_bogus="1" />');r.replace(q,n);p.select(q,1)}return h}return d}m.create("tinymce.ForceBlocks",{ForceBlocks:function(o){var p=this,q=o.settings,r;p.editor=o;p.dom=o.dom;r=(q.forced_root_block||"p").toLowerCase();q.element=r.toUpperCase();o.onPreInit.add(p.setup,p);p.reOpera=new RegExp("(\\u00a0|&#160;|&nbsp;)</"+r+">","gi");p.rePadd=new RegExp("<p( )([^>]+)><\\/p>|<p( )([^>]+)\\/>|<p( )([^>]+)>\\s+<\\/p>|<p><\\/p>|<p\\/>|<p>\\s+<\\/p>".replace(/p/g,r),"gi");p.reNbsp2BR1=new RegExp("<p( )([^>]+)>[\\s\\u00a0]+<\\/p>|<p>[\\s\\u00a0]+<\\/p>".replace(/p/g,r),"gi");p.reNbsp2BR2=new RegExp("<%p()([^>]+)>(&nbsp;|&#160;)<\\/%p>|<%p>(&nbsp;|&#160;)<\\/%p>".replace(/%p/g,r),"gi");p.reBR2Nbsp=new RegExp("<p( )([^>]+)>\\s*<br \\/>\\s*<\\/p>|<p>\\s*<br \\/>\\s*<\\/p>".replace(/p/g,r),"gi");function n(s,t){if(b){t.content=t.content.replace(p.reOpera,"</"+r+">")}t.content=t.content.replace(p.rePadd,"<"+r+"$1$2$3$4$5$6>\u00a0</"+r+">");if(!c&&!b&&t.set){t.content=t.content.replace(p.reNbsp2BR1,"<"+r+"$1$2><br /></"+r+">");t.content=t.content.replace(p.reNbsp2BR2,"<"+r+"$1$2><br /></"+r+">")}else{t.content=t.content.replace(p.reBR2Nbsp,"<"+r+"$1$2>\u00a0</"+r+">")}}o.onBeforeSetContent.add(n);o.onPostProcess.add(n);if(q.forced_root_block){o.onInit.add(p.forceRoots,p);o.onSetContent.add(p.forceRoots,p);o.onBeforeGetContent.add(p.forceRoots,p)}},setup:function(){var o=this,n=o.editor,q=n.settings,u=n.dom,p=n.selection;if(q.forced_root_block){n.onBeforeExecCommand.add(o.forceRoots,o);n.onKeyUp.add(o.forceRoots,o);n.onPreProcess.add(o.forceRoots,o)}if(q.force_br_newlines){if(c){n.onKeyPress.add(function(s,t){var v;if(t.keyCode==13&&p.getNode().nodeName!="LI"){p.setContent('<br id="__" /> ',{format:"raw"});v=u.get("__");v.removeAttribute("id");p.select(v);p.collapse();return k.cancel(t)}})}}if(q.force_p_newlines){if(!c){n.onKeyPress.add(function(s,t){if(t.keyCode==13&&!t.shiftKey&&!o.insertPara(t)){k.cancel(t)}})}else{m.addUnload(function(){o._previousFormats=0});n.onKeyPress.add(function(s,t){o._previousFormats=0;if(t.keyCode==13&&!t.shiftKey&&s.selection.isCollapsed()&&q.keep_styles){o._previousFormats=l(s.selection.getStart())}});n.onKeyUp.add(function(t,x){if(x.keyCode==13&&!x.shiftKey){var v=t.selection.getStart(),s=o._previousFormats;if(!v.hasChildNodes()){v=u.getParent(v,u.isBlock);if(v){v.innerHTML="";if(o._previousFormats){v.appendChild(s.wrapper);s.inner.innerHTML="\uFEFF"}else{v.innerHTML="\uFEFF"}p.select(v,1);t.getDoc().execCommand("Delete",false,null)}}}})}if(a){n.onKeyDown.add(function(s,t){if((t.keyCode==8||t.keyCode==46)&&!t.shiftKey){o.backspaceDelete(t,t.keyCode==8)}})}}if(m.isWebKit){function r(t){var s=p.getRng(),v,z=u.create("div",null," "),y,x=u.getViewPort(t.getWin()).h;s.insertNode(v=u.create("br"));s.setStartAfter(v);s.setEndAfter(v);p.setRng(s);if(p.getSel().focusNode==v.previousSibling){p.select(u.insertAfter(u.doc.createTextNode("\u00a0"),v));p.collapse(d)}u.insertAfter(z,v);y=u.getPos(z).y;u.remove(z);if(y>x){t.getWin().scrollTo(0,y)}}n.onKeyPress.add(function(s,t){if(t.keyCode==13&&(t.shiftKey||(q.force_br_newlines&&!u.getParent(p.getNode(),"h1,h2,h3,h4,h5,h6,ol,ul")))){r(s);k.cancel(t)}})}n.onPreProcess.add(function(s,t){j(u.select("p,h1,h2,h3,h4,h5,h6,div",t.node),function(v){if(f(v)){j(u.select("span,em,strong,b,i",t.node),function(x){if(!x.hasChildNodes()){x.appendChild(s.getDoc().createTextNode("\u00a0"));return h}})}})});if(c){if(q.element!="P"){n.onKeyPress.add(function(s,t){o.lastElm=p.getNode().nodeName});n.onKeyUp.add(function(t,v){var y,x=p.getNode(),s=t.getBody();if(s.childNodes.length===1&&x.nodeName=="P"){x=u.rename(x,q.element);p.select(x);p.collapse();t.nodeChanged()}else{if(v.keyCode==13&&!v.shiftKey&&o.lastElm!="P"){y=u.getParent(x,"p");if(y){u.rename(y,q.element);t.nodeChanged()}}}})}}},find:function(v,q,r){var p=this.editor,o=p.getDoc().createTreeWalker(v,4,null,h),u=-1;while(v=o.nextNode()){u++;if(q==0&&v==r){return u}if(q==1&&u==r){return v}}return -1},forceRoots:function(x,I){var z=this,x=z.editor,M=x.getBody(),J=x.getDoc(),P=x.selection,A=P.getSel(),B=P.getRng(),N=-2,v,G,o,p,K=-16777215;var L,q,O,F,C,u=M.childNodes,E,D,y;for(E=u.length-1;E>=0;E--){L=u[E];if(L.nodeType===1&&L.getAttribute("_mce_type")){q=null;continue}if(L.nodeType===3||(!z.dom.isBlock(L)&&L.nodeType!==8&&!/^(script|mce:script|style|mce:style)$/i.test(L.nodeName))){if(!q){if(L.nodeType!=3||/[^\s]/g.test(L.nodeValue)){if(N==-2&&B){if(!c){if(B.startContainer.nodeType==1&&(D=B.startContainer.childNodes[B.startOffset])&&D.nodeType==1){y=D.getAttribute("id");D.setAttribute("id","__mce")}else{if(x.dom.getParent(B.startContainer,function(n){return n===M})){G=B.startOffset;o=B.endOffset;N=z.find(M,0,B.startContainer);v=z.find(M,0,B.endContainer)}}}else{if(B.item){p=J.body.createTextRange();p.moveToElementText(B.item(0));B=p}p=J.body.createTextRange();p.moveToElementText(M);p.collapse(1);O=p.move("character",K)*-1;p=B.duplicate();p.collapse(1);F=p.move("character",K)*-1;p=B.duplicate();p.collapse(0);C=(p.move("character",K)*-1)-F;N=F-O;v=C}}q=x.dom.create(x.settings.forced_root_block);L.parentNode.replaceChild(q,L);q.appendChild(L)}}else{if(q.hasChildNodes()){q.insertBefore(L,q.firstChild)}else{q.appendChild(L)}}}else{q=null}}if(N!=-2){if(!c){q=M.getElementsByTagName(x.settings.element)[0];B=J.createRange();if(N!=-1){B.setStart(z.find(M,1,N),G)}else{B.setStart(q,0)}if(v!=-1){B.setEnd(z.find(M,1,v),o)}else{B.setEnd(q,0)}if(A){A.removeAllRanges();A.addRange(B)}}else{try{B=A.createRange();B.moveToElementText(M);B.collapse(1);B.moveStart("character",N);B.moveEnd("character",v);B.select()}catch(H){}}}else{if(!c&&(D=x.dom.get("__mce"))){if(y){D.setAttribute("id",y)}else{D.removeAttribute("id")}B=J.createRange();B.setStartBefore(D);B.setEndBefore(D);P.setRng(B)}}},getParentBlock:function(p){var o=this.dom;return o.getParent(p,o.isBlock)},insertPara:function(S){var G=this,x=G.editor,O=x.dom,T=x.getDoc(),X=x.settings,H=x.selection.getSel(),I=H.getRangeAt(0),W=T.body;var L,M,J,Q,P,u,p,v,A,o,E,V,q,z,K,N=O.getViewPort(x.getWin()),D,F,C;L=T.createRange();L.setStart(H.anchorNode,H.anchorOffset);L.collapse(d);M=T.createRange();M.setStart(H.focusNode,H.focusOffset);M.collapse(d);J=L.compareBoundaryPoints(L.START_TO_END,M)<0;Q=J?H.anchorNode:H.focusNode;P=J?H.anchorOffset:H.focusOffset;u=J?H.focusNode:H.anchorNode;p=J?H.focusOffset:H.anchorOffset;if(Q===u&&/^(TD|TH)$/.test(Q.nodeName)){if(Q.firstChild.nodeName=="BR"){O.remove(Q.firstChild)}if(Q.childNodes.length==0){x.dom.add(Q,X.element,null,"<br />");V=x.dom.add(Q,X.element,null,"<br />")}else{K=Q.innerHTML;Q.innerHTML="";x.dom.add(Q,X.element,null,K);V=x.dom.add(Q,X.element,null,"<br />")}I=T.createRange();I.selectNodeContents(V);I.collapse(1);x.selection.setRng(I);return h}if(Q==W&&u==W&&W.firstChild&&x.dom.isBlock(W.firstChild)){Q=u=Q.firstChild;P=p=0;L=T.createRange();L.setStart(Q,0);M=T.createRange();M.setStart(u,0)}Q=Q.nodeName=="HTML"?T.body:Q;Q=Q.nodeName=="BODY"?Q.firstChild:Q;u=u.nodeName=="HTML"?T.body:u;u=u.nodeName=="BODY"?u.firstChild:u;v=G.getParentBlock(Q);A=G.getParentBlock(u);o=v?v.nodeName:X.element;if(K=G.dom.getParent(v,"li,pre")){if(K.nodeName=="LI"){return e(x.selection,G.dom,K)}return d}if(v&&(v.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(O.getStyle(v,"position",1)))){o=X.element;v=null}if(A&&(A.nodeName=="CAPTION"||/absolute|relative|fixed/gi.test(O.getStyle(v,"position",1)))){o=X.element;A=null}if(/(TD|TABLE|TH|CAPTION)/.test(o)||(v&&o=="DIV"&&/left|right/gi.test(O.getStyle(v,"float",1)))){o=X.element;v=A=null}E=(v&&v.nodeName==o)?v.cloneNode(0):x.dom.create(o);V=(A&&A.nodeName==o)?A.cloneNode(0):x.dom.create(o);V.removeAttribute("id");if(/^(H[1-6])$/.test(o)&&g(I,v)){V=x.dom.create(X.element)}K=q=Q;do{if(K==W||K.nodeType==9||G.dom.isBlock(K)||/(TD|TABLE|TH|CAPTION)/.test(K.nodeName)){break}q=K}while((K=K.previousSibling?K.previousSibling:K.parentNode));K=z=u;do{if(K==W||K.nodeType==9||G.dom.isBlock(K)||/(TD|TABLE|TH|CAPTION)/.test(K.nodeName)){break}z=K}while((K=K.nextSibling?K.nextSibling:K.parentNode));if(q.nodeName==o){L.setStart(q,0)}else{L.setStartBefore(q)}L.setEnd(Q,P);E.appendChild(L.cloneContents()||T.createTextNode(""));try{M.setEndAfter(z)}catch(R){}M.setStart(u,p);V.appendChild(M.cloneContents()||T.createTextNode(""));I=T.createRange();if(!q.previousSibling&&q.parentNode.nodeName==o){I.setStartBefore(q.parentNode)}else{if(L.startContainer.nodeName==o&&L.startOffset==0){I.setStartBefore(L.startContainer)}else{I.setStart(L.startContainer,L.startOffset)}}if(!z.nextSibling&&z.parentNode.nodeName==o){I.setEndAfter(z.parentNode)}else{I.setEnd(M.endContainer,M.endOffset)}I.deleteContents();if(b){x.getWin().scrollTo(0,N.y)}if(E.firstChild&&E.firstChild.nodeName==o){E.innerHTML=E.firstChild.innerHTML}if(V.firstChild&&V.firstChild.nodeName==o){V.innerHTML=V.firstChild.innerHTML}if(f(E)){E.innerHTML="<br />"}function U(y,s){var r=[],Z,Y,t;y.innerHTML="";if(X.keep_styles){Y=s;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(Y.nodeName)){Z=Y.cloneNode(h);O.setAttrib(Z,"id","");r.push(Z)}}while(Y=Y.parentNode)}if(r.length>0){for(t=r.length-1,Z=y;t>=0;t--){Z=Z.appendChild(r[t])}r[0].innerHTML=b?"&nbsp;":"<br />";return r[0]}else{y.innerHTML=b?"&nbsp;":"<br />"}}if(f(V)){C=U(V,u)}if(b&&parseFloat(opera.version())<9.5){I.insertNode(E);I.insertNode(V)}else{I.insertNode(V);I.insertNode(E)}V.normalize();E.normalize();function B(r){return T.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,h).nextNode()||r}I=T.createRange();I.selectNodeContents(a?B(C||V):C||V);I.collapse(1);H.removeAllRanges();H.addRange(I);D=x.dom.getPos(V).y;F=V.clientHeight;if(D<N.y||D+F>N.y+N.h){x.getWin().scrollTo(0,D<N.y?D:D-N.h+25)}return h},backspaceDelete:function(v,C){var D=this,u=D.editor,z=u.getBody(),s=u.dom,q,x=u.selection,p=x.getRng(),y=p.startContainer,q,A,B,o;if(!C&&p.collapsed&&y.nodeType==1&&p.startOffset==y.childNodes.length){o=new m.dom.TreeWalker(y.lastChild,y);for(q=y.lastChild;q;q=o.prev()){if(q.nodeType==3){p.setStart(q,q.nodeValue.length);p.collapse(true);x.setRng(p);return}}}if(y&&u.dom.isBlock(y)&&!/^(TD|TH)$/.test(y.nodeName)&&C){if(y.childNodes.length==0||(y.childNodes.length==1&&y.firstChild.nodeName=="BR")){q=y;while((q=q.previousSibling)&&!u.dom.isBlock(q)){}if(q){if(y!=z.firstChild){A=u.dom.doc.createTreeWalker(q,NodeFilter.SHOW_TEXT,null,h);while(B=A.nextNode()){q=B}p=u.getDoc().createRange();p.setStart(q,q.nodeValue?q.nodeValue.length:0);p.setEnd(q,q.nodeValue?q.nodeValue.length:0);x.setRng(p);u.dom.remove(y)}return k.cancel(v)}}}}})})(tinymce);(function(c){var b=c.DOM,a=c.dom.Event,d=c.each,e=c.extend;c.create("tinymce.ControlManager",{ControlManager:function(f,j){var h=this,g;j=j||{};h.editor=f;h.controls={};h.onAdd=new c.util.Dispatcher(h);h.onPostRender=new c.util.Dispatcher(h);h.prefix=j.prefix||f.id+"_";h._cls={};h.onPostRender.add(function(){d(h.controls,function(i){i.postRender()})})},get:function(f){return this.controls[this.prefix+f]||this.controls[f]},setActive:function(h,f){var g=null;if(g=this.get(h)){g.setActive(f)}return g},setDisabled:function(h,f){var g=null;if(g=this.get(h)){g.setDisabled(f)}return g},add:function(g){var f=this;if(g){f.controls[g.id]=g;f.onAdd.dispatch(g,f)}return g},createControl:function(i){var h,g=this,f=g.editor;d(f.plugins,function(j){if(j.createControl){h=j.createControl(i,g);if(h){return false}}});switch(i){case"|":case"separator":return g.createSeparator()}if(!h&&f.buttons&&(h=f.buttons[i])){return g.createButton(i,h)}return g.add(h)},createDropMenu:function(f,n,h){var m=this,i=m.editor,j,g,k,l;n=e({"class":"mceDropDown",constrain:i.settings.constrain_menus},n);n["class"]=n["class"]+" "+i.getParam("skin")+"Skin";if(k=i.getParam("skin_variant")){n["class"]+=" "+i.getParam("skin")+"Skin"+k.substring(0,1).toUpperCase()+k.substring(1)}f=m.prefix+f;l=h||m._cls.dropmenu||c.ui.DropMenu;j=m.controls[f]=new l(f,n);j.onAddItem.add(function(r,q){var p=q.settings;p.title=i.getLang(p.title,p.title);if(!p.onclick){p.onclick=function(o){if(p.cmd){i.execCommand(p.cmd,p.ui||false,p.value)}}}});i.onRemove.add(function(){j.destroy()});if(c.isIE){j.onShowMenu.add(function(){i.focus();g=i.selection.getBookmark(1)});j.onHideMenu.add(function(){if(g){i.selection.moveToBookmark(g);g=0}})}return m.add(j)},createListBox:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;if(g.settings.use_native_selects){k=new c.ui.NativeListBox(m,i)}else{f=l||h._cls.listbox||c.ui.ListBox;k=new f(m,i)}h.controls[m]=k;if(c.isWebKit){k.onPostRender.add(function(p,o){a.add(o,"mousedown",function(){g.bookmark=g.selection.getBookmark(1)});a.add(o,"focus",function(){g.selection.moveToBookmark(g.bookmark);g.bookmark=null})})}if(k.hideMenu){g.onMouseDown.add(k.hideMenu,k)}return h.add(k)},createButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.label=g.translate(i.label);i.scope=i.scope||g;if(!i.onclick&&!i.menu_button){i.onclick=function(){g.execCommand(i.cmd,i.ui||false,i.value)}}i=e({title:i.title,"class":"mce_"+m,unavailable_prefix:g.getLang("unavailable",""),scope:i.scope,control_manager:h},i);m=h.prefix+m;if(i.menu_button){f=l||h._cls.menubutton||c.ui.MenuButton;k=new f(m,i);g.onMouseDown.add(k.hideMenu,k)}else{f=h._cls.button||c.ui.Button;k=new f(m,i)}return h.add(k)},createMenuButton:function(h,f,g){f=f||{};f.menu_button=1;return this.createButton(h,f,g)},createSplitButton:function(m,i,l){var h=this,g=h.editor,j,k,f;if(h.get(m)){return null}i.title=g.translate(i.title);i.scope=i.scope||g;if(!i.onclick){i.onclick=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}if(!i.onselect){i.onselect=function(n){g.execCommand(i.cmd,i.ui||false,n||i.value)}}i=e({title:i.title,"class":"mce_"+m,scope:i.scope,control_manager:h},i);m=h.prefix+m;f=l||h._cls.splitbutton||c.ui.SplitButton;k=h.add(new f(m,i));g.onMouseDown.add(k.hideMenu,k);return k},createColorSplitButton:function(f,n,h){var l=this,j=l.editor,i,k,m,g;if(l.get(f)){return null}n.title=j.translate(n.title);n.scope=n.scope||j;if(!n.onclick){n.onclick=function(o){if(c.isIE){g=j.selection.getBookmark(1)}j.execCommand(n.cmd,n.ui||false,o||n.value)}}if(!n.onselect){n.onselect=function(o){j.execCommand(n.cmd,n.ui||false,o||n.value)}}n=e({title:n.title,"class":"mce_"+f,menu_class:j.getParam("skin")+"Skin",scope:n.scope,more_colors_title:j.getLang("more_colors")},n);f=l.prefix+f;m=h||l._cls.colorsplitbutton||c.ui.ColorSplitButton;k=new m(f,n);j.onMouseDown.add(k.hideMenu,k);j.onRemove.add(function(){k.destroy()});if(c.isIE){k.onShowMenu.add(function(){j.focus();g=j.selection.getBookmark(1)});k.onHideMenu.add(function(){if(g){j.selection.moveToBookmark(g);g=0}})}return l.add(k)},createToolbar:function(k,h,j){var i,g=this,f;k=g.prefix+k;f=j||g._cls.toolbar||c.ui.Toolbar;i=new f(k,h);if(g.get(k)){return null}return g.add(i)},createSeparator:function(g){var f=g||this._cls.separator||c.ui.Separator;return new f()},setControlType:function(g,f){return this._cls[g.toLowerCase()]=f},destroy:function(){d(this.controls,function(f){f.destroy()});this.controls=null}})})(tinymce);(function(d){var a=d.util.Dispatcher,e=d.each,c=d.isIE,b=d.isOpera;d.create("tinymce.WindowManager",{WindowManager:function(f){var g=this;g.editor=f;g.onOpen=new a(g);g.onClose=new a(g);g.params={};g.features={}},open:function(z,h){var v=this,k="",n,m,i=v.editor.settings.dialog_type=="modal",q,o,j,g=d.DOM.getViewPort(),r;z=z||{};h=h||{};o=b?g.w:screen.width;j=b?g.h:screen.height;z.name=z.name||"mc_"+new Date().getTime();z.width=parseInt(z.width||320);z.height=parseInt(z.height||240);z.resizable=true;z.left=z.left||parseInt(o/2)-(z.width/2);z.top=z.top||parseInt(j/2)-(z.height/2);h.inline=false;h.mce_width=z.width;h.mce_height=z.height;h.mce_auto_focus=z.auto_focus;if(i){if(c){z.center=true;z.help=false;z.dialogWidth=z.width+"px";z.dialogHeight=z.height+"px";z.scroll=z.scrollbars||false}}e(z,function(p,f){if(d.is(p,"boolean")){p=p?"yes":"no"}if(!/^(name|url)$/.test(f)){if(c&&i){k+=(k?";":"")+f+":"+p}else{k+=(k?",":"")+f+"="+p}}});v.features=z;v.params=h;v.onOpen.dispatch(v,z,h);r=z.url||z.file;r=d._addVer(r);try{if(c&&i){q=1;window.showModalDialog(r,window,k)}else{q=window.open(r,z.name,k)}}catch(l){}if(!q){alert(v.editor.getLang("popup_blocked"))}},close:function(f){f.close();this.onClose.dispatch(this)},createInstance:function(i,h,g,m,l,k){var j=d.resolve(i);return new j(h,g,m,l,k)},confirm:function(h,f,i,g){g=g||window;f.call(i||this,g.confirm(this._decode(this.editor.getLang(h,h))))},alert:function(h,f,j,g){var i=this;g=g||window;g.alert(i._decode(i.editor.getLang(h,h)));if(f){f.call(j||i)}},resizeBy:function(f,g,h){h.resizeBy(f,g)},_decode:function(f){return d.DOM.decode(f).replace(/\\n/g,"\n")}})}(tinymce));(function(a){function b(){var d={},c={},e={};function f(j,i,h,g){if(typeof(i)=="string"){i=[i]}a.each(i,function(k){j[k.toLowerCase()]={func:h,scope:g}})}a.extend(this,{add:function(i,h,g){f(d,i,h,g)},addQueryStateHandler:function(i,h,g){f(c,i,h,g)},addQueryValueHandler:function(i,h,g){f(e,i,h,g)},execCommand:function(h,k,j,i,g){if(k=d[k.toLowerCase()]){if(k.func.call(h||k.scope,j,i,g)!==false){return true}}},queryCommandValue:function(){if(cmd=e[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}},queryCommandState:function(){if(cmd=c[cmd.toLowerCase()]){return cmd.func.call(scope||cmd.scope,ui,value,args)}}})}a.GlobalCommands=new b()})(tinymce);(function(a){a.Formatter=function(T){var K={},M=a.each,c=T.dom,p=T.selection,s=a.dom.TreeWalker,I=new a.dom.RangeUtils(c),d=T.schema.isValid,E=c.isBlock,k=T.settings.forced_root_block,r=c.nodeIndex,D="\uFEFF",e=/^(src|href|style)$/,Q=false,A=true,o,N={apply:[],remove:[]};function y(U){return U instanceof Array}function l(V,U){return c.getParents(V,U,c.getRoot())}function b(U){return U.nodeType===1&&(U.face==="mceinline"||U.style.fontFamily==="mceinline")}function P(U){return U?K[U]:K}function j(U,V){if(U){if(typeof(U)!=="string"){M(U,function(X,W){j(W,X)})}else{V=V.length?V:[V];M(V,function(W){if(W.deep===o){W.deep=!W.selector}if(W.split===o){W.split=!W.selector||W.inline}if(W.remove===o&&W.selector&&!W.inline){W.remove="none"}if(W.selector&&W.inline){W.mixed=true;W.block_expand=true}if(typeof(W.classes)==="string"){W.classes=W.classes.split(/\s+/)}});K[U]=V}}}function R(W,ac,Y){var Z=P(W),ad=Z[0],ab,V,aa;function X(ag){var af=ag.startContainer,aj=ag.startOffset,ai,ah;if(af.nodeType==1||af.nodeValue===""){af=af.nodeType==1?af.childNodes[aj]:af;if(af){ai=new s(af,af.parentNode);for(ah=ai.current();ah;ah=ai.next()){if(ah.nodeType==3&&!f(ah)){ag.setStart(ah,0);break}}}}return ag}function U(ag,af){af=af||ad;if(ag){M(af.styles,function(ai,ah){c.setStyle(ag,ah,q(ai,ac))});M(af.attributes,function(ai,ah){c.setAttrib(ag,ah,q(ai,ac))});M(af.classes,function(ah){ah=q(ah,ac);if(!c.hasClass(ag,ah)){c.addClass(ag,ah)}})}}function ae(ag){var af=[],ai,ah;ai=ad.inline||ad.block;ah=c.create(ai);U(ah);I.walk(ag,function(aj){var ak;function al(am){var ap=am.nodeName.toLowerCase(),ao=am.parentNode.nodeName.toLowerCase(),an;if(g(ap,"br")){ak=0;if(ad.block){c.remove(am)}return}if(ad.wrapper&&v(am,W,ac)){ak=0;return}if(ad.block&&!ad.wrapper&&F(ap)){am=c.rename(am,ai);U(am);af.push(am);ak=0;return}if(ad.selector){M(Z,function(aq){if(c.is(am,aq.selector)&&!b(am)){U(am,aq);an=true}});if(!ad.inline||an){ak=0;return}}if(d(ai,ap)&&d(ao,ai)){if(!ak){ak=ah.cloneNode(Q);am.parentNode.insertBefore(ak,am);af.push(ak)}ak.appendChild(am)}else{ak=0;M(a.grep(am.childNodes),al);ak=0}}M(aj,al)});M(af,function(al){var aj;function am(ao){var an=0;M(ao.childNodes,function(ap){if(!f(ap)&&!G(ap)){an++}});return an}function ak(an){var ap,ao;M(an.childNodes,function(aq){if(aq.nodeType==1&&!G(aq)&&!b(aq)){ap=aq;return Q}});if(ap&&h(ap,ad)){ao=ap.cloneNode(Q);U(ao);c.replace(ao,an,A);c.remove(ap,1)}return ao||an}aj=am(al);if(aj===0){c.remove(al,1);return}if(ad.inline||ad.wrapper){if(!ad.exact&&aj===1){al=ak(al)}M(Z,function(an){M(c.select(an.inline,al),function(ao){S(an,ac,ao,an.exact?ao:null)})});if(v(al.parentNode,W,ac)){c.remove(al,1);al=0;return A}if(ad.merge_with_parents){c.getParent(al.parentNode,function(an){if(v(an,W,ac)){c.remove(al,1);al=0;return A}})}if(al){al=t(B(al),al);al=t(al,B(al,A))}}})}if(ad){if(Y){V=c.createRng();V.setStartBefore(Y);V.setEndAfter(Y);ae(n(V,Z))}else{if(!p.isCollapsed()||!ad.inline){ab=p.getBookmark();ae(n(p.getRng(A),Z));p.moveToBookmark(ab);p.setRng(X(p.getRng(A)));T.nodeChanged()}else{O("apply",W,ac)}}}}function z(W,af,Z){var aa=P(W),ah=aa[0],ae,ad,V;function Y(ak){var aj=ak.startContainer,ap=ak.startOffset,ao,an,al,am;if(aj.nodeType==3&&ap>=aj.nodeValue.length-1){aj=aj.parentNode;ap=r(aj)+1}if(aj.nodeType==1){al=aj.childNodes;aj=al[Math.min(ap,al.length-1)];ao=new s(aj);if(ap>al.length-1){ao.next()}for(an=ao.current();an;an=ao.next()){if(an.nodeType==3&&!f(an)){am=c.create("a",null,D);an.parentNode.insertBefore(am,an);ak.setStart(an,0);p.setRng(ak);c.remove(am);return}}}}function X(am){var al,ak,aj;al=a.grep(am.childNodes);for(ak=0,aj=aa.length;ak<aj;ak++){if(S(aa[ak],af,am,am)){break}}if(ah.deep){for(ak=0,aj=al.length;ak<aj;ak++){X(al[ak])}}}function ab(aj){var ak;M(l(aj.parentNode).reverse(),function(al){var am;if(!ak&&al.id!="_start"&&al.id!="_end"){am=v(al,W,af);if(am&&am.split!==false){ak=al}}});return ak}function U(am,aj,ao,ar){var at,aq,ap,al,an,ak;if(am){ak=am.parentNode;for(at=aj.parentNode;at&&at!=ak;at=at.parentNode){aq=at.cloneNode(Q);for(an=0;an<aa.length;an++){if(S(aa[an],af,aq,aq)){aq=0;break}}if(aq){if(ap){aq.appendChild(ap)}if(!al){al=aq}ap=aq}}if(ar&&(!ah.mixed||!E(am))){aj=c.split(am,aj)}if(ap){ao.parentNode.insertBefore(ap,ao);al.appendChild(ao)}}return aj}function ag(aj){return U(ab(aj),aj,aj,true)}function ac(al){var ak=c.get(al?"_start":"_end"),aj=ak[al?"firstChild":"lastChild"];if(G(aj)){aj=aj[al?"firstChild":"lastChild"]}c.remove(ak,true);return aj}function ai(aj){var ak,al;aj=n(aj,aa,A);if(ah.split){ak=H(aj,A);al=H(aj);if(ak!=al){ak=L(ak,"span",{id:"_start",_mce_type:"bookmark"});al=L(al,"span",{id:"_end",_mce_type:"bookmark"});ag(ak);ag(al);ak=ac(A);al=ac()}else{ak=al=ag(ak)}aj.startContainer=ak.parentNode;aj.startOffset=r(ak);aj.endContainer=al.parentNode;aj.endOffset=r(al)+1}I.walk(aj,function(am){M(am,function(an){X(an)})})}if(Z){V=c.createRng();V.setStartBefore(Z);V.setEndAfter(Z);ai(V);return}if(!p.isCollapsed()||!ah.inline){ae=p.getBookmark();ai(p.getRng(A));p.moveToBookmark(ae);if(i(W,af,p.getStart())){Y(p.getRng(true))}T.nodeChanged()}else{O("remove",W,af)}}function C(U,W,V){if(i(U,W,V)){z(U,W,V)}else{R(U,W,V)}}function v(V,U,aa,Y){var W=P(U),ab,Z,X;function ac(ag,ai,aj){var af,ah,ad=ai[aj],ae;if(ad){if(ad.length===o){for(af in ad){if(ad.hasOwnProperty(af)){if(aj==="attributes"){ah=c.getAttrib(ag,af)}else{ah=J(ag,af)}if(Y&&!ah&&!ai.exact){return}if((!Y||ai.exact)&&!g(ah,q(ad[af],aa))){return}}}}else{for(ae=0;ae<ad.length;ae++){if(aj==="attributes"?c.getAttrib(ag,ad[ae]):J(ag,ad[ae])){return ai}}}}return ai}if(W&&V){for(Z=0;Z<W.length;Z++){ab=W[Z];if(h(V,ab)&&ac(V,ab,"attributes")&&ac(V,ab,"styles")){if(X=ab.classes){for(Z=0;Z<X.length;Z++){if(!c.hasClass(V,X[Z])){return}}}return ab}}}}function i(W,Z,Y){var V,X;function U(aa){aa=c.getParent(aa,function(ab){return !!v(ab,W,Z,true)});return v(aa,W,Z)}if(Y){return U(Y)}if(p.isCollapsed()){for(X=N.apply.length-1;X>=0;X--){if(N.apply[X].name==W){return true}}for(X=N.remove.length-1;X>=0;X--){if(N.remove[X].name==W){return false}}return U(p.getNode())}Y=p.getNode();if(U(Y)){return A}V=p.getStart();if(V!=Y){if(U(V)){return A}}return Q}function u(ab,aa){var Y,Z=[],X={},W,V,U;if(p.isCollapsed()){for(V=0;V<ab.length;V++){for(W=N.remove.length-1;W>=0;W--){U=ab[V];if(N.remove[W].name==U){X[U]=true;break}}}for(W=N.apply.length-1;W>=0;W--){for(V=0;V<ab.length;V++){U=ab[V];if(!X[U]&&N.apply[W].name==U){X[U]=true;Z.push(U)}}}}Y=p.getStart();c.getParent(Y,function(ae){var ad,ac;for(ad=0;ad<ab.length;ad++){ac=ab[ad];if(!X[ac]&&v(ae,ac,aa)){X[ac]=true;Z.push(ac)}}});return Z}function x(Y){var aa=P(Y),X,W,Z,V,U;if(aa){X=p.getStart();W=l(X);for(V=aa.length-1;V>=0;V--){U=aa[V].selector;if(!U){return A}for(Z=W.length-1;Z>=0;Z--){if(c.is(W[Z],U)){return A}}}}return Q}a.extend(this,{get:P,register:j,apply:R,remove:z,toggle:C,match:i,matchAll:u,matchNode:v,canApply:x});function h(U,V){if(g(U,V.inline)){return A}if(g(U,V.block)){return A}if(V.selector){return c.is(U,V.selector)}}function g(V,U){V=V||"";U=U||"";V=""+(V.nodeName||V);U=""+(U.nodeName||U);return V.toLowerCase()==U.toLowerCase()}function J(V,U){var W=c.getStyle(V,U);if(U=="color"||U=="backgroundColor"){W=c.toHex(W)}if(U=="fontWeight"&&W==700){W="bold"}return""+W}function q(U,V){if(typeof(U)!="string"){U=U(V)}else{if(V){U=U.replace(/%(\w+)/g,function(X,W){return V[W]||X})}}return U}function f(U){return U&&U.nodeType===3&&/^([\s\r\n]+|)$/.test(U.nodeValue)}function L(W,V,U){var X=c.create(V,U);W.parentNode.insertBefore(X,W);X.appendChild(W);return X}function n(U,ac,X){var W=U.startContainer,Z=U.startOffset,af=U.endContainer,aa=U.endOffset,ae,ab;function ad(ai,aj,ag,ah){var ak,al;ah=ah||c.getRoot();for(;;){ak=ai.parentNode;if(ak==ah||(!ac[0].block_expand&&E(ak))){return ai}for(ae=ak[aj];ae&&ae!=ai;ae=ae[ag]){if(ae.nodeType==1&&!G(ae)){return ai}if(ae.nodeType==3&&!f(ae)){return ai}}ai=ai.parentNode}return ai}if(W.nodeType==1&&W.hasChildNodes()){ab=W.childNodes.length-1;W=W.childNodes[Z>ab?ab:Z];if(W.nodeType==3){Z=0}}if(af.nodeType==1&&af.hasChildNodes()){ab=af.childNodes.length-1;af=af.childNodes[aa>ab?ab:aa-1];if(af.nodeType==3){aa=af.nodeValue.length}}if(G(W.parentNode)){W=W.parentNode}if(G(W)){W=W.nextSibling||W}if(G(af.parentNode)){af=af.parentNode}if(G(af)){af=af.previousSibling||af}if(ac[0].inline||ac[0].block_expand){W=ad(W,"firstChild","nextSibling");af=ad(af,"lastChild","previousSibling")}if(ac[0].selector&&ac[0].expand!==Q&&!ac[0].inline){function Y(ah,ag){var ai,aj,ak;if(ah.nodeType==3&&ah.nodeValue.length==0&&ah[ag]){ah=ah[ag]}ai=l(ah);for(aj=0;aj<ai.length;aj++){for(ak=0;ak<ac.length;ak++){if(c.is(ai[aj],ac[ak].selector)){return ai[aj]}}}return ah}W=Y(W,"previousSibling");af=Y(af,"nextSibling")}if(ac[0].block||ac[0].selector){function V(ah,ag,aj){var ai;if(!ac[0].wrapper){ai=c.getParent(ah,ac[0].block)}if(!ai){ai=c.getParent(ah.nodeType==3?ah.parentNode:ah,E)}if(ai&&ac[0].wrapper){ai=l(ai,"ul,ol").reverse()[0]||ai}if(!ai){ai=ah;while(ai[ag]&&!E(ai[ag])){ai=ai[ag];if(g(ai,"br")){break}}}return ai||ah}W=V(W,"previousSibling");af=V(af,"nextSibling");if(ac[0].block){if(!E(W)){W=ad(W,"firstChild","nextSibling")}if(!E(af)){af=ad(af,"lastChild","previousSibling")}}}if(W.nodeType==1){Z=r(W);W=W.parentNode}if(af.nodeType==1){aa=r(af)+1;af=af.parentNode}return{startContainer:W,startOffset:Z,endContainer:af,endOffset:aa}}function S(aa,Z,X,U){var W,V,Y;if(!h(X,aa)){return Q}if(aa.remove!="all"){M(aa.styles,function(ac,ab){ac=q(ac,Z);if(typeof(ab)==="number"){ab=ac;U=0}if(!U||g(J(U,ab),ac)){c.setStyle(X,ab,"")}Y=1});if(Y&&c.getAttrib(X,"style")==""){X.removeAttribute("style");X.removeAttribute("_mce_style")}M(aa.attributes,function(ad,ab){var ac;ad=q(ad,Z);if(typeof(ab)==="number"){ab=ad;U=0}if(!U||g(c.getAttrib(U,ab),ad)){if(ab=="class"){ad=c.getAttrib(X,ab);if(ad){ac="";M(ad.split(/\s+/),function(ae){if(/mce\w+/.test(ae)){ac+=(ac?" ":"")+ae}});if(ac){c.setAttrib(X,ab,ac);return}}}if(ab=="class"){X.removeAttribute("className")}if(e.test(ab)){X.removeAttribute("_mce_"+ab)}X.removeAttribute(ab)}});M(aa.classes,function(ab){ab=q(ab,Z);if(!U||c.hasClass(U,ab)){c.removeClass(X,ab)}});V=c.getAttribs(X);for(W=0;W<V.length;W++){if(V[W].nodeName.indexOf("_")!==0){return Q}}}if(aa.remove!="none"){m(X,aa);return A}}function m(W,X){var U=W.parentNode,V;if(X.block){if(!k){function Y(aa,Z,ab){aa=B(aa,Z,ab);return !aa||(aa.nodeName=="BR"||E(aa))}if(E(W)&&!E(U)){if(!Y(W,Q)&&!Y(W.firstChild,A,1)){W.insertBefore(c.create("br"),W.firstChild)}if(!Y(W,A)&&!Y(W.lastChild,Q,1)){W.appendChild(c.create("br"))}}}else{if(U==c.getRoot()){if(!X.list_block||!g(W,X.list_block)){M(a.grep(W.childNodes),function(Z){if(d(k,Z.nodeName.toLowerCase())){if(!V){V=L(Z,k)}else{V.appendChild(Z)}}else{V=0}})}}}}if(X.selector&&X.inline&&!g(X.inline,W)){return}c.remove(W,1)}function B(V,U,W){if(V){U=U?"nextSibling":"previousSibling";for(V=W?V:V[U];V;V=V[U]){if(V.nodeType==1||!f(V)){return V}}}}function G(U){return U&&U.nodeType==1&&U.getAttribute("_mce_type")=="bookmark"}function t(Y,X){var U,W,V;function aa(ad,ac){if(ad.nodeName!=ac.nodeName){return Q}function ab(af){var ag={};M(c.getAttribs(af),function(ah){var ai=ah.nodeName.toLowerCase();if(ai.indexOf("_")!==0&&ai!=="style"){ag[ai]=c.getAttrib(af,ai)}});return ag}function ae(ai,ah){var ag,af;for(af in ai){if(ai.hasOwnProperty(af)){ag=ah[af];if(ag===o){return Q}if(ai[af]!=ag){return Q}delete ah[af]}}for(af in ah){if(ah.hasOwnProperty(af)){return Q}}return A}if(!ae(ab(ad),ab(ac))){return Q}if(!ae(c.parseStyle(c.getAttrib(ad,"style")),c.parseStyle(c.getAttrib(ac,"style")))){return Q}return A}if(Y&&X){function Z(ac,ab){for(W=ac;W;W=W[ab]){if(W.nodeType==3&&!f(W)){return ac}if(W.nodeType==1&&!G(W)){return W}}return ac}Y=Z(Y,"previousSibling");X=Z(X,"nextSibling");if(aa(Y,X)){for(W=Y.nextSibling;W&&W!=X;){V=W;W=W.nextSibling;Y.appendChild(V)}c.remove(X);M(a.grep(X.childNodes),function(ab){Y.appendChild(ab)});return Y}}return X}function F(U){return/^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(U)}function H(V,Y){var U,X,W;U=V[Y?"startContainer":"endContainer"];X=V[Y?"startOffset":"endOffset"];if(U.nodeType==1){W=U.childNodes.length-1;if(!Y&&X){X--}U=U.childNodes[X>W?W:X]}return U}function O(Z,V,Y){var W,U=N[Z],aa=N[Z=="apply"?"remove":"apply"];function ab(){return N.apply.length||N.remove.length}function X(){N.apply=[];N.remove=[]}function ac(ad){M(N.apply.reverse(),function(ae){R(ae.name,ae.vars,ad)});M(N.remove.reverse(),function(ae){z(ae.name,ae.vars,ad)});c.remove(ad,1);X()}for(W=U.length-1;W>=0;W--){if(U[W].name==V){return}}U.push({name:V,vars:Y});for(W=aa.length-1;W>=0;W--){if(aa[W].name==V){aa.splice(W,1)}}if(ab()){T.getDoc().execCommand("FontName",false,"mceinline");N.lastRng=p.getRng();M(c.select("font,span"),function(ae){var ad;if(b(ae)){ad=p.getBookmark();ac(ae);p.moveToBookmark(ad);T.nodeChanged()}});if(!N.isListening&&ab()){N.isListening=true;M("onKeyDown,onKeyUp,onKeyPress,onMouseUp".split(","),function(ad){T[ad].addToTop(function(ae,af){if(ab()&&!a.dom.RangeUtils.compareRanges(N.lastRng,p.getRng())){M(c.select("font,span"),function(ah){var ai,ag;if(b(ah)){ai=ah.firstChild;if(ai){ac(ah);ag=c.createRng();ag.setStart(ai,ai.nodeValue.length);ag.setEnd(ai,ai.nodeValue.length);p.setRng(ag);ae.nodeChanged()}else{c.remove(ah)}}});if(af.type=="keyup"||af.type=="mouseup"){X()}}})})}}}}})(tinymce);tinymce.onAddEditor.add(function(e,a){var d,h,g,c=a.settings;if(c.inline_styles){h=e.explode(c.font_size_style_values);function b(j,i){g.replace(g.create("span",{style:i}),j,1)}d={font:function(j,i){b(i,{backgroundColor:i.style.backgroundColor,color:i.color,fontFamily:i.face,fontSize:h[parseInt(i.size)-1]})},u:function(j,i){b(i,{textDecoration:"underline"})},strike:function(j,i){b(i,{textDecoration:"line-through"})}};function f(i,j){g=i.dom;if(c.convert_fonts_to_spans){e.each(g.select("font,u,strike",j.node),function(k){d[k.nodeName.toLowerCase()](a.dom,k)})}}a.onPreProcess.add(f);a.onInit.add(function(){a.selection.onSetContent.add(f)})}});
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/tiny_mce_popup.js b/plugins/TinyMCE/js/tiny_mce_popup.js
new file mode 100644 (file)
index 0000000..3ef3acb
--- /dev/null
@@ -0,0 +1,5 @@
+
+// Uncomment and change this document.domain value if you are loading the script cross subdomains
+// document.domain = 'moxiecode.com';
+
+var tinymce=null,tinyMCEPopup,tinyMCE;tinyMCEPopup={init:function(){var b=this,a,c;a=b.getWin();tinymce=a.tinymce;tinyMCE=a.tinyMCE;b.editor=tinymce.EditorManager.activeEditor;b.params=b.editor.windowManager.params;b.features=b.editor.windowManager.features;b.dom=b.editor.windowManager.createInstance("tinymce.dom.DOMUtils",document);if(b.features.popup_css!==false){b.dom.loadCSS(b.features.popup_css||b.editor.settings.popup_css)}b.listeners=[];b.onInit={add:function(e,d){b.listeners.push({func:e,scope:d})}};b.isWindow=!b.getWindowArg("mce_inline");b.id=b.getWindowArg("mce_window_id");b.editor.windowManager.onOpen.dispatch(b.editor.windowManager,window)},getWin:function(){return(!window.frameElement&&window.dialogArguments)||opener||parent||top},getWindowArg:function(c,b){var a=this.params[c];return tinymce.is(a)?a:b},getParam:function(b,a){return this.editor.getParam(b,a)},getLang:function(b,a){return this.editor.getLang(b,a)},execCommand:function(d,c,e,b){b=b||{};b.skip_focus=1;this.restoreSelection();return this.editor.execCommand(d,c,e,b)},resizeToInnerSize:function(){var a=this;setTimeout(function(){var b=a.dom.getViewPort(window);a.editor.windowManager.resizeBy(a.getWindowArg("mce_width")-b.w,a.getWindowArg("mce_height")-b.h,a.id||window)},0)},executeOnLoad:function(s){this.onInit.add(function(){eval(s)})},storeSelection:function(){this.editor.windowManager.bookmark=tinyMCEPopup.editor.selection.getBookmark(1)},restoreSelection:function(){var a=tinyMCEPopup;if(!a.isWindow&&tinymce.isIE){a.editor.selection.moveToBookmark(a.editor.windowManager.bookmark)}},requireLangPack:function(){var b=this,a=b.getWindowArg("plugin_url")||b.getWindowArg("theme_url");if(a&&b.editor.settings.language&&b.features.translate_i18n!==false){a+="/langs/"+b.editor.settings.language+"_dlg.js";if(!tinymce.ScriptLoader.isDone(a)){document.write('<script type="text/javascript" src="'+tinymce._addVer(a)+'"><\/script>');tinymce.ScriptLoader.markDone(a)}}},pickColor:function(b,a){this.execCommand("mceColorPicker",true,{color:document.getElementById(a).value,func:function(e){document.getElementById(a).value=e;try{document.getElementById(a).onchange()}catch(d){}}})},openBrowser:function(a,c,b){tinyMCEPopup.restoreSelection();this.editor.execCallback("file_browser_callback",a,document.getElementById(a).value,c,window)},confirm:function(b,a,c){this.editor.windowManager.confirm(b,a,c,window)},alert:function(b,a,c){this.editor.windowManager.alert(b,a,c,window)},close:function(){var a=this;function b(){a.editor.windowManager.close(window);tinymce=tinyMCE=a.editor=a.params=a.dom=a.dom.doc=null}if(tinymce.isOpera){a.getWin().setTimeout(b,0)}else{b()}},_restoreSelection:function(){var a=window.event.srcElement;if(a.nodeName=="INPUT"&&(a.type=="submit"||a.type=="button")){tinyMCEPopup.restoreSelection()}},_onDOMLoaded:function(){var b=tinyMCEPopup,d=document.title,e,c,a;if(b.domLoaded){return}b.domLoaded=1;if(b.features.translate_i18n!==false){c=document.body.innerHTML;if(tinymce.isIE){c=c.replace(/ (value|title|alt)=([^"][^\s>]+)/gi,' $1="$2"')}document.dir=b.editor.getParam("directionality","");if((a=b.editor.translate(c))&&a!=c){document.body.innerHTML=a}if((a=b.editor.translate(d))&&a!=d){document.title=d=a}}document.body.style.display="";if(tinymce.isIE){document.attachEvent("onmouseup",tinyMCEPopup._restoreSelection);b.dom.add(b.dom.select("head")[0],"base",{target:"_self"})}b.restoreSelection();b.resizeToInnerSize();if(!b.isWindow){b.editor.windowManager.setTitle(window,d)}else{window.focus()}if(!tinymce.isIE&&!b.isWindow){tinymce.dom.Event._add(document,"focus",function(){b.editor.windowManager.focus(b.id)})}tinymce.each(b.dom.select("select"),function(f){f.onkeydown=tinyMCEPopup._accessHandler});tinymce.each(b.listeners,function(f){f.func.call(f.scope,b.editor)});if(b.getWindowArg("mce_auto_focus",true)){window.focus();tinymce.each(document.forms,function(g){tinymce.each(g.elements,function(f){if(b.dom.hasClass(f,"mceFocus")&&!f.disabled){f.focus();return false}})})}document.onkeyup=tinyMCEPopup._closeWinKeyHandler},_accessHandler:function(a){a=a||window.event;if(a.keyCode==13||a.keyCode==32){a=a.target||a.srcElement;if(a.onchange){a.onchange()}return tinymce.dom.Event.cancel(a)}},_closeWinKeyHandler:function(a){a=a||window.event;if(a.keyCode==27){tinyMCEPopup.close()}},_wait:function(){if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);tinyMCEPopup._onDOMLoaded()}});if(document.documentElement.doScroll&&window==window.top){(function(){if(tinyMCEPopup.domLoaded){return}try{document.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,0);return}tinyMCEPopup._onDOMLoaded()})()}document.attachEvent("onload",tinyMCEPopup._onDOMLoaded)}else{if(document.addEventListener){window.addEventListener("DOMContentLoaded",tinyMCEPopup._onDOMLoaded,false);window.addEventListener("load",tinyMCEPopup._onDOMLoaded,false)}}}};tinyMCEPopup.init();tinyMCEPopup._wait();
\ No newline at end of file
diff --git a/plugins/TinyMCE/js/tiny_mce_src.js b/plugins/TinyMCE/js/tiny_mce_src.js
new file mode 100644 (file)
index 0000000..acc1db5
--- /dev/null
@@ -0,0 +1,13346 @@
+(function(win) {\r
+       var whiteSpaceRe = /^\s*|\s*$/g,\r
+               undefined;\r
+\r
+       var tinymce = {\r
+               majorVersion : '3',\r
+\r
+               minorVersion : '3.8',\r
+\r
+               releaseDate : '2010-06-30',\r
+\r
+               _init : function() {\r
+                       var t = this, d = document, na = navigator, ua = na.userAgent, i, nl, n, base, p, v;\r
+\r
+                       t.isOpera = win.opera && opera.buildNumber;\r
+\r
+                       t.isWebKit = /WebKit/.test(ua);\r
+\r
+                       t.isIE = !t.isWebKit && !t.isOpera && (/MSIE/gi).test(ua) && (/Explorer/gi).test(na.appName);\r
+\r
+                       t.isIE6 = t.isIE && /MSIE [56]/.test(ua);\r
+\r
+                       t.isGecko = !t.isWebKit && /Gecko/.test(ua);\r
+\r
+                       t.isMac = ua.indexOf('Mac') != -1;\r
+\r
+                       t.isAir = /adobeair/i.test(ua);\r
+\r
+                       t.isIDevice = /(iPad|iPhone)/.test(ua);\r
+\r
+                       // TinyMCE .NET webcontrol might be setting the values for TinyMCE\r
+                       if (win.tinyMCEPreInit) {\r
+                               t.suffix = tinyMCEPreInit.suffix;\r
+                               t.baseURL = tinyMCEPreInit.base;\r
+                               t.query = tinyMCEPreInit.query;\r
+                               return;\r
+                       }\r
+\r
+                       // Get suffix and base\r
+                       t.suffix = '';\r
+\r
+                       // If base element found, add that infront of baseURL\r
+                       nl = d.getElementsByTagName('base');\r
+                       for (i=0; i<nl.length; i++) {\r
+                               if (v = nl[i].href) {\r
+                                       // Host only value like http://site.com or http://site.com:8008\r
+                                       if (/^https?:\/\/[^\/]+$/.test(v))\r
+                                               v += '/';\r
+\r
+                                       base = v ? v.match(/.*\//)[0] : ''; // Get only directory\r
+                               }\r
+                       }\r
+\r
+                       function getBase(n) {\r
+                               if (n.src && /tiny_mce(|_gzip|_jquery|_prototype)(_dev|_src)?.js/.test(n.src)) {\r
+                                       if (/_(src|dev)\.js/g.test(n.src))\r
+                                               t.suffix = '_src';\r
+\r
+                                       if ((p = n.src.indexOf('?')) != -1)\r
+                                               t.query = n.src.substring(p + 1);\r
+\r
+                                       t.baseURL = n.src.substring(0, n.src.lastIndexOf('/'));\r
+\r
+                                       // If path to script is relative and a base href was found add that one infront\r
+                                       // the src property will always be an absolute one on non IE browsers and IE 8\r
+                                       // so this logic will basically only be executed on older IE versions\r
+                                       if (base && t.baseURL.indexOf('://') == -1 && t.baseURL.indexOf('/') !== 0)\r
+                                               t.baseURL = base + t.baseURL;\r
+\r
+                                       return t.baseURL;\r
+                               }\r
+\r
+                               return null;\r
+                       };\r
+\r
+                       // Check document\r
+                       nl = d.getElementsByTagName('script');\r
+                       for (i=0; i<nl.length; i++) {\r
+                               if (getBase(nl[i]))\r
+                                       return;\r
+                       }\r
+\r
+                       // Check head\r
+                       n = d.getElementsByTagName('head')[0];\r
+                       if (n) {\r
+                               nl = n.getElementsByTagName('script');\r
+                               for (i=0; i<nl.length; i++) {\r
+                                       if (getBase(nl[i]))\r
+                                               return;\r
+                               }\r
+                       }\r
+\r
+                       return;\r
+               },\r
+\r
+               is : function(o, t) {\r
+                       if (!t)\r
+                               return o !== undefined;\r
+\r
+                       if (t == 'array' && (o.hasOwnProperty && o instanceof Array))\r
+                               return true;\r
+\r
+                       return typeof(o) == t;\r
+               },\r
+\r
+               each : function(o, cb, s) {\r
+                       var n, l;\r
+\r
+                       if (!o)\r
+                               return 0;\r
+\r
+                       s = s || o;\r
+\r
+                       if (o.length !== undefined) {\r
+                               // Indexed arrays, needed for Safari\r
+                               for (n=0, l = o.length; n < l; n++) {\r
+                                       if (cb.call(s, o[n], n, o) === false)\r
+                                               return 0;\r
+                               }\r
+                       } else {\r
+                               // Hashtables\r
+                               for (n in o) {\r
+                                       if (o.hasOwnProperty(n)) {\r
+                                               if (cb.call(s, o[n], n, o) === false)\r
+                                                       return 0;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return 1;\r
+               },\r
+\r
+\r
+               trim : function(s) {\r
+                       return (s ? '' + s : '').replace(whiteSpaceRe, '');\r
+               },\r
+\r
+               create : function(s, p) {\r
+                       var t = this, sp, ns, cn, scn, c, de = 0;\r
+\r
+                       // Parse : <prefix> <class>:<super class>\r
+                       s = /^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);\r
+                       cn = s[3].match(/(^|\.)(\w+)$/i)[2]; // Class name\r
+\r
+                       // Create namespace for new class\r
+                       ns = t.createNS(s[3].replace(/\.\w+$/, ''));\r
+\r
+                       // Class already exists\r
+                       if (ns[cn])\r
+                               return;\r
+\r
+                       // Make pure static class\r
+                       if (s[2] == 'static') {\r
+                               ns[cn] = p;\r
+\r
+                               if (this.onCreate)\r
+                                       this.onCreate(s[2], s[3], ns[cn]);\r
+\r
+                               return;\r
+                       }\r
+\r
+                       // Create default constructor\r
+                       if (!p[cn]) {\r
+                               p[cn] = function() {};\r
+                               de = 1;\r
+                       }\r
+\r
+                       // Add constructor and methods\r
+                       ns[cn] = p[cn];\r
+                       t.extend(ns[cn].prototype, p);\r
+\r
+                       // Extend\r
+                       if (s[5]) {\r
+                               sp = t.resolve(s[5]).prototype;\r
+                               scn = s[5].match(/\.(\w+)$/i)[1]; // Class name\r
+\r
+                               // Extend constructor\r
+                               c = ns[cn];\r
+                               if (de) {\r
+                                       // Add passthrough constructor\r
+                                       ns[cn] = function() {\r
+                                               return sp[scn].apply(this, arguments);\r
+                                       };\r
+                               } else {\r
+                                       // Add inherit constructor\r
+                                       ns[cn] = function() {\r
+                                               this.parent = sp[scn];\r
+                                               return c.apply(this, arguments);\r
+                                       };\r
+                               }\r
+                               ns[cn].prototype[cn] = ns[cn];\r
+\r
+                               // Add super methods\r
+                               t.each(sp, function(f, n) {\r
+                                       ns[cn].prototype[n] = sp[n];\r
+                               });\r
+\r
+                               // Add overridden methods\r
+                               t.each(p, function(f, n) {\r
+                                       // Extend methods if needed\r
+                                       if (sp[n]) {\r
+                                               ns[cn].prototype[n] = function() {\r
+                                                       this.parent = sp[n];\r
+                                                       return f.apply(this, arguments);\r
+                                               };\r
+                                       } else {\r
+                                               if (n != cn)\r
+                                                       ns[cn].prototype[n] = f;\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       // Add static methods\r
+                       t.each(p['static'], function(f, n) {\r
+                               ns[cn][n] = f;\r
+                       });\r
+\r
+                       if (this.onCreate)\r
+                               this.onCreate(s[2], s[3], ns[cn].prototype);\r
+               },\r
+\r
+               walk : function(o, f, n, s) {\r
+                       s = s || this;\r
+\r
+                       if (o) {\r
+                               if (n)\r
+                                       o = o[n];\r
+\r
+                               tinymce.each(o, function(o, i) {\r
+                                       if (f.call(s, o, i, n) === false)\r
+                                               return false;\r
+\r
+                                       tinymce.walk(o, f, n, s);\r
+                               });\r
+                       }\r
+               },\r
+\r
+               createNS : function(n, o) {\r
+                       var i, v;\r
+\r
+                       o = o || win;\r
+\r
+                       n = n.split('.');\r
+                       for (i=0; i<n.length; i++) {\r
+                               v = n[i];\r
+\r
+                               if (!o[v])\r
+                                       o[v] = {};\r
+\r
+                               o = o[v];\r
+                       }\r
+\r
+                       return o;\r
+               },\r
+\r
+               resolve : function(n, o) {\r
+                       var i, l;\r
+\r
+                       o = o || win;\r
+\r
+                       n = n.split('.');\r
+                       for (i = 0, l = n.length; i < l; i++) {\r
+                               o = o[n[i]];\r
+\r
+                               if (!o)\r
+                                       break;\r
+                       }\r
+\r
+                       return o;\r
+               },\r
+\r
+               addUnload : function(f, s) {\r
+                       var t = this;\r
+\r
+                       f = {func : f, scope : s || this};\r
+\r
+                       if (!t.unloads) {\r
+                               function unload() {\r
+                                       var li = t.unloads, o, n;\r
+\r
+                                       if (li) {\r
+                                               // Call unload handlers\r
+                                               for (n in li) {\r
+                                                       o = li[n];\r
+\r
+                                                       if (o && o.func)\r
+                                                               o.func.call(o.scope, 1); // Send in one arg to distinct unload and user destroy\r
+                                               }\r
+\r
+                                               // Detach unload function\r
+                                               if (win.detachEvent) {\r
+                                                       win.detachEvent('onbeforeunload', fakeUnload);\r
+                                                       win.detachEvent('onunload', unload);\r
+                                               } else if (win.removeEventListener)\r
+                                                       win.removeEventListener('unload', unload, false);\r
+\r
+                                               // Destroy references\r
+                                               t.unloads = o = li = w = unload = 0;\r
+\r
+                                               // Run garbarge collector on IE\r
+                                               if (win.CollectGarbage)\r
+                                                       CollectGarbage();\r
+                                       }\r
+                               };\r
+\r
+                               function fakeUnload() {\r
+                                       var d = document;\r
+\r
+                                       // Is there things still loading, then do some magic\r
+                                       if (d.readyState == 'interactive') {\r
+                                               function stop() {\r
+                                                       // Prevent memory leak\r
+                                                       d.detachEvent('onstop', stop);\r
+\r
+                                                       // Call unload handler\r
+                                                       if (unload)\r
+                                                               unload();\r
+\r
+                                                       d = 0;\r
+                                               };\r
+\r
+                                               // Fire unload when the currently loading page is stopped\r
+                                               if (d)\r
+                                                       d.attachEvent('onstop', stop);\r
+\r
+                                               // Remove onstop listener after a while to prevent the unload function\r
+                                               // to execute if the user presses cancel in an onbeforeunload\r
+                                               // confirm dialog and then presses the browser stop button\r
+                                               win.setTimeout(function() {\r
+                                                       if (d)\r
+                                                               d.detachEvent('onstop', stop);\r
+                                               }, 0);\r
+                                       }\r
+                               };\r
+\r
+                               // Attach unload handler\r
+                               if (win.attachEvent) {\r
+                                       win.attachEvent('onunload', unload);\r
+                                       win.attachEvent('onbeforeunload', fakeUnload);\r
+                               } else if (win.addEventListener)\r
+                                       win.addEventListener('unload', unload, false);\r
+\r
+                               // Setup initial unload handler array\r
+                               t.unloads = [f];\r
+                       } else\r
+                               t.unloads.push(f);\r
+\r
+                       return f;\r
+               },\r
+\r
+               removeUnload : function(f) {\r
+                       var u = this.unloads, r = null;\r
+\r
+                       tinymce.each(u, function(o, i) {\r
+                               if (o && o.func == f) {\r
+                                       u.splice(i, 1);\r
+                                       r = f;\r
+                                       return false;\r
+                               }\r
+                       });\r
+\r
+                       return r;\r
+               },\r
+\r
+               explode : function(s, d) {\r
+                       return s ? tinymce.map(s.split(d || ','), tinymce.trim) : s;\r
+               },\r
+\r
+               _addVer : function(u) {\r
+                       var v;\r
+\r
+                       if (!this.query)\r
+                               return u;\r
+\r
+                       v = (u.indexOf('?') == -1 ? '?' : '&') + this.query;\r
+\r
+                       if (u.indexOf('#') == -1)\r
+                               return u + v;\r
+\r
+                       return u.replace('#', v + '#');\r
+               }\r
+\r
+               };\r
+\r
+       // Initialize the API\r
+       tinymce._init();\r
+\r
+       // Expose tinymce namespace to the global namespace (window)\r
+       win.tinymce = win.tinyMCE = tinymce;\r
+})(window);\r
+\r
+(function($, tinymce) {\r
+       var is = tinymce.is, attrRegExp = /^(href|src|style)$/i, undefined;\r
+\r
+       // jQuery is undefined\r
+       if (!$)\r
+               return alert("Load jQuery first!");\r
+\r
+       // Stick jQuery into the tinymce namespace\r
+       tinymce.$ = $;\r
+\r
+       // Setup adapter\r
+       tinymce.adapter = {\r
+               patchEditor : function(editor) {\r
+                       var fn = $.fn;\r
+\r
+                       // Adapt the css function to make sure that the _mce_style\r
+                       // attribute gets updated with the new style information\r
+                       function css(name, value) {\r
+                               var self = this;\r
+\r
+                               // Remove _mce_style when set operation occurs\r
+                               if (value)\r
+                                       self.removeAttr('_mce_style');\r
+\r
+                               return fn.css.apply(self, arguments);\r
+                       };\r
+\r
+                       // Apapt the attr function to make sure that it uses the _mce_ prefixed variants\r
+                       function attr(name, value) {\r
+                               var self = this;\r
+\r
+                               // Update/retrive _mce_ attribute variants\r
+                               if (attrRegExp.test(name)) {\r
+                                       if (value !== undefined) {\r
+                                               // Use TinyMCE behavior when setting the specifc attributes\r
+                                               self.each(function(i, node) {\r
+                                                       editor.dom.setAttrib(node, name, value);\r
+                                               });\r
+\r
+                                               return self;\r
+                                       } else\r
+                                               return self.attr('_mce_' + name);\r
+                               }\r
+\r
+                               // Default behavior\r
+                               return fn.attr.apply(self, arguments);\r
+                       };\r
+\r
+                       function htmlPatchFunc(func) {\r
+                               // Returns a modified function that processes\r
+                               // the HTML before executing the action this makes sure\r
+                               // that href/src etc gets moved into the _mce_ variants\r
+                               return function(content) {\r
+                                       if (content)\r
+                                               content = editor.dom.processHTML(content);\r
+\r
+                                       return func.call(this, content);\r
+                               };\r
+                       };\r
+\r
+                       // Patch various jQuery functions to handle tinymce specific attribute and content behavior\r
+                       // we don't patch the jQuery.fn directly since it will most likely break compatibility\r
+                       // with other jQuery logic on the page. Only instances created by TinyMCE should be patched.\r
+                       function patch(jq) {\r
+                               // Patch some functions, only patch the object once\r
+                               if (jq.css !== css) {\r
+                                       // Patch css/attr to use the _mce_ prefixed attribute variants\r
+                                       jq.css = css;\r
+                                       jq.attr = attr;\r
+\r
+                                       // Patch HTML functions to use the DOMUtils.processHTML filter logic\r
+                                       jq.html = htmlPatchFunc(fn.html);\r
+                                       jq.append = htmlPatchFunc(fn.append);\r
+                                       jq.prepend = htmlPatchFunc(fn.prepend);\r
+                                       jq.after = htmlPatchFunc(fn.after);\r
+                                       jq.before = htmlPatchFunc(fn.before);\r
+                                       jq.replaceWith = htmlPatchFunc(fn.replaceWith);\r
+                                       jq.tinymce = editor;\r
+\r
+                                       // Each pushed jQuery instance needs to be patched\r
+                                       // as well for example when traversing the DOM\r
+                                       jq.pushStack = function() {\r
+                                               return patch(fn.pushStack.apply(this, arguments));\r
+                                       };\r
+                               }\r
+\r
+                               return jq;\r
+                       };\r
+\r
+                       // Add a $ function on each editor instance this one is scoped for the editor document object\r
+                       // this way you can do chaining like this tinymce.get(0).$('p').append('text').css('color', 'red');\r
+                       editor.$ = function(selector, scope) {\r
+                               var doc = editor.getDoc();\r
+\r
+                               return patch($(selector || doc, doc || scope));\r
+                       };\r
+               }\r
+       };\r
+\r
+       // Patch in core NS functions\r
+       tinymce.extend = $.extend;\r
+       tinymce.extend(tinymce, {\r
+               map : $.map,\r
+               grep : function(a, f) {return $.grep(a, f || function(){return 1;});},\r
+               inArray : function(a, v) {return $.inArray(v, a || []);}\r
+\r
+               /* Didn't iterate stylesheets\r
+               each : function(o, cb, s) {\r
+                       if (!o)\r
+                               return 0;\r
+\r
+                       var r = 1;\r
+\r
+                       $.each(o, function(nr, el){\r
+                               if (cb.call(s, el, nr, o) === false) {\r
+                                       r = 0;\r
+                                       return false;\r
+                               }\r
+                       });\r
+\r
+                       return r;\r
+               }*/\r
+       });\r
+\r
+       // Patch in functions in various clases\r
+       // Add a "#ifndefjquery" statement around each core API function you add below\r
+       var patches = {\r
+               'tinymce.dom.DOMUtils' : {\r
+                       /*\r
+                       addClass : function(e, c) {\r
+                               if (is(e, 'array') && is(e[0], 'string'))\r
+                                       e = e.join(',#');\r
+                               return (e && $(is(e, 'string') ? '#' + e : e)\r
+                                       .addClass(c)\r
+                                       .attr('class')) || false;\r
+                       },\r
+\r
+                       hasClass : function(n, c) {\r
+                               return $(is(n, 'string') ? '#' + n : n).hasClass(c);\r
+                       },\r
+\r
+                       removeClass : function(e, c) {\r
+                               if (!e)\r
+                                       return false;\r
+\r
+                               var r = [];\r
+\r
+                               $(is(e, 'string') ? '#' + e : e)\r
+                                       .removeClass(c)\r
+                                       .each(function(){\r
+                                               r.push(this.className);\r
+                                       });\r
+\r
+                               return r.length == 1 ? r[0] : r;\r
+                       },\r
+                       */\r
+\r
+                       select : function(pattern, scope) {\r
+                               var t = this;\r
+\r
+                               return $.find(pattern, t.get(scope) || t.get(t.settings.root_element) || t.doc, []);\r
+                       },\r
+\r
+                       is : function(n, patt) {\r
+                               return $(this.get(n)).is(patt);\r
+                       }\r
+\r
+                       /*\r
+                       show : function(e) {\r
+                               if (is(e, 'array') && is(e[0], 'string'))\r
+                                       e = e.join(',#');\r
+\r
+                               $(is(e, 'string') ? '#' + e : e).css('display', 'block');\r
+                       },\r
+\r
+                       hide : function(e) {\r
+                               if (is(e, 'array') && is(e[0], 'string'))\r
+                                       e = e.join(',#');\r
+\r
+                               $(is(e, 'string') ? '#' + e : e).css('display', 'none');\r
+                       },\r
+\r
+                       isHidden : function(e) {\r
+                               return $(is(e, 'string') ? '#' + e : e).is(':hidden');\r
+                       },\r
+\r
+                       insertAfter : function(n, e) {\r
+                               return $(is(e, 'string') ? '#' + e : e).after(n);\r
+                       },\r
+\r
+                       replace : function(o, n, k) {\r
+                               n = $(is(n, 'string') ? '#' + n : n);\r
+\r
+                               if (k)\r
+                                       n.children().appendTo(o);\r
+\r
+                               n.replaceWith(o);\r
+                       },\r
+\r
+                       setStyle : function(n, na, v) {\r
+                               if (is(n, 'array') && is(n[0], 'string'))\r
+                                       n = n.join(',#');\r
+\r
+                               $(is(n, 'string') ? '#' + n : n).css(na, v);\r
+                       },\r
+\r
+                       getStyle : function(n, na, c) {\r
+                               return $(is(n, 'string') ? '#' + n : n).css(na);\r
+                       },\r
+\r
+                       setStyles : function(e, o) {\r
+                               if (is(e, 'array') && is(e[0], 'string'))\r
+                                       e = e.join(',#');\r
+                               $(is(e, 'string') ? '#' + e : e).css(o);\r
+                       },\r
+\r
+                       setAttrib : function(e, n, v) {\r
+                               var t = this, s = t.settings;\r
+\r
+                               if (is(e, 'array') && is(e[0], 'string'))\r
+                                       e = e.join(',#');\r
+\r
+                               e = $(is(e, 'string') ? '#' + e : e);\r
+\r
+                               switch (n) {\r
+                                       case "style":\r
+                                               e.each(function(i, v){\r
+                                                       if (s.keep_values)\r
+                                                               $(v).attr('_mce_style', v);\r
+\r
+                                                       v.style.cssText = v;\r
+                                               });\r
+                                               break;\r
+\r
+                                       case "class":\r
+                                               e.each(function(){\r
+                                                       this.className = v;\r
+                                               });\r
+                                               break;\r
+\r
+                                       case "src":\r
+                                       case "href":\r
+                                               e.each(function(i, v){\r
+                                                       if (s.keep_values) {\r
+                                                               if (s.url_converter)\r
+                                                                       v = s.url_converter.call(s.url_converter_scope || t, v, n, v);\r
+\r
+                                                               t.setAttrib(v, '_mce_' + n, v);\r
+                                                       }\r
+                                               });\r
+\r
+                                               break;\r
+                               }\r
+\r
+                               if (v !== null && v.length !== 0)\r
+                                       e.attr(n, '' + v);\r
+                               else\r
+                                       e.removeAttr(n);\r
+                       },\r
+\r
+                       setAttribs : function(e, o) {\r
+                               var t = this;\r
+\r
+                               $.each(o, function(n, v){\r
+                                       t.setAttrib(e,n,v);\r
+                               });\r
+                       }\r
+                       */\r
+               }\r
+\r
+/*\r
+               'tinymce.dom.Event' : {\r
+                       add : function (o, n, f, s) {\r
+                               var lo, cb;\r
+\r
+                               cb = function(e) {\r
+                                       e.target = e.target || this;\r
+                                       f.call(s || this, e);\r
+                               };\r
+\r
+                               if (is(o, 'array') && is(o[0], 'string'))\r
+                                       o = o.join(',#');\r
+                               o = $(is(o, 'string') ? '#' + o : o);\r
+                               if (n == 'init') {\r
+                                       o.ready(cb, s);\r
+                               } else {\r
+                                       if (s) {\r
+                                               o.bind(n, s, cb);\r
+                                       } else {\r
+                                               o.bind(n, cb);\r
+                                       }\r
+                               }\r
+\r
+                               lo = this._jqLookup || (this._jqLookup = []);\r
+                               lo.push({func : f, cfunc : cb});\r
+\r
+                               return cb;\r
+                       },\r
+\r
+                       remove : function(o, n, f) {\r
+                               // Find cfunc\r
+                               $(this._jqLookup).each(function() {\r
+                                       if (this.func === f)\r
+                                               f = this.cfunc;\r
+                               });\r
+\r
+                               if (is(o, 'array') && is(o[0], 'string'))\r
+                                       o = o.join(',#');\r
+\r
+                               $(is(o, 'string') ? '#' + o : o).unbind(n,f);\r
+\r
+                               return true;\r
+                       }\r
+               }\r
+*/\r
+       };\r
+\r
+       // Patch functions after a class is created\r
+       tinymce.onCreate = function(ty, c, p) {\r
+               tinymce.extend(p, patches[c]);\r
+       };\r
+})(window.jQuery, tinymce);\r
+\r
+\r
+\r
+tinymce.create('tinymce.util.Dispatcher', {\r
+       scope : null,\r
+       listeners : null,\r
+\r
+       Dispatcher : function(s) {\r
+               this.scope = s || this;\r
+               this.listeners = [];\r
+       },\r
+\r
+       add : function(cb, s) {\r
+               this.listeners.push({cb : cb, scope : s || this.scope});\r
+\r
+               return cb;\r
+       },\r
+\r
+       addToTop : function(cb, s) {\r
+               this.listeners.unshift({cb : cb, scope : s || this.scope});\r
+\r
+               return cb;\r
+       },\r
+\r
+       remove : function(cb) {\r
+               var l = this.listeners, o = null;\r
+\r
+               tinymce.each(l, function(c, i) {\r
+                       if (cb == c.cb) {\r
+                               o = cb;\r
+                               l.splice(i, 1);\r
+                               return false;\r
+                       }\r
+               });\r
+\r
+               return o;\r
+       },\r
+\r
+       dispatch : function() {\r
+               var s, a = arguments, i, li = this.listeners, c;\r
+\r
+               // Needs to be a real loop since the listener count might change while looping\r
+               // And this is also more efficient\r
+               for (i = 0; i<li.length; i++) {\r
+                       c = li[i];\r
+                       s = c.cb.apply(c.scope, a);\r
+\r
+                       if (s === false)\r
+                               break;\r
+               }\r
+\r
+               return s;\r
+       }\r
+\r
+       });\r
+\r
+(function() {\r
+       var each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.util.URI', {\r
+               URI : function(u, s) {\r
+                       var t = this, o, a, b;\r
+\r
+                       // Trim whitespace\r
+                       u = tinymce.trim(u);\r
+\r
+                       // Default settings\r
+                       s = t.settings = s || {};\r
+\r
+                       // Strange app protocol or local anchor\r
+                       if (/^(mailto|tel|news|javascript|about|data):/i.test(u) || /^\s*#/.test(u)) {\r
+                               t.source = u;\r
+                               return;\r
+                       }\r
+\r
+                       // Absolute path with no host, fake host and protocol\r
+                       if (u.indexOf('/') === 0 && u.indexOf('//') !== 0)\r
+                               u = (s.base_uri ? s.base_uri.protocol || 'http' : 'http') + '://mce_host' + u;\r
+\r
+                       // Relative path http:// or protocol relative //path\r
+                       if (!/^\w*:?\/\//.test(u))\r
+                               u = (s.base_uri.protocol || 'http') + '://mce_host' + t.toAbsPath(s.base_uri.path, u);\r
+\r
+                       // Parse URL (Credits goes to Steave, http://blog.stevenlevithan.com/archives/parseuri)\r
+                       u = u.replace(/@@/g, '(mce_at)'); // Zope 3 workaround, they use @@something\r
+                       u = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);\r
+                       each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"], function(v, i) {\r
+                               var s = u[i];\r
+\r
+                               // Zope 3 workaround, they use @@something\r
+                               if (s)\r
+                                       s = s.replace(/\(mce_at\)/g, '@@');\r
+\r
+                               t[v] = s;\r
+                       });\r
+\r
+                       if (b = s.base_uri) {\r
+                               if (!t.protocol)\r
+                                       t.protocol = b.protocol;\r
+\r
+                               if (!t.userInfo)\r
+                                       t.userInfo = b.userInfo;\r
+\r
+                               if (!t.port && t.host == 'mce_host')\r
+                                       t.port = b.port;\r
+\r
+                               if (!t.host || t.host == 'mce_host')\r
+                                       t.host = b.host;\r
+\r
+                               t.source = '';\r
+                       }\r
+\r
+                       //t.path = t.path || '/';\r
+               },\r
+\r
+               setPath : function(p) {\r
+                       var t = this;\r
+\r
+                       p = /^(.*?)\/?(\w+)?$/.exec(p);\r
+\r
+                       // Update path parts\r
+                       t.path = p[0];\r
+                       t.directory = p[1];\r
+                       t.file = p[2];\r
+\r
+                       // Rebuild source\r
+                       t.source = '';\r
+                       t.getURI();\r
+               },\r
+\r
+               toRelative : function(u) {\r
+                       var t = this, o;\r
+\r
+                       if (u === "./")\r
+                               return u;\r
+\r
+                       u = new tinymce.util.URI(u, {base_uri : t});\r
+\r
+                       // Not on same domain/port or protocol\r
+                       if ((u.host != 'mce_host' && t.host != u.host && u.host) || t.port != u.port || t.protocol != u.protocol)\r
+                               return u.getURI();\r
+\r
+                       o = t.toRelPath(t.path, u.path);\r
+\r
+                       // Add query\r
+                       if (u.query)\r
+                               o += '?' + u.query;\r
+\r
+                       // Add anchor\r
+                       if (u.anchor)\r
+                               o += '#' + u.anchor;\r
+\r
+                       return o;\r
+               },\r
+       \r
+               toAbsolute : function(u, nh) {\r
+                       var u = new tinymce.util.URI(u, {base_uri : this});\r
+\r
+                       return u.getURI(this.host == u.host && this.protocol == u.protocol ? nh : 0);\r
+               },\r
+\r
+               toRelPath : function(base, path) {\r
+                       var items, bp = 0, out = '', i, l;\r
+\r
+                       // Split the paths\r
+                       base = base.substring(0, base.lastIndexOf('/'));\r
+                       base = base.split('/');\r
+                       items = path.split('/');\r
+\r
+                       if (base.length >= items.length) {\r
+                               for (i = 0, l = base.length; i < l; i++) {\r
+                                       if (i >= items.length || base[i] != items[i]) {\r
+                                               bp = i + 1;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       if (base.length < items.length) {\r
+                               for (i = 0, l = items.length; i < l; i++) {\r
+                                       if (i >= base.length || base[i] != items[i]) {\r
+                                               bp = i + 1;\r
+                                               break;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       if (bp == 1)\r
+                               return path;\r
+\r
+                       for (i = 0, l = base.length - (bp - 1); i < l; i++)\r
+                               out += "../";\r
+\r
+                       for (i = bp - 1, l = items.length; i < l; i++) {\r
+                               if (i != bp - 1)\r
+                                       out += "/" + items[i];\r
+                               else\r
+                                       out += items[i];\r
+                       }\r
+\r
+                       return out;\r
+               },\r
+\r
+               toAbsPath : function(base, path) {\r
+                       var i, nb = 0, o = [], tr, outPath;\r
+\r
+                       // Split paths\r
+                       tr = /\/$/.test(path) ? '/' : '';\r
+                       base = base.split('/');\r
+                       path = path.split('/');\r
+\r
+                       // Remove empty chunks\r
+                       each(base, function(k) {\r
+                               if (k)\r
+                                       o.push(k);\r
+                       });\r
+\r
+                       base = o;\r
+\r
+                       // Merge relURLParts chunks\r
+                       for (i = path.length - 1, o = []; i >= 0; i--) {\r
+                               // Ignore empty or .\r
+                               if (path[i].length == 0 || path[i] == ".")\r
+                                       continue;\r
+\r
+                               // Is parent\r
+                               if (path[i] == '..') {\r
+                                       nb++;\r
+                                       continue;\r
+                               }\r
+\r
+                               // Move up\r
+                               if (nb > 0) {\r
+                                       nb--;\r
+                                       continue;\r
+                               }\r
+\r
+                               o.push(path[i]);\r
+                       }\r
+\r
+                       i = base.length - nb;\r
+\r
+                       // If /a/b/c or /\r
+                       if (i <= 0)\r
+                               outPath = o.reverse().join('/');\r
+                       else\r
+                               outPath = base.slice(0, i).join('/') + '/' + o.reverse().join('/');\r
+\r
+                       // Add front / if it's needed\r
+                       if (outPath.indexOf('/') !== 0)\r
+                               outPath = '/' + outPath;\r
+\r
+                       // Add traling / if it's needed\r
+                       if (tr && outPath.lastIndexOf('/') !== outPath.length - 1)\r
+                               outPath += tr;\r
+\r
+                       return outPath;\r
+               },\r
+\r
+               getURI : function(nh) {\r
+                       var s, t = this;\r
+\r
+                       // Rebuild source\r
+                       if (!t.source || nh) {\r
+                               s = '';\r
+\r
+                               if (!nh) {\r
+                                       if (t.protocol)\r
+                                               s += t.protocol + '://';\r
+\r
+                                       if (t.userInfo)\r
+                                               s += t.userInfo + '@';\r
+\r
+                                       if (t.host)\r
+                                               s += t.host;\r
+\r
+                                       if (t.port)\r
+                                               s += ':' + t.port;\r
+                               }\r
+\r
+                               if (t.path)\r
+                                       s += t.path;\r
+\r
+                               if (t.query)\r
+                                       s += '?' + t.query;\r
+\r
+                               if (t.anchor)\r
+                                       s += '#' + t.anchor;\r
+\r
+                               t.source = s;\r
+                       }\r
+\r
+                       return t.source;\r
+               }\r
+       });\r
+})();\r
+\r
+(function() {\r
+       var each = tinymce.each;\r
+\r
+       tinymce.create('static tinymce.util.Cookie', {\r
+               getHash : function(n) {\r
+                       var v = this.get(n), h;\r
+\r
+                       if (v) {\r
+                               each(v.split('&'), function(v) {\r
+                                       v = v.split('=');\r
+                                       h = h || {};\r
+                                       h[unescape(v[0])] = unescape(v[1]);\r
+                               });\r
+                       }\r
+\r
+                       return h;\r
+               },\r
+\r
+               setHash : function(n, v, e, p, d, s) {\r
+                       var o = '';\r
+\r
+                       each(v, function(v, k) {\r
+                               o += (!o ? '' : '&') + escape(k) + '=' + escape(v);\r
+                       });\r
+\r
+                       this.set(n, o, e, p, d, s);\r
+               },\r
+\r
+               get : function(n) {\r
+                       var c = document.cookie, e, p = n + "=", b;\r
+\r
+                       // Strict mode\r
+                       if (!c)\r
+                               return;\r
+\r
+                       b = c.indexOf("; " + p);\r
+\r
+                       if (b == -1) {\r
+                               b = c.indexOf(p);\r
+\r
+                               if (b != 0)\r
+                                       return null;\r
+                       } else\r
+                               b += 2;\r
+\r
+                       e = c.indexOf(";", b);\r
+\r
+                       if (e == -1)\r
+                               e = c.length;\r
+\r
+                       return unescape(c.substring(b + p.length, e));\r
+               },\r
+\r
+               set : function(n, v, e, p, d, s) {\r
+                       document.cookie = n + "=" + escape(v) +\r
+                               ((e) ? "; expires=" + e.toGMTString() : "") +\r
+                               ((p) ? "; path=" + escape(p) : "") +\r
+                               ((d) ? "; domain=" + d : "") +\r
+                               ((s) ? "; secure" : "");\r
+               },\r
+\r
+               remove : function(n, p) {\r
+                       var d = new Date();\r
+\r
+                       d.setTime(d.getTime() - 1000);\r
+\r
+                       this.set(n, '', d, p, d);\r
+               }\r
+       });\r
+})();\r
+\r
+tinymce.create('static tinymce.util.JSON', {\r
+       serialize : function(o) {\r
+               var i, v, s = tinymce.util.JSON.serialize, t;\r
+\r
+               if (o == null)\r
+                       return 'null';\r
+\r
+               t = typeof o;\r
+\r
+               if (t == 'string') {\r
+                       v = '\bb\tt\nn\ff\rr\""\'\'\\\\';\r
+\r
+                       return '"' + o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function(a, b) {\r
+                               i = v.indexOf(b);\r
+\r
+                               if (i + 1)\r
+                                       return '\\' + v.charAt(i + 1);\r
+\r
+                               a = b.charCodeAt().toString(16);\r
+\r
+                               return '\\u' + '0000'.substring(a.length) + a;\r
+                       }) + '"';\r
+               }\r
+\r
+               if (t == 'object') {\r
+                       if (o.hasOwnProperty && o instanceof Array) {\r
+                                       for (i=0, v = '['; i<o.length; i++)\r
+                                               v += (i > 0 ? ',' : '') + s(o[i]);\r
+\r
+                                       return v + ']';\r
+                               }\r
+\r
+                               v = '{';\r
+\r
+                               for (i in o)\r
+                                       v += typeof o[i] != 'function' ? (v.length > 1 ? ',"' : '"') + i + '":' + s(o[i]) : '';\r
+\r
+                               return v + '}';\r
+               }\r
+\r
+               return '' + o;\r
+       },\r
+\r
+       parse : function(s) {\r
+               try {\r
+                       return eval('(' + s + ')');\r
+               } catch (ex) {\r
+                       // Ignore\r
+               }\r
+       }\r
+\r
+       });\r
+\r
+tinymce.create('static tinymce.util.XHR', {\r
+       send : function(o) {\r
+               var x, t, w = window, c = 0;\r
+\r
+               // Default settings\r
+               o.scope = o.scope || this;\r
+               o.success_scope = o.success_scope || o.scope;\r
+               o.error_scope = o.error_scope || o.scope;\r
+               o.async = o.async === false ? false : true;\r
+               o.data = o.data || '';\r
+\r
+               function get(s) {\r
+                       x = 0;\r
+\r
+                       try {\r
+                               x = new ActiveXObject(s);\r
+                       } catch (ex) {\r
+                       }\r
+\r
+                       return x;\r
+               };\r
+\r
+               x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Microsoft.XMLHTTP') || get('Msxml2.XMLHTTP');\r
+\r
+               if (x) {\r
+                       if (x.overrideMimeType)\r
+                               x.overrideMimeType(o.content_type);\r
+\r
+                       x.open(o.type || (o.data ? 'POST' : 'GET'), o.url, o.async);\r
+\r
+                       if (o.content_type)\r
+                               x.setRequestHeader('Content-Type', o.content_type);\r
+\r
+                       x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r
+\r
+                       x.send(o.data);\r
+\r
+                       function ready() {\r
+                               if (!o.async || x.readyState == 4 || c++ > 10000) {\r
+                                       if (o.success && c < 10000 && x.status == 200)\r
+                                               o.success.call(o.success_scope, '' + x.responseText, x, o);\r
+                                       else if (o.error)\r
+                                               o.error.call(o.error_scope, c > 10000 ? 'TIMED_OUT' : 'GENERAL', x, o);\r
+\r
+                                       x = null;\r
+                               } else\r
+                                       w.setTimeout(ready, 10);\r
+                       };\r
+\r
+                       // Syncronous request\r
+                       if (!o.async)\r
+                               return ready();\r
+\r
+                       // Wait for response, onReadyStateChange can not be used since it leaks memory in IE\r
+                       t = w.setTimeout(ready, 10);\r
+               }\r
+       }\r
+});\r
+\r
+(function() {\r
+       var extend = tinymce.extend, JSON = tinymce.util.JSON, XHR = tinymce.util.XHR;\r
+\r
+       tinymce.create('tinymce.util.JSONRequest', {\r
+               JSONRequest : function(s) {\r
+                       this.settings = extend({\r
+                       }, s);\r
+                       this.count = 0;\r
+               },\r
+\r
+               send : function(o) {\r
+                       var ecb = o.error, scb = o.success;\r
+\r
+                       o = extend(this.settings, o);\r
+\r
+                       o.success = function(c, x) {\r
+                               c = JSON.parse(c);\r
+\r
+                               if (typeof(c) == 'undefined') {\r
+                                       c = {\r
+                                               error : 'JSON Parse error.'\r
+                                       };\r
+                               }\r
+\r
+                               if (c.error)\r
+                                       ecb.call(o.error_scope || o.scope, c.error, x);\r
+                               else\r
+                                       scb.call(o.success_scope || o.scope, c.result);\r
+                       };\r
+\r
+                       o.error = function(ty, x) {\r
+                               ecb.call(o.error_scope || o.scope, ty, x);\r
+                       };\r
+\r
+                       o.data = JSON.serialize({\r
+                               id : o.id || 'c' + (this.count++),\r
+                               method : o.method,\r
+                               params : o.params\r
+                       });\r
+\r
+                       // JSON content type for Ruby on rails. Bug: #1883287\r
+                       o.content_type = 'application/json';\r
+\r
+                       XHR.send(o);\r
+               },\r
+\r
+               'static' : {\r
+                       sendRPC : function(o) {\r
+                               return new tinymce.util.JSONRequest().send(o);\r
+                       }\r
+               }\r
+       });\r
+}());\r
+(function(tinymce) {\r
+       // Shorten names\r
+       var each = tinymce.each,\r
+               is = tinymce.is,\r
+               isWebKit = tinymce.isWebKit,\r
+               isIE = tinymce.isIE,\r
+               blockRe = /^(H[1-6R]|P|DIV|ADDRESS|PRE|FORM|T(ABLE|BODY|HEAD|FOOT|H|R|D)|LI|OL|UL|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|MENU|ISINDEX|SAMP)$/,\r
+               boolAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'),\r
+               mceAttribs = makeMap('src,href,style,coords,shape'),\r
+               encodedChars = {'&' : '&amp;', '"' : '&quot;', '<' : '&lt;', '>' : '&gt;'},\r
+               encodeCharsRe = /[<>&\"]/g,\r
+               simpleSelectorRe = /^([a-z0-9],?)+$/i,\r
+               tagRegExp = /<(\w+)((?:\s+\w+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)(\s*\/?)>/g,\r
+               attrRegExp = /(\w+)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g;\r
+\r
+       function makeMap(str) {\r
+               var map = {}, i;\r
+\r
+               str = str.split(',');\r
+               for (i = str.length; i >= 0; i--)\r
+                       map[str[i]] = 1;\r
+\r
+               return map;\r
+       };\r
+\r
+       tinymce.create('tinymce.dom.DOMUtils', {\r
+               doc : null,\r
+               root : null,\r
+               files : null,\r
+               pixelStyles : /^(top|left|bottom|right|width|height|borderWidth)$/,\r
+               props : {\r
+                       "for" : "htmlFor",\r
+                       "class" : "className",\r
+                       className : "className",\r
+                       checked : "checked",\r
+                       disabled : "disabled",\r
+                       maxlength : "maxLength",\r
+                       readonly : "readOnly",\r
+                       selected : "selected",\r
+                       value : "value",\r
+                       id : "id",\r
+                       name : "name",\r
+                       type : "type"\r
+               },\r
+\r
+               DOMUtils : function(d, s) {\r
+                       var t = this, globalStyle;\r
+\r
+                       t.doc = d;\r
+                       t.win = window;\r
+                       t.files = {};\r
+                       t.cssFlicker = false;\r
+                       t.counter = 0;\r
+                       t.boxModel = !tinymce.isIE || d.compatMode == "CSS1Compat"; \r
+                       t.stdMode = d.documentMode === 8;\r
+\r
+                       t.settings = s = tinymce.extend({\r
+                               keep_values : false,\r
+                               hex_colors : 1,\r
+                               process_html : 1\r
+                       }, s);\r
+\r
+                       // Fix IE6SP2 flicker and check it failed for pre SP2\r
+                       if (tinymce.isIE6) {\r
+                               try {\r
+                                       d.execCommand('BackgroundImageCache', false, true);\r
+                               } catch (e) {\r
+                                       t.cssFlicker = true;\r
+                               }\r
+                       }\r
+\r
+                       // Build styles list\r
+                       if (s.valid_styles) {\r
+                               t._styles = {};\r
+\r
+                               // Convert styles into a rule list\r
+                               each(s.valid_styles, function(value, key) {\r
+                                       t._styles[key] = tinymce.explode(value);\r
+                               });\r
+                       }\r
+\r
+                       tinymce.addUnload(t.destroy, t);\r
+               },\r
+\r
+               getRoot : function() {\r
+                       var t = this, s = t.settings;\r
+\r
+                       return (s && t.get(s.root_element)) || t.doc.body;\r
+               },\r
+\r
+               getViewPort : function(w) {\r
+                       var d, b;\r
+\r
+                       w = !w ? this.win : w;\r
+                       d = w.document;\r
+                       b = this.boxModel ? d.documentElement : d.body;\r
+\r
+                       // Returns viewport size excluding scrollbars\r
+                       return {\r
+                               x : w.pageXOffset || b.scrollLeft,\r
+                               y : w.pageYOffset || b.scrollTop,\r
+                               w : w.innerWidth || b.clientWidth,\r
+                               h : w.innerHeight || b.clientHeight\r
+                       };\r
+               },\r
+\r
+               getRect : function(e) {\r
+                       var p, t = this, sr;\r
+\r
+                       e = t.get(e);\r
+                       p = t.getPos(e);\r
+                       sr = t.getSize(e);\r
+\r
+                       return {\r
+                               x : p.x,\r
+                               y : p.y,\r
+                               w : sr.w,\r
+                               h : sr.h\r
+                       };\r
+               },\r
+\r
+               getSize : function(e) {\r
+                       var t = this, w, h;\r
+\r
+                       e = t.get(e);\r
+                       w = t.getStyle(e, 'width');\r
+                       h = t.getStyle(e, 'height');\r
+\r
+                       // Non pixel value, then force offset/clientWidth\r
+                       if (w.indexOf('px') === -1)\r
+                               w = 0;\r
+\r
+                       // Non pixel value, then force offset/clientWidth\r
+                       if (h.indexOf('px') === -1)\r
+                               h = 0;\r
+\r
+                       return {\r
+                               w : parseInt(w) || e.offsetWidth || e.clientWidth,\r
+                               h : parseInt(h) || e.offsetHeight || e.clientHeight\r
+                       };\r
+               },\r
+\r
+               getParent : function(n, f, r) {\r
+                       return this.getParents(n, f, r, false);\r
+               },\r
+\r
+               getParents : function(n, f, r, c) {\r
+                       var t = this, na, se = t.settings, o = [];\r
+\r
+                       n = t.get(n);\r
+                       c = c === undefined;\r
+\r
+                       if (se.strict_root)\r
+                               r = r || t.getRoot();\r
+\r
+                       // Wrap node name as func\r
+                       if (is(f, 'string')) {\r
+                               na = f;\r
+\r
+                               if (f === '*') {\r
+                                       f = function(n) {return n.nodeType == 1;};\r
+                               } else {\r
+                                       f = function(n) {\r
+                                               return t.is(n, na);\r
+                                       };\r
+                               }\r
+                       }\r
+\r
+                       while (n) {\r
+                               if (n == r || !n.nodeType || n.nodeType === 9)\r
+                                       break;\r
+\r
+                               if (!f || f(n)) {\r
+                                       if (c)\r
+                                               o.push(n);\r
+                                       else\r
+                                               return n;\r
+                               }\r
+\r
+                               n = n.parentNode;\r
+                       }\r
+\r
+                       return c ? o : null;\r
+               },\r
+\r
+               get : function(e) {\r
+                       var n;\r
+\r
+                       if (e && this.doc && typeof(e) == 'string') {\r
+                               n = e;\r
+                               e = this.doc.getElementById(e);\r
+\r
+                               // IE and Opera returns meta elements when they match the specified input ID, but getElementsByName seems to do the trick\r
+                               if (e && e.id !== n)\r
+                                       return this.doc.getElementsByName(n)[1];\r
+                       }\r
+\r
+                       return e;\r
+               },\r
+\r
+               getNext : function(node, selector) {\r
+                       return this._findSib(node, selector, 'nextSibling');\r
+               },\r
+\r
+               getPrev : function(node, selector) {\r
+                       return this._findSib(node, selector, 'previousSibling');\r
+               },\r
+\r
+\r
+               add : function(p, n, a, h, c) {\r
+                       var t = this;\r
+\r
+                       return this.run(p, function(p) {\r
+                               var e, k;\r
+\r
+                               e = is(n, 'string') ? t.doc.createElement(n) : n;\r
+                               t.setAttribs(e, a);\r
+\r
+                               if (h) {\r
+                                       if (h.nodeType)\r
+                                               e.appendChild(h);\r
+                                       else\r
+                                               t.setHTML(e, h);\r
+                               }\r
+\r
+                               return !c ? p.appendChild(e) : e;\r
+                       });\r
+               },\r
+\r
+               create : function(n, a, h) {\r
+                       return this.add(this.doc.createElement(n), n, a, h, 1);\r
+               },\r
+\r
+               createHTML : function(n, a, h) {\r
+                       var o = '', t = this, k;\r
+\r
+                       o += '<' + n;\r
+\r
+                       for (k in a) {\r
+                               if (a.hasOwnProperty(k))\r
+                                       o += ' ' + k + '="' + t.encode(a[k]) + '"';\r
+                       }\r
+\r
+                       if (tinymce.is(h))\r
+                               return o + '>' + h + '</' + n + '>';\r
+\r
+                       return o + ' />';\r
+               },\r
+\r
+               remove : function(node, keep_children) {\r
+                       return this.run(node, function(node) {\r
+                               var parent, child;\r
+\r
+                               parent = node.parentNode;\r
+\r
+                               if (!parent)\r
+                                       return null;\r
+\r
+                               if (keep_children) {\r
+                                       while (child = node.firstChild) {\r
+                                               // IE 8 will crash if you don't remove completely empty text nodes\r
+                                               if (!tinymce.isIE || child.nodeType !== 3 || child.nodeValue)\r
+                                                       parent.insertBefore(child, node);\r
+                                               else\r
+                                                       node.removeChild(child);\r
+                                       }\r
+                               }\r
+\r
+                               return parent.removeChild(node);\r
+                       });\r
+               },\r
+\r
+               setStyle : function(n, na, v) {\r
+                       var t = this;\r
+\r
+                       return t.run(n, function(e) {\r
+                               var s, i;\r
+\r
+                               s = e.style;\r
+\r
+                               // Camelcase it, if needed\r
+                               na = na.replace(/-(\D)/g, function(a, b){\r
+                                       return b.toUpperCase();\r
+                               });\r
+\r
+                               // Default px suffix on these\r
+                               if (t.pixelStyles.test(na) && (tinymce.is(v, 'number') || /^[\-0-9\.]+$/.test(v)))\r
+                                       v += 'px';\r
+\r
+                               switch (na) {\r
+                                       case 'opacity':\r
+                                               // IE specific opacity\r
+                                               if (isIE) {\r
+                                                       s.filter = v === '' ? '' : "alpha(opacity=" + (v * 100) + ")";\r
+\r
+                                                       if (!n.currentStyle || !n.currentStyle.hasLayout)\r
+                                                               s.display = 'inline-block';\r
+                                               }\r
+\r
+                                               // Fix for older browsers\r
+                                               s[na] = s['-moz-opacity'] = s['-khtml-opacity'] = v || '';\r
+                                               break;\r
+\r
+                                       case 'float':\r
+                                               isIE ? s.styleFloat = v : s.cssFloat = v;\r
+                                               break;\r
+                                       \r
+                                       default:\r
+                                               s[na] = v || '';\r
+                               }\r
+\r
+                               // Force update of the style data\r
+                               if (t.settings.update_styles)\r
+                                       t.setAttrib(e, '_mce_style');\r
+                       });\r
+               },\r
+\r
+               getStyle : function(n, na, c) {\r
+                       n = this.get(n);\r
+\r
+                       if (!n)\r
+                               return false;\r
+\r
+                       // Gecko\r
+                       if (this.doc.defaultView && c) {\r
+                               // Remove camelcase\r
+                               na = na.replace(/[A-Z]/g, function(a){\r
+                                       return '-' + a;\r
+                               });\r
+\r
+                               try {\r
+                                       return this.doc.defaultView.getComputedStyle(n, null).getPropertyValue(na);\r
+                               } catch (ex) {\r
+                                       // Old safari might fail\r
+                                       return null;\r
+                               }\r
+                       }\r
+\r
+                       // Camelcase it, if needed\r
+                       na = na.replace(/-(\D)/g, function(a, b){\r
+                               return b.toUpperCase();\r
+                       });\r
+\r
+                       if (na == 'float')\r
+                               na = isIE ? 'styleFloat' : 'cssFloat';\r
+\r
+                       // IE & Opera\r
+                       if (n.currentStyle && c)\r
+                               return n.currentStyle[na];\r
+\r
+                       return n.style[na];\r
+               },\r
+\r
+               setStyles : function(e, o) {\r
+                       var t = this, s = t.settings, ol;\r
+\r
+                       ol = s.update_styles;\r
+                       s.update_styles = 0;\r
+\r
+                       each(o, function(v, n) {\r
+                               t.setStyle(e, n, v);\r
+                       });\r
+\r
+                       // Update style info\r
+                       s.update_styles = ol;\r
+                       if (s.update_styles)\r
+                               t.setAttrib(e, s.cssText);\r
+               },\r
+\r
+               setAttrib : function(e, n, v) {\r
+                       var t = this;\r
+\r
+                       // Whats the point\r
+                       if (!e || !n)\r
+                               return;\r
+\r
+                       // Strict XML mode\r
+                       if (t.settings.strict)\r
+                               n = n.toLowerCase();\r
+\r
+                       return this.run(e, function(e) {\r
+                               var s = t.settings;\r
+\r
+                               switch (n) {\r
+                                       case "style":\r
+                                               if (!is(v, 'string')) {\r
+                                                       each(v, function(v, n) {\r
+                                                               t.setStyle(e, n, v);\r
+                                                       });\r
+\r
+                                                       return;\r
+                                               }\r
+\r
+                                               // No mce_style for elements with these since they might get resized by the user\r
+                                               if (s.keep_values) {\r
+                                                       if (v && !t._isRes(v))\r
+                                                               e.setAttribute('_mce_style', v, 2);\r
+                                                       else\r
+                                                               e.removeAttribute('_mce_style', 2);\r
+                                               }\r
+\r
+                                               e.style.cssText = v;\r
+                                               break;\r
+\r
+                                       case "class":\r
+                                               e.className = v || ''; // Fix IE null bug\r
+                                               break;\r
+\r
+                                       case "src":\r
+                                       case "href":\r
+                                               if (s.keep_values) {\r
+                                                       if (s.url_converter)\r
+                                                               v = s.url_converter.call(s.url_converter_scope || t, v, n, e);\r
+\r
+                                                       t.setAttrib(e, '_mce_' + n, v, 2);\r
+                                               }\r
+\r
+                                               break;\r
+                                       \r
+                                       case "shape":\r
+                                               e.setAttribute('_mce_style', v);\r
+                                               break;\r
+                               }\r
+\r
+                               if (is(v) && v !== null && v.length !== 0)\r
+                                       e.setAttribute(n, '' + v, 2);\r
+                               else\r
+                                       e.removeAttribute(n, 2);\r
+                       });\r
+               },\r
+\r
+               setAttribs : function(e, o) {\r
+                       var t = this;\r
+\r
+                       return this.run(e, function(e) {\r
+                               each(o, function(v, n) {\r
+                                       t.setAttrib(e, n, v);\r
+                               });\r
+                       });\r
+               },\r
+\r
+               getAttrib : function(e, n, dv) {\r
+                       var v, t = this;\r
+\r
+                       e = t.get(e);\r
+\r
+                       if (!e || e.nodeType !== 1)\r
+                               return false;\r
+\r
+                       if (!is(dv))\r
+                               dv = '';\r
+\r
+                       // Try the mce variant for these\r
+                       if (/^(src|href|style|coords|shape)$/.test(n)) {\r
+                               v = e.getAttribute("_mce_" + n);\r
+\r
+                               if (v)\r
+                                       return v;\r
+                       }\r
+\r
+                       if (isIE && t.props[n]) {\r
+                               v = e[t.props[n]];\r
+                               v = v && v.nodeValue ? v.nodeValue : v;\r
+                       }\r
+\r
+                       if (!v)\r
+                               v = e.getAttribute(n, 2);\r
+\r
+                       // Check boolean attribs\r
+                       if (/^(checked|compact|declare|defer|disabled|ismap|multiple|nohref|noshade|nowrap|readonly|selected)$/.test(n)) {\r
+                               if (e[t.props[n]] === true && v === '')\r
+                                       return n;\r
+\r
+                               return v ? n : '';\r
+                       }\r
+\r
+                       // Inner input elements will override attributes on form elements\r
+                       if (e.nodeName === "FORM" && e.getAttributeNode(n))\r
+                               return e.getAttributeNode(n).nodeValue;\r
+\r
+                       if (n === 'style') {\r
+                               v = v || e.style.cssText;\r
+\r
+                               if (v) {\r
+                                       v = t.serializeStyle(t.parseStyle(v), e.nodeName);\r
+\r
+                                       if (t.settings.keep_values && !t._isRes(v))\r
+                                               e.setAttribute('_mce_style', v);\r
+                               }\r
+                       }\r
+\r
+                       // Remove Apple and WebKit stuff\r
+                       if (isWebKit && n === "class" && v)\r
+                               v = v.replace(/(apple|webkit)\-[a-z\-]+/gi, '');\r
+\r
+                       // Handle IE issues\r
+                       if (isIE) {\r
+                               switch (n) {\r
+                                       case 'rowspan':\r
+                                       case 'colspan':\r
+                                               // IE returns 1 as default value\r
+                                               if (v === 1)\r
+                                                       v = '';\r
+\r
+                                               break;\r
+\r
+                                       case 'size':\r
+                                               // IE returns +0 as default value for size\r
+                                               if (v === '+0' || v === 20 || v === 0)\r
+                                                       v = '';\r
+\r
+                                               break;\r
+\r
+                                       case 'width':\r
+                                       case 'height':\r
+                                       case 'vspace':\r
+                                       case 'checked':\r
+                                       case 'disabled':\r
+                                       case 'readonly':\r
+                                               if (v === 0)\r
+                                                       v = '';\r
+\r
+                                               break;\r
+\r
+                                       case 'hspace':\r
+                                               // IE returns -1 as default value\r
+                                               if (v === -1)\r
+                                                       v = '';\r
+\r
+                                               break;\r
+\r
+                                       case 'maxlength':\r
+                                       case 'tabindex':\r
+                                               // IE returns default value\r
+                                               if (v === 32768 || v === 2147483647 || v === '32768')\r
+                                                       v = '';\r
+\r
+                                               break;\r
+\r
+                                       case 'multiple':\r
+                                       case 'compact':\r
+                                       case 'noshade':\r
+                                       case 'nowrap':\r
+                                               if (v === 65535)\r
+                                                       return n;\r
+\r
+                                               return dv;\r
+\r
+                                       case 'shape':\r
+                                               v = v.toLowerCase();\r
+                                               break;\r
+\r
+                                       default:\r
+                                               // IE has odd anonymous function for event attributes\r
+                                               if (n.indexOf('on') === 0 && v)\r
+                                                       v = ('' + v).replace(/^function\s+\w+\(\)\s+\{\s+(.*)\s+\}$/, '$1');\r
+                               }\r
+                       }\r
+\r
+                       return (v !== undefined && v !== null && v !== '') ? '' + v : dv;\r
+               },\r
+\r
+               getPos : function(n, ro) {\r
+                       var t = this, x = 0, y = 0, e, d = t.doc, r;\r
+\r
+                       n = t.get(n);\r
+                       ro = ro || d.body;\r
+\r
+                       if (n) {\r
+                               // Use getBoundingClientRect on IE, Opera has it but it's not perfect\r
+                               if (isIE && !t.stdMode) {\r
+                                       n = n.getBoundingClientRect();\r
+                                       e = t.boxModel ? d.documentElement : d.body;\r
+                                       x = t.getStyle(t.select('html')[0], 'borderWidth'); // Remove border\r
+                                       x = (x == 'medium' || t.boxModel && !t.isIE6) && 2 || x;\r
+\r
+                                       return {x : n.left + e.scrollLeft - x, y : n.top + e.scrollTop - x};\r
+                               }\r
+\r
+                               r = n;\r
+                               while (r && r != ro && r.nodeType) {\r
+                                       x += r.offsetLeft || 0;\r
+                                       y += r.offsetTop || 0;\r
+                                       r = r.offsetParent;\r
+                               }\r
+\r
+                               r = n.parentNode;\r
+                               while (r && r != ro && r.nodeType) {\r
+                                       x -= r.scrollLeft || 0;\r
+                                       y -= r.scrollTop || 0;\r
+                                       r = r.parentNode;\r
+                               }\r
+                       }\r
+\r
+                       return {x : x, y : y};\r
+               },\r
+\r
+               parseStyle : function(st) {\r
+                       var t = this, s = t.settings, o = {};\r
+\r
+                       if (!st)\r
+                               return o;\r
+\r
+                       function compress(p, s, ot) {\r
+                               var t, r, b, l;\r
+\r
+                               // Get values and check it it needs compressing\r
+                               t = o[p + '-top' + s];\r
+                               if (!t)\r
+                                       return;\r
+\r
+                               r = o[p + '-right' + s];\r
+                               if (t != r)\r
+                                       return;\r
+\r
+                               b = o[p + '-bottom' + s];\r
+                               if (r != b)\r
+                                       return;\r
+\r
+                               l = o[p + '-left' + s];\r
+                               if (b != l)\r
+                                       return;\r
+\r
+                               // Compress\r
+                               o[ot] = l;\r
+                               delete o[p + '-top' + s];\r
+                               delete o[p + '-right' + s];\r
+                               delete o[p + '-bottom' + s];\r
+                               delete o[p + '-left' + s];\r
+                       };\r
+\r
+                       function compress2(ta, a, b, c) {\r
+                               var t;\r
+\r
+                               t = o[a];\r
+                               if (!t)\r
+                                       return;\r
+\r
+                               t = o[b];\r
+                               if (!t)\r
+                                       return;\r
+\r
+                               t = o[c];\r
+                               if (!t)\r
+                                       return;\r
+\r
+                               // Compress\r
+                               o[ta] = o[a] + ' ' + o[b] + ' ' + o[c];\r
+                               delete o[a];\r
+                               delete o[b];\r
+                               delete o[c];\r
+                       };\r
+\r
+                       st = st.replace(/&(#?[a-z0-9]+);/g, '&$1_MCE_SEMI_'); // Protect entities\r
+\r
+                       each(st.split(';'), function(v) {\r
+                               var sv, ur = [];\r
+\r
+                               if (v) {\r
+                                       v = v.replace(/_MCE_SEMI_/g, ';'); // Restore entities\r
+                                       v = v.replace(/url\([^\)]+\)/g, function(v) {ur.push(v);return 'url(' + ur.length + ')';});\r
+                                       v = v.split(':');\r
+                                       sv = tinymce.trim(v[1]);\r
+                                       sv = sv.replace(/url\(([^\)]+)\)/g, function(a, b) {return ur[parseInt(b) - 1];});\r
+\r
+                                       sv = sv.replace(/rgb\([^\)]+\)/g, function(v) {\r
+                                               return t.toHex(v);\r
+                                       });\r
+\r
+                                       if (s.url_converter) {\r
+                                               sv = sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g, function(x, c) {\r
+                                                       return 'url(' + s.url_converter.call(s.url_converter_scope || t, t.decode(c), 'style', null) + ')';\r
+                                               });\r
+                                       }\r
+\r
+                                       o[tinymce.trim(v[0]).toLowerCase()] = sv;\r
+                               }\r
+                       });\r
+\r
+                       compress("border", "", "border");\r
+                       compress("border", "-width", "border-width");\r
+                       compress("border", "-color", "border-color");\r
+                       compress("border", "-style", "border-style");\r
+                       compress("padding", "", "padding");\r
+                       compress("margin", "", "margin");\r
+                       compress2('border', 'border-width', 'border-style', 'border-color');\r
+\r
+                       if (isIE) {\r
+                               // Remove pointless border\r
+                               if (o.border == 'medium none')\r
+                                       o.border = '';\r
+                       }\r
+\r
+                       return o;\r
+               },\r
+\r
+               serializeStyle : function(o, name) {\r
+                       var t = this, s = '';\r
+\r
+                       function add(v, k) {\r
+                               if (k && v) {\r
+                                       // Remove browser specific styles like -moz- or -webkit-\r
+                                       if (k.indexOf('-') === 0)\r
+                                               return;\r
+\r
+                                       switch (k) {\r
+                                               case 'font-weight':\r
+                                                       // Opera will output bold as 700\r
+                                                       if (v == 700)\r
+                                                               v = 'bold';\r
+\r
+                                                       break;\r
+\r
+                                               case 'color':\r
+                                               case 'background-color':\r
+                                                       v = v.toLowerCase();\r
+                                                       break;\r
+                                       }\r
+\r
+                                       s += (s ? ' ' : '') + k + ': ' + v + ';';\r
+                               }\r
+                       };\r
+\r
+                       // Validate style output\r
+                       if (name && t._styles) {\r
+                               each(t._styles['*'], function(name) {\r
+                                       add(o[name], name);\r
+                               });\r
+\r
+                               each(t._styles[name.toLowerCase()], function(name) {\r
+                                       add(o[name], name);\r
+                               });\r
+                       } else\r
+                               each(o, add);\r
+\r
+                       return s;\r
+               },\r
+\r
+               loadCSS : function(u) {\r
+                       var t = this, d = t.doc, head;\r
+\r
+                       if (!u)\r
+                               u = '';\r
+\r
+                       head = t.select('head')[0];\r
+\r
+                       each(u.split(','), function(u) {\r
+                               var link;\r
+\r
+                               if (t.files[u])\r
+                                       return;\r
+\r
+                               t.files[u] = true;\r
+                               link = t.create('link', {rel : 'stylesheet', href : tinymce._addVer(u)});\r
+\r
+                               // IE 8 has a bug where dynamically loading stylesheets would produce a 1 item remaining bug\r
+                               // This fix seems to resolve that issue by realcing the document ones a stylesheet finishes loading\r
+                               // It's ugly but it seems to work fine.\r
+                               if (isIE && d.documentMode) {\r
+                                       link.onload = function() {\r
+                                               d.recalc();\r
+                                               link.onload = null;\r
+                                       };\r
+                               }\r
+\r
+                               head.appendChild(link);\r
+                       });\r
+               },\r
+\r
+               addClass : function(e, c) {\r
+                       return this.run(e, function(e) {\r
+                               var o;\r
+\r
+                               if (!c)\r
+                                       return 0;\r
+\r
+                               if (this.hasClass(e, c))\r
+                                       return e.className;\r
+\r
+                               o = this.removeClass(e, c);\r
+\r
+                               return e.className = (o != '' ? (o + ' ') : '') + c;\r
+                       });\r
+               },\r
+\r
+               removeClass : function(e, c) {\r
+                       var t = this, re;\r
+\r
+                       return t.run(e, function(e) {\r
+                               var v;\r
+\r
+                               if (t.hasClass(e, c)) {\r
+                                       if (!re)\r
+                                               re = new RegExp("(^|\\s+)" + c + "(\\s+|$)", "g");\r
+\r
+                                       v = e.className.replace(re, ' ');\r
+                                       v = tinymce.trim(v != ' ' ? v : '');\r
+\r
+                                       e.className = v;\r
+\r
+                                       // Empty class attr\r
+                                       if (!v) {\r
+                                               e.removeAttribute('class');\r
+                                               e.removeAttribute('className');\r
+                                       }\r
+\r
+                                       return v;\r
+                               }\r
+\r
+                               return e.className;\r
+                       });\r
+               },\r
+\r
+               hasClass : function(n, c) {\r
+                       n = this.get(n);\r
+\r
+                       if (!n || !c)\r
+                               return false;\r
+\r
+                       return (' ' + n.className + ' ').indexOf(' ' + c + ' ') !== -1;\r
+               },\r
+\r
+               show : function(e) {\r
+                       return this.setStyle(e, 'display', 'block');\r
+               },\r
+\r
+               hide : function(e) {\r
+                       return this.setStyle(e, 'display', 'none');\r
+               },\r
+\r
+               isHidden : function(e) {\r
+                       e = this.get(e);\r
+\r
+                       return !e || e.style.display == 'none' || this.getStyle(e, 'display') == 'none';\r
+               },\r
+\r
+               uniqueId : function(p) {\r
+                       return (!p ? 'mce_' : p) + (this.counter++);\r
+               },\r
+\r
+               setHTML : function(e, h) {\r
+                       var t = this;\r
+\r
+                       return this.run(e, function(e) {\r
+                               var x, i, nl, n, p, x;\r
+\r
+                               h = t.processHTML(h);\r
+\r
+                               if (isIE) {\r
+                                       function set() {\r
+                                               // Remove all child nodes\r
+                                               while (e.firstChild)\r
+                                                       e.firstChild.removeNode();\r
+\r
+                                               try {\r
+                                                       // IE will remove comments from the beginning\r
+                                                       // unless you padd the contents with something\r
+                                                       e.innerHTML = '<br />' + h;\r
+                                                       e.removeChild(e.firstChild);\r
+                                               } catch (ex) {\r
+                                                       // IE sometimes produces an unknown runtime error on innerHTML if it's an block element within a block element for example a div inside a p\r
+                                                       // This seems to fix this problem\r
+\r
+                                                       // Create new div with HTML contents and a BR infront to keep comments\r
+                                                       x = t.create('div');\r
+                                                       x.innerHTML = '<br />' + h;\r
+\r
+                                                       // Add all children from div to target\r
+                                                       each (x.childNodes, function(n, i) {\r
+                                                               // Skip br element\r
+                                                               if (i)\r
+                                                                       e.appendChild(n);\r
+                                                       });\r
+                                               }\r
+                                       };\r
+\r
+                                       // IE has a serious bug when it comes to paragraphs it can produce an invalid\r
+                                       // DOM tree if contents like this <p><ul><li>Item 1</li></ul></p> is inserted\r
+                                       // It seems to be that IE doesn't like a root block element placed inside another root block element\r
+                                       if (t.settings.fix_ie_paragraphs)\r
+                                               h = h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi, '<p$1 _mce_keep="true">&nbsp;</p>');\r
+\r
+                                       set();\r
+\r
+                                       if (t.settings.fix_ie_paragraphs) {\r
+                                               // Check for odd paragraphs this is a sign of a broken DOM\r
+                                               nl = e.getElementsByTagName("p");\r
+                                               for (i = nl.length - 1, x = 0; i >= 0; i--) {\r
+                                                       n = nl[i];\r
+\r
+                                                       if (!n.hasChildNodes()) {\r
+                                                               if (!n._mce_keep) {\r
+                                                                       x = 1; // Is broken\r
+                                                                       break;\r
+                                                               }\r
+\r
+                                                               n.removeAttribute('_mce_keep');\r
+                                                       }\r
+                                               }\r
+                                       }\r
+\r
+                                       // Time to fix the madness IE left us\r
+                                       if (x) {\r
+                                               // So if we replace the p elements with divs and mark them and then replace them back to paragraphs\r
+                                               // after we use innerHTML we can fix the DOM tree\r
+                                               h = h.replace(/<p ([^>]+)>|<p>/ig, '<div $1 _mce_tmp="1">');\r
+                                               h = h.replace(/<\/p>/gi, '</div>');\r
+\r
+                                               // Set the new HTML with DIVs\r
+                                               set();\r
+\r
+                                               // Replace all DIV elements with the _mce_tmp attibute back to paragraphs\r
+                                               // This is needed since IE has a annoying bug see above for details\r
+                                               // This is a slow process but it has to be done. :(\r
+                                               if (t.settings.fix_ie_paragraphs) {\r
+                                                       nl = e.getElementsByTagName("DIV");\r
+                                                       for (i = nl.length - 1; i >= 0; i--) {\r
+                                                               n = nl[i];\r
+\r
+                                                               // Is it a temp div\r
+                                                               if (n._mce_tmp) {\r
+                                                                       // Create new paragraph\r
+                                                                       p = t.doc.createElement('p');\r
+\r
+                                                                       // Copy all attributes\r
+                                                                       n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi, function(a, b) {\r
+                                                                               var v;\r
+\r
+                                                                               if (b !== '_mce_tmp') {\r
+                                                                                       v = n.getAttribute(b);\r
+\r
+                                                                                       if (!v && b === 'class')\r
+                                                                                               v = n.className;\r
+\r
+                                                                                       p.setAttribute(b, v);\r
+                                                                               }\r
+                                                                       });\r
+\r
+                                                                       // Append all children to new paragraph\r
+                                                                       for (x = 0; x<n.childNodes.length; x++)\r
+                                                                               p.appendChild(n.childNodes[x].cloneNode(true));\r
+\r
+                                                                       // Replace div with new paragraph\r
+                                                                       n.swapNode(p);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               } else\r
+                                       e.innerHTML = h;\r
+\r
+                               return h;\r
+                       });\r
+               },\r
+\r
+               processHTML : function(h) {\r
+                       var t = this, s = t.settings, codeBlocks = [];\r
+\r
+                       if (!s.process_html)\r
+                               return h;\r
+\r
+                       if (isIE) {\r
+                               h = h.replace(/&apos;/g, '&#39;'); // IE can't handle apos\r
+                               h = h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi, ''); // IE doesn't handle default values correct\r
+                       }\r
+\r
+                       // Fix some issues\r
+                       h = h.replace(/<a( )([^>]+)\/>|<a\/>/gi, '<a$1$2></a>'); // Force open\r
+\r
+                       // Store away src and href in _mce_src and mce_href since browsers mess them up\r
+                       if (s.keep_values) {\r
+                               // Wrap scripts and styles in comments for serialization purposes\r
+                               if (/<script|noscript|style/i.test(h)) {\r
+                                       function trim(s) {\r
+                                               // Remove prefix and suffix code for element\r
+                                               s = s.replace(/(<!--\[CDATA\[|\]\]-->)/g, '\n');\r
+                                               s = s.replace(/^[\r\n]*|[\r\n]*$/g, '');\r
+                                               s = s.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g, '');\r
+                                               s = s.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g, '');\r
+\r
+                                               return s;\r
+                                       };\r
+\r
+                                       // Wrap the script contents in CDATA and keep them from executing\r
+                                       h = h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/gi, function(v, attribs, text) {\r
+                                               // Force type attribute\r
+                                               if (!attribs)\r
+                                                       attribs = ' type="text/javascript"';\r
+\r
+                                               // Convert the src attribute of the scripts\r
+                                               attribs = attribs.replace(/src=\"([^\"]+)\"?/i, function(a, url) {\r
+                                                       if (s.url_converter)\r
+                                                               url = t.encode(s.url_converter.call(s.url_converter_scope || t, t.decode(url), 'src', 'script'));\r
+\r
+                                                       return '_mce_src="' + url + '"';\r
+                                               });\r
+\r
+                                               // Wrap text contents\r
+                                               if (tinymce.trim(text)) {\r
+                                                       codeBlocks.push(trim(text));\r
+                                                       text = '<!--\nMCE_SCRIPT:' + (codeBlocks.length - 1) + '\n// -->';\r
+                                               }\r
+\r
+                                               return '<mce:script' + attribs + '>' + text + '</mce:script>';\r
+                                       });\r
+\r
+                                       // Wrap style elements\r
+                                       h = h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/gi, function(v, attribs, text) {\r
+                                               // Wrap text contents\r
+                                               if (text) {\r
+                                                       codeBlocks.push(trim(text));\r
+                                                       text = '<!--\nMCE_SCRIPT:' + (codeBlocks.length - 1) + '\n-->';\r
+                                               }\r
+\r
+                                               return '<mce:style' + attribs + '>' + text + '</mce:style><style ' + attribs + ' _mce_bogus="1">' + text + '</style>';\r
+                                       });\r
+\r
+                                       // Wrap noscript elements\r
+                                       h = h.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g, function(v, attribs, text) {\r
+                                               return '<mce:noscript' + attribs + '><!--' + t.encode(text).replace(/--/g, '&#45;&#45;') + '--></mce:noscript>';\r
+                                       });\r
+                               }\r
+\r
+                               h = h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g, '<!--[CDATA[$1]]-->');\r
+\r
+                               // This function processes the attributes in the HTML string to force boolean\r
+                               // attributes to the attr="attr" format and convert style, src and href to _mce_ versions\r
+                               function processTags(html) {\r
+                                       return html.replace(tagRegExp, function(match, elm_name, attrs, end) {\r
+                                               return '<' + elm_name + attrs.replace(attrRegExp, function(match, name, value, val2, val3) {\r
+                                                       var mceValue;\r
+\r
+                                                       name = name.toLowerCase();\r
+                                                       value = value || val2 || val3 || "";\r
+\r
+                                                       // Treat boolean attributes\r
+                                                       if (boolAttrs[name]) {\r
+                                                               // false or 0 is treated as a missing attribute\r
+                                                               if (value === 'false' || value === '0')\r
+                                                                       return;\r
+\r
+                                                               return name + '="' + name + '"';\r
+                                                       }\r
+\r
+                                                       // Is attribute one that needs special treatment\r
+                                                       if (mceAttribs[name] && attrs.indexOf('_mce_' + name) == -1) {\r
+                                                               mceValue = t.decode(value);\r
+\r
+                                                               // Convert URLs to relative/absolute ones\r
+                                                               if (s.url_converter && (name == "src" || name == "href"))\r
+                                                                       mceValue = s.url_converter.call(s.url_converter_scope || t, mceValue, name, elm_name);\r
+\r
+                                                               // Process styles lowercases them and compresses them\r
+                                                               if (name == 'style')\r
+                                                                       mceValue = t.serializeStyle(t.parseStyle(mceValue), name);\r
+\r
+                                                               return name + '="' + value + '"' + ' _mce_' + name + '="' + t.encode(mceValue) + '"';\r
+                                                       }\r
+\r
+                                                       return match;\r
+                                               }) + end + '>';\r
+                                       });\r
+                               };\r
+\r
+                               h = processTags(h);\r
+\r
+                               // Restore script blocks\r
+                               h = h.replace(/MCE_SCRIPT:([0-9]+)/g, function(val, idx) {\r
+                                       return codeBlocks[idx];\r
+                               });\r
+                       }\r
+\r
+                       return h;\r
+               },\r
+\r
+               getOuterHTML : function(e) {\r
+                       var d;\r
+\r
+                       e = this.get(e);\r
+\r
+                       if (!e)\r
+                               return null;\r
+\r
+                       if (e.outerHTML !== undefined)\r
+                               return e.outerHTML;\r
+\r
+                       d = (e.ownerDocument || this.doc).createElement("body");\r
+                       d.appendChild(e.cloneNode(true));\r
+\r
+                       return d.innerHTML;\r
+               },\r
+\r
+               setOuterHTML : function(e, h, d) {\r
+                       var t = this;\r
+\r
+                       function setHTML(e, h, d) {\r
+                               var n, tp;\r
+\r
+                               tp = d.createElement("body");\r
+                               tp.innerHTML = h;\r
+\r
+                               n = tp.lastChild;\r
+                               while (n) {\r
+                                       t.insertAfter(n.cloneNode(true), e);\r
+                                       n = n.previousSibling;\r
+                               }\r
+\r
+                               t.remove(e);\r
+                       };\r
+\r
+                       return this.run(e, function(e) {\r
+                               e = t.get(e);\r
+\r
+                               // Only set HTML on elements\r
+                               if (e.nodeType == 1) {\r
+                                       d = d || e.ownerDocument || t.doc;\r
+\r
+                                       if (isIE) {\r
+                                               try {\r
+                                                       // Try outerHTML for IE it sometimes produces an unknown runtime error\r
+                                                       if (isIE && e.nodeType == 1)\r
+                                                               e.outerHTML = h;\r
+                                                       else\r
+                                                               setHTML(e, h, d);\r
+                                               } catch (ex) {\r
+                                                       // Fix for unknown runtime error\r
+                                                       setHTML(e, h, d);\r
+                                               }\r
+                                       } else\r
+                                               setHTML(e, h, d);\r
+                               }\r
+                       });\r
+               },\r
+\r
+               decode : function(s) {\r
+                       var e, n, v;\r
+\r
+                       // Look for entities to decode\r
+                       if (/&[\w#]+;/.test(s)) {\r
+                               // Decode the entities using a div element not super efficient but less code\r
+                               e = this.doc.createElement("div");\r
+                               e.innerHTML = s;\r
+                               n = e.firstChild;\r
+                               v = '';\r
+\r
+                               if (n) {\r
+                                       do {\r
+                                               v += n.nodeValue;\r
+                                       } while (n = n.nextSibling);\r
+                               }\r
+\r
+                               return v || s;\r
+                       }\r
+\r
+                       return s;\r
+               },\r
+\r
+               encode : function(str) {\r
+                       return ('' + str).replace(encodeCharsRe, function(chr) {\r
+                               return encodedChars[chr];\r
+                       });\r
+               },\r
+\r
+               insertAfter : function(node, reference_node) {\r
+                       reference_node = this.get(reference_node);\r
+\r
+                       return this.run(node, function(node) {\r
+                               var parent, nextSibling;\r
+\r
+                               parent = reference_node.parentNode;\r
+                               nextSibling = reference_node.nextSibling;\r
+\r
+                               if (nextSibling)\r
+                                       parent.insertBefore(node, nextSibling);\r
+                               else\r
+                                       parent.appendChild(node);\r
+\r
+                               return node;\r
+                       });\r
+               },\r
+\r
+               isBlock : function(n) {\r
+                       if (n.nodeType && n.nodeType !== 1)\r
+                               return false;\r
+\r
+                       n = n.nodeName || n;\r
+\r
+                       return blockRe.test(n);\r
+               },\r
+\r
+               replace : function(n, o, k) {\r
+                       var t = this;\r
+\r
+                       if (is(o, 'array'))\r
+                               n = n.cloneNode(true);\r
+\r
+                       return t.run(o, function(o) {\r
+                               if (k) {\r
+                                       each(tinymce.grep(o.childNodes), function(c) {\r
+                                               n.appendChild(c);\r
+                                       });\r
+                               }\r
+\r
+                               return o.parentNode.replaceChild(n, o);\r
+                       });\r
+               },\r
+\r
+               rename : function(elm, name) {\r
+                       var t = this, newElm;\r
+\r
+                       if (elm.nodeName != name.toUpperCase()) {\r
+                               // Rename block element\r
+                               newElm = t.create(name);\r
+\r
+                               // Copy attribs to new block\r
+                               each(t.getAttribs(elm), function(attr_node) {\r
+                                       t.setAttrib(newElm, attr_node.nodeName, t.getAttrib(elm, attr_node.nodeName));\r
+                               });\r
+\r
+                               // Replace block\r
+                               t.replace(newElm, elm, 1);\r
+                       }\r
+\r
+                       return newElm || elm;\r
+               },\r
+\r
+               findCommonAncestor : function(a, b) {\r
+                       var ps = a, pe;\r
+\r
+                       while (ps) {\r
+                               pe = b;\r
+\r
+                               while (pe && ps != pe)\r
+                                       pe = pe.parentNode;\r
+\r
+                               if (ps == pe)\r
+                                       break;\r
+\r
+                               ps = ps.parentNode;\r
+                       }\r
+\r
+                       if (!ps && a.ownerDocument)\r
+                               return a.ownerDocument.documentElement;\r
+\r
+                       return ps;\r
+               },\r
+\r
+               toHex : function(s) {\r
+                       var c = /^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);\r
+\r
+                       function hex(s) {\r
+                               s = parseInt(s).toString(16);\r
+\r
+                               return s.length > 1 ? s : '0' + s; // 0 -> 00\r
+                       };\r
+\r
+                       if (c) {\r
+                               s = '#' + hex(c[1]) + hex(c[2]) + hex(c[3]);\r
+\r
+                               return s;\r
+                       }\r
+\r
+                       return s;\r
+               },\r
+\r
+               getClasses : function() {\r
+                       var t = this, cl = [], i, lo = {}, f = t.settings.class_filter, ov;\r
+\r
+                       if (t.classes)\r
+                               return t.classes;\r
+\r
+                       function addClasses(s) {\r
+                               // IE style imports\r
+                               each(s.imports, function(r) {\r
+                                       addClasses(r);\r
+                               });\r
+\r
+                               each(s.cssRules || s.rules, function(r) {\r
+                                       // Real type or fake it on IE\r
+                                       switch (r.type || 1) {\r
+                                               // Rule\r
+                                               case 1:\r
+                                                       if (r.selectorText) {\r
+                                                               each(r.selectorText.split(','), function(v) {\r
+                                                                       v = v.replace(/^\s*|\s*$|^\s\./g, "");\r
+\r
+                                                                       // Is internal or it doesn't contain a class\r
+                                                                       if (/\.mce/.test(v) || !/\.[\w\-]+$/.test(v))\r
+                                                                               return;\r
+\r
+                                                                       // Remove everything but class name\r
+                                                                       ov = v;\r
+                                                                       v = v.replace(/.*\.([a-z0-9_\-]+).*/i, '$1');\r
+\r
+                                                                       // Filter classes\r
+                                                                       if (f && !(v = f(v, ov)))\r
+                                                                               return;\r
+\r
+                                                                       if (!lo[v]) {\r
+                                                                               cl.push({'class' : v});\r
+                                                                               lo[v] = 1;\r
+                                                                       }\r
+                                                               });\r
+                                                       }\r
+                                                       break;\r
+\r
+                                               // Import\r
+                                               case 3:\r
+                                                       addClasses(r.styleSheet);\r
+                                                       break;\r
+                                       }\r
+                               });\r
+                       };\r
+\r
+                       try {\r
+                               each(t.doc.styleSheets, addClasses);\r
+                       } catch (ex) {\r
+                               // Ignore\r
+                       }\r
+\r
+                       if (cl.length > 0)\r
+                               t.classes = cl;\r
+\r
+                       return cl;\r
+               },\r
+\r
+               run : function(e, f, s) {\r
+                       var t = this, o;\r
+\r
+                       if (t.doc && typeof(e) === 'string')\r
+                               e = t.get(e);\r
+\r
+                       if (!e)\r
+                               return false;\r
+\r
+                       s = s || this;\r
+                       if (!e.nodeType && (e.length || e.length === 0)) {\r
+                               o = [];\r
+\r
+                               each(e, function(e, i) {\r
+                                       if (e) {\r
+                                               if (typeof(e) == 'string')\r
+                                                       e = t.doc.getElementById(e);\r
+\r
+                                               o.push(f.call(s, e, i));\r
+                                       }\r
+                               });\r
+\r
+                               return o;\r
+                       }\r
+\r
+                       return f.call(s, e);\r
+               },\r
+\r
+               getAttribs : function(n) {\r
+                       var o;\r
+\r
+                       n = this.get(n);\r
+\r
+                       if (!n)\r
+                               return [];\r
+\r
+                       if (isIE) {\r
+                               o = [];\r
+\r
+                               // Object will throw exception in IE\r
+                               if (n.nodeName == 'OBJECT')\r
+                                       return n.attributes;\r
+\r
+                               // IE doesn't keep the selected attribute if you clone option elements\r
+                               if (n.nodeName === 'OPTION' && this.getAttrib(n, 'selected'))\r
+                                       o.push({specified : 1, nodeName : 'selected'});\r
+\r
+                               // It's crazy that this is faster in IE but it's because it returns all attributes all the time\r
+                               n.cloneNode(false).outerHTML.replace(/<\/?[\w:\-]+ ?|=[\"][^\"]+\"|=\'[^\']+\'|=[\w\-]+|>/gi, '').replace(/[\w:\-]+/gi, function(a) {\r
+                                       o.push({specified : 1, nodeName : a});\r
+                               });\r
+\r
+                               return o;\r
+                       }\r
+\r
+                       return n.attributes;\r
+               },\r
+\r
+               destroy : function(s) {\r
+                       var t = this;\r
+\r
+                       if (t.events)\r
+                               t.events.destroy();\r
+\r
+                       t.win = t.doc = t.root = t.events = null;\r
+\r
+                       // Manual destroy then remove unload handler\r
+                       if (!s)\r
+                               tinymce.removeUnload(t.destroy);\r
+               },\r
+\r
+               createRng : function() {\r
+                       var d = this.doc;\r
+\r
+                       return d.createRange ? d.createRange() : new tinymce.dom.Range(this);\r
+               },\r
+\r
+               nodeIndex : function(node, normalized) {\r
+                       var idx = 0, lastNodeType, lastNode, nodeType;\r
+\r
+                       if (node) {\r
+                               for (lastNodeType = node.nodeType, node = node.previousSibling, lastNode = node; node; node = node.previousSibling) {\r
+                                       nodeType = node.nodeType;\r
+\r
+                                       // Normalize text nodes\r
+                                       if (normalized && nodeType == 3) {\r
+                                               if (nodeType == lastNodeType || !node.nodeValue.length)\r
+                                                       continue;\r
+                                       }\r
+\r
+                                       idx++;\r
+                                       lastNodeType = nodeType;\r
+                               }\r
+                       }\r
+\r
+                       return idx;\r
+               },\r
+\r
+               split : function(pe, e, re) {\r
+                       var t = this, r = t.createRng(), bef, aft, pa;\r
+\r
+                       // W3C valid browsers tend to leave empty nodes to the left/right side of the contents, this makes sense\r
+                       // but we don't want that in our code since it serves no purpose for the end user\r
+                       // For example if this is chopped:\r
+                       //   <p>text 1<span><b>CHOP</b></span>text 2</p>\r
+                       // would produce:\r
+                       //   <p>text 1<span></span></p><b>CHOP</b><p><span></span>text 2</p>\r
+                       // this function will then trim of empty edges and produce:\r
+                       //   <p>text 1</p><b>CHOP</b><p>text 2</p>\r
+                       function trim(node) {\r
+                               var i, children = node.childNodes;\r
+\r
+                               if (node.nodeType == 1 && node.getAttribute('_mce_type') == 'bookmark')\r
+                                       return;\r
+\r
+                               for (i = children.length - 1; i >= 0; i--)\r
+                                       trim(children[i]);\r
+\r
+                               if (node.nodeType != 9) {\r
+                                       // Keep non whitespace text nodes\r
+                                       if (node.nodeType == 3 && node.nodeValue.length > 0)\r
+                                               return;\r
+\r
+                                       if (node.nodeType == 1) {\r
+                                               // If the only child is a bookmark then move it up\r
+                                               children = node.childNodes;\r
+                                               if (children.length == 1 && children[0] && children[0].nodeType == 1 && children[0].getAttribute('_mce_type') == 'bookmark')\r
+                                                       node.parentNode.insertBefore(children[0], node);\r
+\r
+                                               // Keep non empty elements or img, hr etc\r
+                                               if (children.length || /^(br|hr|input|img)$/i.test(node.nodeName))\r
+                                                       return;\r
+                                       }\r
+\r
+                                       t.remove(node);\r
+                               }\r
+\r
+                               return node;\r
+                       };\r
+\r
+                       if (pe && e) {\r
+                               // Get before chunk\r
+                               r.setStart(pe.parentNode, t.nodeIndex(pe));\r
+                               r.setEnd(e.parentNode, t.nodeIndex(e));\r
+                               bef = r.extractContents();\r
+\r
+                               // Get after chunk\r
+                               r = t.createRng();\r
+                               r.setStart(e.parentNode, t.nodeIndex(e) + 1);\r
+                               r.setEnd(pe.parentNode, t.nodeIndex(pe) + 1);\r
+                               aft = r.extractContents();\r
+\r
+                               // Insert before chunk\r
+                               pa = pe.parentNode;\r
+                               pa.insertBefore(trim(bef), pe);\r
+\r
+                               // Insert middle chunk\r
+                               if (re)\r
+                                       pa.replaceChild(re, e);\r
+                               else\r
+                                       pa.insertBefore(e, pe);\r
+\r
+                               // Insert after chunk\r
+                               pa.insertBefore(trim(aft), pe);\r
+                               t.remove(pe);\r
+\r
+                               return re || e;\r
+                       }\r
+               },\r
+\r
+               bind : function(target, name, func, scope) {\r
+                       var t = this;\r
+\r
+                       if (!t.events)\r
+                               t.events = new tinymce.dom.EventUtils();\r
+\r
+                       return t.events.add(target, name, func, scope || this);\r
+               },\r
+\r
+               unbind : function(target, name, func) {\r
+                       var t = this;\r
+\r
+                       if (!t.events)\r
+                               t.events = new tinymce.dom.EventUtils();\r
+\r
+                       return t.events.remove(target, name, func);\r
+               },\r
+\r
+\r
+               _findSib : function(node, selector, name) {\r
+                       var t = this, f = selector;\r
+\r
+                       if (node) {\r
+                               // If expression make a function of it using is\r
+                               if (is(f, 'string')) {\r
+                                       f = function(node) {\r
+                                               return t.is(node, selector);\r
+                                       };\r
+                               }\r
+\r
+                               // Loop all siblings\r
+                               for (node = node[name]; node; node = node[name]) {\r
+                                       if (f(node))\r
+                                               return node;\r
+                               }\r
+                       }\r
+\r
+                       return null;\r
+               },\r
+\r
+               _isRes : function(c) {\r
+                       // Is live resizble element\r
+                       return /^(top|left|bottom|right|width|height)/i.test(c) || /;\s*(top|left|bottom|right|width|height)/i.test(c);\r
+               }\r
+\r
+               /*\r
+               walk : function(n, f, s) {\r
+                       var d = this.doc, w;\r
+\r
+                       if (d.createTreeWalker) {\r
+                               w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false);\r
+\r
+                               while ((n = w.nextNode()) != null)\r
+                                       f.call(s || this, n);\r
+                       } else\r
+                               tinymce.walk(n, f, 'childNodes', s);\r
+               }\r
+               */\r
+\r
+               /*\r
+               toRGB : function(s) {\r
+                       var c = /^\s*?#([0-9A-F]{2})([0-9A-F]{1,2})([0-9A-F]{2})?\s*?$/.exec(s);\r
+\r
+                       if (c) {\r
+                               // #FFF -> #FFFFFF\r
+                               if (!is(c[3]))\r
+                                       c[3] = c[2] = c[1];\r
+\r
+                               return "rgb(" + parseInt(c[1], 16) + "," + parseInt(c[2], 16) + "," + parseInt(c[3], 16) + ")";\r
+                       }\r
+\r
+                       return s;\r
+               }\r
+               */\r
+       });\r
+\r
+       tinymce.DOM = new tinymce.dom.DOMUtils(document, {process_html : 0});\r
+})(tinymce);\r
+\r
+(function(ns) {\r
+       // Range constructor\r
+       function Range(dom) {\r
+               var t = this,\r
+                       doc = dom.doc,\r
+                       EXTRACT = 0,\r
+                       CLONE = 1,\r
+                       DELETE = 2,\r
+                       TRUE = true,\r
+                       FALSE = false,\r
+                       START_OFFSET = 'startOffset',\r
+                       START_CONTAINER = 'startContainer',\r
+                       END_CONTAINER = 'endContainer',\r
+                       END_OFFSET = 'endOffset',\r
+                       extend = tinymce.extend,\r
+                       nodeIndex = dom.nodeIndex;\r
+\r
+               extend(t, {\r
+                       // Inital states\r
+                       startContainer : doc,\r
+                       startOffset : 0,\r
+                       endContainer : doc,\r
+                       endOffset : 0,\r
+                       collapsed : TRUE,\r
+                       commonAncestorContainer : doc,\r
+\r
+                       // Range constants\r
+                       START_TO_START : 0,\r
+                       START_TO_END : 1,\r
+                       END_TO_END : 2,\r
+                       END_TO_START : 3,\r
+\r
+                       // Public methods\r
+                       setStart : setStart,\r
+                       setEnd : setEnd,\r
+                       setStartBefore : setStartBefore,\r
+                       setStartAfter : setStartAfter,\r
+                       setEndBefore : setEndBefore,\r
+                       setEndAfter : setEndAfter,\r
+                       collapse : collapse,\r
+                       selectNode : selectNode,\r
+                       selectNodeContents : selectNodeContents,\r
+                       compareBoundaryPoints : compareBoundaryPoints,\r
+                       deleteContents : deleteContents,\r
+                       extractContents : extractContents,\r
+                       cloneContents : cloneContents,\r
+                       insertNode : insertNode,\r
+                       surroundContents : surroundContents,\r
+                       cloneRange : cloneRange\r
+               });\r
+\r
+               function setStart(n, o) {\r
+                       _setEndPoint(TRUE, n, o);\r
+               };\r
+\r
+               function setEnd(n, o) {\r
+                       _setEndPoint(FALSE, n, o);\r
+               };\r
+\r
+               function setStartBefore(n) {\r
+                       setStart(n.parentNode, nodeIndex(n));\r
+               };\r
+\r
+               function setStartAfter(n) {\r
+                       setStart(n.parentNode, nodeIndex(n) + 1);\r
+               };\r
+\r
+               function setEndBefore(n) {\r
+                       setEnd(n.parentNode, nodeIndex(n));\r
+               };\r
+\r
+               function setEndAfter(n) {\r
+                       setEnd(n.parentNode, nodeIndex(n) + 1);\r
+               };\r
+\r
+               function collapse(ts) {\r
+                       if (ts) {\r
+                               t[END_CONTAINER] = t[START_CONTAINER];\r
+                               t[END_OFFSET] = t[START_OFFSET];\r
+                       } else {\r
+                               t[START_CONTAINER] = t[END_CONTAINER];\r
+                               t[START_OFFSET] = t[END_OFFSET];\r
+                       }\r
+\r
+                       t.collapsed = TRUE;\r
+               };\r
+\r
+               function selectNode(n) {\r
+                       setStartBefore(n);\r
+                       setEndAfter(n);\r
+               };\r
+\r
+               function selectNodeContents(n) {\r
+                       setStart(n, 0);\r
+                       setEnd(n, n.nodeType === 1 ? n.childNodes.length : n.nodeValue.length);\r
+               };\r
+\r
+               function compareBoundaryPoints(h, r) {\r
+                       var sc = t[START_CONTAINER], so = t[START_OFFSET], ec = t[END_CONTAINER], eo = t[END_OFFSET];\r
+\r
+                       // Check START_TO_START\r
+                       if (h === 0)\r
+                               return _compareBoundaryPoints(sc, so, sc, so);\r
+\r
+                       // Check START_TO_END\r
+                       if (h === 1)\r
+                               return _compareBoundaryPoints(sc, so, ec, eo);\r
+\r
+                       // Check END_TO_END\r
+                       if (h === 2)\r
+                               return _compareBoundaryPoints(ec, eo, ec, eo);\r
+\r
+                       // Check END_TO_START\r
+                       if (h === 3)\r
+                               return _compareBoundaryPoints(ec, eo, sc, so);\r
+               };\r
+\r
+               function deleteContents() {\r
+                       _traverse(DELETE);\r
+               };\r
+\r
+               function extractContents() {\r
+                       return _traverse(EXTRACT);\r
+               };\r
+\r
+               function cloneContents() {\r
+                       return _traverse(CLONE);\r
+               };\r
+\r
+               function insertNode(n) {\r
+                       var startContainer = this[START_CONTAINER],\r
+                               startOffset = this[START_OFFSET], nn, o;\r
+\r
+                       // Node is TEXT_NODE or CDATA\r
+                       if ((startContainer.nodeType === 3 || startContainer.nodeType === 4) && startContainer.nodeValue) {\r
+                               if (!startOffset) {\r
+                                       // At the start of text\r
+                                       startContainer.parentNode.insertBefore(n, startContainer);\r
+                               } else if (startOffset >= startContainer.nodeValue.length) {\r
+                                       // At the end of text\r
+                                       dom.insertAfter(n, startContainer);\r
+                               } else {\r
+                                       // Middle, need to split\r
+                                       nn = startContainer.splitText(startOffset);\r
+                                       startContainer.parentNode.insertBefore(n, nn);\r
+                               }\r
+                       } else {\r
+                               // Insert element node\r
+                               if (startContainer.childNodes.length > 0)\r
+                                       o = startContainer.childNodes[startOffset];\r
+\r
+                               if (o)\r
+                                       startContainer.insertBefore(n, o);\r
+                               else\r
+                                       startContainer.appendChild(n);\r
+                       }\r
+               };\r
+\r
+               function surroundContents(n) {\r
+                       var f = t.extractContents();\r
+\r
+                       t.insertNode(n);\r
+                       n.appendChild(f);\r
+                       t.selectNode(n);\r
+               };\r
+\r
+               function cloneRange() {\r
+                       return extend(new Range(dom), {\r
+                               startContainer : t[START_CONTAINER],\r
+                               startOffset : t[START_OFFSET],\r
+                               endContainer : t[END_CONTAINER],\r
+                               endOffset : t[END_OFFSET],\r
+                               collapsed : t.collapsed,\r
+                               commonAncestorContainer : t.commonAncestorContainer\r
+                       });\r
+               };\r
+\r
+               // Private methods\r
+\r
+               function _getSelectedNode(container, offset) {\r
+                       var child;\r
+\r
+                       if (container.nodeType == 3 /* TEXT_NODE */)\r
+                               return container;\r
+\r
+                       if (offset < 0)\r
+                               return container;\r
+\r
+                       child = container.firstChild;\r
+                       while (child && offset > 0) {\r
+                               --offset;\r
+                               child = child.nextSibling;\r
+                       }\r
+\r
+                       if (child)\r
+                               return child;\r
+\r
+                       return container;\r
+               };\r
+\r
+               function _isCollapsed() {\r
+                       return (t[START_CONTAINER] == t[END_CONTAINER] && t[START_OFFSET] == t[END_OFFSET]);\r
+               };\r
+\r
+               function _compareBoundaryPoints(containerA, offsetA, containerB, offsetB) {\r
+                       var c, offsetC, n, cmnRoot, childA, childB;\r
+\r
+                       // In the first case the boundary-points have the same container. A is before B\r
+                       // if its offset is less than the offset of B, A is equal to B if its offset is\r
+                       // equal to the offset of B, and A is after B if its offset is greater than the\r
+                       // offset of B.\r
+                       if (containerA == containerB) {\r
+                               if (offsetA == offsetB)\r
+                                       return 0; // equal\r
+\r
+                               if (offsetA < offsetB)\r
+                                       return -1; // before\r
+\r
+                               return 1; // after\r
+                       }\r
+\r
+                       // In the second case a child node C of the container of A is an ancestor\r
+                       // container of B. In this case, A is before B if the offset of A is less than or\r
+                       // equal to the index of the child node C and A is after B otherwise.\r
+                       c = containerB;\r
+                       while (c && c.parentNode != containerA)\r
+                               c = c.parentNode;\r
+\r
+                       if (c) {\r
+                               offsetC = 0;\r
+                               n = containerA.firstChild;\r
+\r
+                               while (n != c && offsetC < offsetA) {\r
+                                       offsetC++;\r
+                                       n = n.nextSibling;\r
+                               }\r
+\r
+                               if (offsetA <= offsetC)\r
+                                       return -1; // before\r
+\r
+                               return 1; // after\r
+                       }\r
+\r
+                       // In the third case a child node C of the container of B is an ancestor container\r
+                       // of A. In this case, A is before B if the index of the child node C is less than\r
+                       // the offset of B and A is after B otherwise.\r
+                       c = containerA;\r
+                       while (c && c.parentNode != containerB) {\r
+                               c = c.parentNode;\r
+                       }\r
+\r
+                       if (c) {\r
+                               offsetC = 0;\r
+                               n = containerB.firstChild;\r
+\r
+                               while (n != c && offsetC < offsetB) {\r
+                                       offsetC++;\r
+                                       n = n.nextSibling;\r
+                               }\r
+\r
+                               if (offsetC < offsetB)\r
+                                       return -1; // before\r
+\r
+                               return 1; // after\r
+                       }\r
+\r
+                       // In the fourth case, none of three other cases hold: the containers of A and B\r
+                       // are siblings or descendants of sibling nodes. In this case, A is before B if\r
+                       // the container of A is before the container of B in a pre-order traversal of the\r
+                       // Ranges' context tree and A is after B otherwise.\r
+                       cmnRoot = dom.findCommonAncestor(containerA, containerB);\r
+                       childA = containerA;\r
+\r
+                       while (childA && childA.parentNode != cmnRoot)\r
+                               childA = childA.parentNode;\r
+\r
+                       if (!childA)\r
+                               childA = cmnRoot;\r
+\r
+                       childB = containerB;\r
+                       while (childB && childB.parentNode != cmnRoot)\r
+                               childB = childB.parentNode;\r
+\r
+                       if (!childB)\r
+                               childB = cmnRoot;\r
+\r
+                       if (childA == childB)\r
+                               return 0; // equal\r
+\r
+                       n = cmnRoot.firstChild;\r
+                       while (n) {\r
+                               if (n == childA)\r
+                                       return -1; // before\r
+\r
+                               if (n == childB)\r
+                                       return 1; // after\r
+\r
+                               n = n.nextSibling;\r
+                       }\r
+               };\r
+\r
+               function _setEndPoint(st, n, o) {\r
+                       var ec, sc;\r
+\r
+                       if (st) {\r
+                               t[START_CONTAINER] = n;\r
+                               t[START_OFFSET] = o;\r
+                       } else {\r
+                               t[END_CONTAINER] = n;\r
+                               t[END_OFFSET] = o;\r
+                       }\r
+\r
+                       // If one boundary-point of a Range is set to have a root container\r
+                       // other than the current one for the Range, the Range is collapsed to\r
+                       // the new position. This enforces the restriction that both boundary-\r
+                       // points of a Range must have the same root container.\r
+                       ec = t[END_CONTAINER];\r
+                       while (ec.parentNode)\r
+                               ec = ec.parentNode;\r
+\r
+                       sc = t[START_CONTAINER];\r
+                       while (sc.parentNode)\r
+                               sc = sc.parentNode;\r
+\r
+                       if (sc == ec) {\r
+                               // The start position of a Range is guaranteed to never be after the\r
+                               // end position. To enforce this restriction, if the start is set to\r
+                               // be at a position after the end, the Range is collapsed to that\r
+                               // position.\r
+                               if (_compareBoundaryPoints(t[START_CONTAINER], t[START_OFFSET], t[END_CONTAINER], t[END_OFFSET]) > 0)\r
+                                       t.collapse(st);\r
+                       } else\r
+                               t.collapse(st);\r
+\r
+                       t.collapsed = _isCollapsed();\r
+                       t.commonAncestorContainer = dom.findCommonAncestor(t[START_CONTAINER], t[END_CONTAINER]);\r
+               };\r
+\r
+               function _traverse(how) {\r
+                       var c, endContainerDepth = 0, startContainerDepth = 0, p, depthDiff, startNode, endNode, sp, ep;\r
+\r
+                       if (t[START_CONTAINER] == t[END_CONTAINER])\r
+                               return _traverseSameContainer(how);\r
+\r
+                       for (c = t[END_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {\r
+                               if (p == t[START_CONTAINER])\r
+                                       return _traverseCommonStartContainer(c, how);\r
+\r
+                               ++endContainerDepth;\r
+                       }\r
+\r
+                       for (c = t[START_CONTAINER], p = c.parentNode; p; c = p, p = p.parentNode) {\r
+                               if (p == t[END_CONTAINER])\r
+                                       return _traverseCommonEndContainer(c, how);\r
+\r
+                               ++startContainerDepth;\r
+                       }\r
+\r
+                       depthDiff = startContainerDepth - endContainerDepth;\r
+\r
+                       startNode = t[START_CONTAINER];\r
+                       while (depthDiff > 0) {\r
+                               startNode = startNode.parentNode;\r
+                               depthDiff--;\r
+                       }\r
+\r
+                       endNode = t[END_CONTAINER];\r
+                       while (depthDiff < 0) {\r
+                               endNode = endNode.parentNode;\r
+                               depthDiff++;\r
+                       }\r
+\r
+                       // ascend the ancestor hierarchy until we have a common parent.\r
+                       for (sp = startNode.parentNode, ep = endNode.parentNode; sp != ep; sp = sp.parentNode, ep = ep.parentNode) {\r
+                               startNode = sp;\r
+                               endNode = ep;\r
+                       }\r
+\r
+                       return _traverseCommonAncestors(startNode, endNode, how);\r
+               };\r
+\r
+                function _traverseSameContainer(how) {\r
+                       var frag, s, sub, n, cnt, sibling, xferNode;\r
+\r
+                       if (how != DELETE)\r
+                               frag = doc.createDocumentFragment();\r
+\r
+                       // If selection is empty, just return the fragment\r
+                       if (t[START_OFFSET] == t[END_OFFSET])\r
+                               return frag;\r
+\r
+                       // Text node needs special case handling\r
+                       if (t[START_CONTAINER].nodeType == 3 /* TEXT_NODE */) {\r
+                               // get the substring\r
+                               s = t[START_CONTAINER].nodeValue;\r
+                               sub = s.substring(t[START_OFFSET], t[END_OFFSET]);\r
+\r
+                               // set the original text node to its new value\r
+                               if (how != CLONE) {\r
+                                       t[START_CONTAINER].deleteData(t[START_OFFSET], t[END_OFFSET] - t[START_OFFSET]);\r
+\r
+                                       // Nothing is partially selected, so collapse to start point\r
+                                       t.collapse(TRUE);\r
+                               }\r
+\r
+                               if (how == DELETE)\r
+                                       return;\r
+\r
+                               frag.appendChild(doc.createTextNode(sub));\r
+                               return frag;\r
+                       }\r
+\r
+                       // Copy nodes between the start/end offsets.\r
+                       n = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]);\r
+                       cnt = t[END_OFFSET] - t[START_OFFSET];\r
+\r
+                       while (cnt > 0) {\r
+                               sibling = n.nextSibling;\r
+                               xferNode = _traverseFullySelected(n, how);\r
+\r
+                               if (frag)\r
+                                       frag.appendChild( xferNode );\r
+\r
+                               --cnt;\r
+                               n = sibling;\r
+                       }\r
+\r
+                       // Nothing is partially selected, so collapse to start point\r
+                       if (how != CLONE)\r
+                               t.collapse(TRUE);\r
+\r
+                       return frag;\r
+               };\r
+\r
+               function _traverseCommonStartContainer(endAncestor, how) {\r
+                       var frag, n, endIdx, cnt, sibling, xferNode;\r
+\r
+                       if (how != DELETE)\r
+                               frag = doc.createDocumentFragment();\r
+\r
+                       n = _traverseRightBoundary(endAncestor, how);\r
+\r
+                       if (frag)\r
+                               frag.appendChild(n);\r
+\r
+                       endIdx = nodeIndex(endAncestor);\r
+                       cnt = endIdx - t[START_OFFSET];\r
+\r
+                       if (cnt <= 0) {\r
+                               // Collapse to just before the endAncestor, which\r
+                               // is partially selected.\r
+                               if (how != CLONE) {\r
+                                       t.setEndBefore(endAncestor);\r
+                                       t.collapse(FALSE);\r
+                               }\r
+\r
+                               return frag;\r
+                       }\r
+\r
+                       n = endAncestor.previousSibling;\r
+                       while (cnt > 0) {\r
+                               sibling = n.previousSibling;\r
+                               xferNode = _traverseFullySelected(n, how);\r
+\r
+                               if (frag)\r
+                                       frag.insertBefore(xferNode, frag.firstChild);\r
+\r
+                               --cnt;\r
+                               n = sibling;\r
+                       }\r
+\r
+                       // Collapse to just before the endAncestor, which\r
+                       // is partially selected.\r
+                       if (how != CLONE) {\r
+                               t.setEndBefore(endAncestor);\r
+                               t.collapse(FALSE);\r
+                       }\r
+\r
+                       return frag;\r
+               };\r
+\r
+               function _traverseCommonEndContainer(startAncestor, how) {\r
+                       var frag, startIdx, n, cnt, sibling, xferNode;\r
+\r
+                       if (how != DELETE)\r
+                               frag = doc.createDocumentFragment();\r
+\r
+                       n = _traverseLeftBoundary(startAncestor, how);\r
+                       if (frag)\r
+                               frag.appendChild(n);\r
+\r
+                       startIdx = nodeIndex(startAncestor);\r
+                       ++startIdx;  // Because we already traversed it....\r
+\r
+                       cnt = t[END_OFFSET] - startIdx;\r
+                       n = startAncestor.nextSibling;\r
+                       while (cnt > 0) {\r
+                               sibling = n.nextSibling;\r
+                               xferNode = _traverseFullySelected(n, how);\r
+\r
+                               if (frag)\r
+                                       frag.appendChild(xferNode);\r
+\r
+                               --cnt;\r
+                               n = sibling;\r
+                       }\r
+\r
+                       if (how != CLONE) {\r
+                               t.setStartAfter(startAncestor);\r
+                               t.collapse(TRUE);\r
+                       }\r
+\r
+                       return frag;\r
+               };\r
+\r
+               function _traverseCommonAncestors(startAncestor, endAncestor, how) {\r
+                       var n, frag, commonParent, startOffset, endOffset, cnt, sibling, nextSibling;\r
+\r
+                       if (how != DELETE)\r
+                               frag = doc.createDocumentFragment();\r
+\r
+                       n = _traverseLeftBoundary(startAncestor, how);\r
+                       if (frag)\r
+                               frag.appendChild(n);\r
+\r
+                       commonParent = startAncestor.parentNode;\r
+                       startOffset = nodeIndex(startAncestor);\r
+                       endOffset = nodeIndex(endAncestor);\r
+                       ++startOffset;\r
+\r
+                       cnt = endOffset - startOffset;\r
+                       sibling = startAncestor.nextSibling;\r
+\r
+                       while (cnt > 0) {\r
+                               nextSibling = sibling.nextSibling;\r
+                               n = _traverseFullySelected(sibling, how);\r
+\r
+                               if (frag)\r
+                                       frag.appendChild(n);\r
+\r
+                               sibling = nextSibling;\r
+                               --cnt;\r
+                       }\r
+\r
+                       n = _traverseRightBoundary(endAncestor, how);\r
+\r
+                       if (frag)\r
+                               frag.appendChild(n);\r
+\r
+                       if (how != CLONE) {\r
+                               t.setStartAfter(startAncestor);\r
+                               t.collapse(TRUE);\r
+                       }\r
+\r
+                       return frag;\r
+               };\r
+\r
+               function _traverseRightBoundary(root, how) {\r
+                       var next = _getSelectedNode(t[END_CONTAINER], t[END_OFFSET] - 1), parent, clonedParent, prevSibling, clonedChild, clonedGrandParent, isFullySelected = next != t[END_CONTAINER];\r
+\r
+                       if (next == root)\r
+                               return _traverseNode(next, isFullySelected, FALSE, how);\r
+\r
+                       parent = next.parentNode;\r
+                       clonedParent = _traverseNode(parent, FALSE, FALSE, how);\r
+\r
+                       while (parent) {\r
+                               while (next) {\r
+                                       prevSibling = next.previousSibling;\r
+                                       clonedChild = _traverseNode(next, isFullySelected, FALSE, how);\r
+\r
+                                       if (how != DELETE)\r
+                                               clonedParent.insertBefore(clonedChild, clonedParent.firstChild);\r
+\r
+                                       isFullySelected = TRUE;\r
+                                       next = prevSibling;\r
+                               }\r
+\r
+                               if (parent == root)\r
+                                       return clonedParent;\r
+\r
+                               next = parent.previousSibling;\r
+                               parent = parent.parentNode;\r
+\r
+                               clonedGrandParent = _traverseNode(parent, FALSE, FALSE, how);\r
+\r
+                               if (how != DELETE)\r
+                                       clonedGrandParent.appendChild(clonedParent);\r
+\r
+                               clonedParent = clonedGrandParent;\r
+                       }\r
+               };\r
+\r
+               function _traverseLeftBoundary(root, how) {\r
+                       var next = _getSelectedNode(t[START_CONTAINER], t[START_OFFSET]), isFullySelected = next != t[START_CONTAINER], parent, clonedParent, nextSibling, clonedChild, clonedGrandParent;\r
+\r
+                       if (next == root)\r
+                               return _traverseNode(next, isFullySelected, TRUE, how);\r
+\r
+                       parent = next.parentNode;\r
+                       clonedParent = _traverseNode(parent, FALSE, TRUE, how);\r
+\r
+                       while (parent) {\r
+                               while (next) {\r
+                                       nextSibling = next.nextSibling;\r
+                                       clonedChild = _traverseNode(next, isFullySelected, TRUE, how);\r
+\r
+                                       if (how != DELETE)\r
+                                               clonedParent.appendChild(clonedChild);\r
+\r
+                                       isFullySelected = TRUE;\r
+                                       next = nextSibling;\r
+                               }\r
+\r
+                               if (parent == root)\r
+                                       return clonedParent;\r
+\r
+                               next = parent.nextSibling;\r
+                               parent = parent.parentNode;\r
+\r
+                               clonedGrandParent = _traverseNode(parent, FALSE, TRUE, how);\r
+\r
+                               if (how != DELETE)\r
+                                       clonedGrandParent.appendChild(clonedParent);\r
+\r
+                               clonedParent = clonedGrandParent;\r
+                       }\r
+               };\r
+\r
+               function _traverseNode(n, isFullySelected, isLeft, how) {\r
+                       var txtValue, newNodeValue, oldNodeValue, offset, newNode;\r
+\r
+                       if (isFullySelected)\r
+                               return _traverseFullySelected(n, how);\r
+\r
+                       if (n.nodeType == 3 /* TEXT_NODE */) {\r
+                               txtValue = n.nodeValue;\r
+\r
+                               if (isLeft) {\r
+                                       offset = t[START_OFFSET];\r
+                                       newNodeValue = txtValue.substring(offset);\r
+                                       oldNodeValue = txtValue.substring(0, offset);\r
+                               } else {\r
+                                       offset = t[END_OFFSET];\r
+                                       newNodeValue = txtValue.substring(0, offset);\r
+                                       oldNodeValue = txtValue.substring(offset);\r
+                               }\r
+\r
+                               if (how != CLONE)\r
+                                       n.nodeValue = oldNodeValue;\r
+\r
+                               if (how == DELETE)\r
+                                       return;\r
+\r
+                               newNode = n.cloneNode(FALSE);\r
+                               newNode.nodeValue = newNodeValue;\r
+\r
+                               return newNode;\r
+                       }\r
+\r
+                       if (how == DELETE)\r
+                               return;\r
+\r
+                       return n.cloneNode(FALSE);\r
+               };\r
+\r
+               function _traverseFullySelected(n, how) {\r
+                       if (how != DELETE)\r
+                               return how == CLONE ? n.cloneNode(TRUE) : n;\r
+\r
+                       n.parentNode.removeChild(n);\r
+               };\r
+       };\r
+\r
+       ns.Range = Range;\r
+})(tinymce.dom);\r
+\r
+(function() {\r
+       function Selection(selection) {\r
+               var t = this, invisibleChar = '\uFEFF', range, lastIERng, dom = selection.dom, TRUE = true, FALSE = false;\r
+\r
+               // Returns a W3C DOM compatible range object by using the IE Range API\r
+               function getRange() {\r
+                       var ieRange = selection.getRng(), domRange = dom.createRng(), element, collapsed;\r
+\r
+                       // If selection is outside the current document just return an empty range\r
+                       element = ieRange.item ? ieRange.item(0) : ieRange.parentElement();\r
+                       if (element.ownerDocument != dom.doc)\r
+                               return domRange;\r
+\r
+                       // Handle control selection or text selection of a image\r
+                       if (ieRange.item || !element.hasChildNodes()) {\r
+                               domRange.setStart(element.parentNode, dom.nodeIndex(element));\r
+                               domRange.setEnd(domRange.startContainer, domRange.startOffset + 1);\r
+\r
+                               return domRange;\r
+                       }\r
+\r
+                       collapsed = selection.isCollapsed();\r
+\r
+                       function findEndPoint(start) {\r
+                               var marker, container, offset, nodes, startIndex = 0, endIndex, index, parent, checkRng, position;\r
+\r
+                               // Setup temp range and collapse it\r
+                               checkRng = ieRange.duplicate();\r
+                               checkRng.collapse(start);\r
+\r
+                               // Create marker and insert it at the end of the endpoints parent\r
+                               marker = dom.create('a');\r
+                               parent = checkRng.parentElement();\r
+\r
+                               // If parent doesn't have any children then set the container to that parent and the index to 0\r
+                               if (!parent.hasChildNodes()) {\r
+                                       domRange[start ? 'setStart' : 'setEnd'](parent, 0);\r
+                                       return;\r
+                               }\r
+\r
+                               parent.appendChild(marker);\r
+                               checkRng.moveToElementText(marker);\r
+                               position = ieRange.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', checkRng);\r
+                               if (position > 0) {\r
+                                       // The position is after the end of the parent element.\r
+                                       // This is the case where IE puts the caret to the left edge of a table.\r
+                                       domRange[start ? 'setStartAfter' : 'setEndAfter'](parent);\r
+                                       dom.remove(marker);\r
+                                       return;\r
+                               }\r
+\r
+                               // Setup node list and endIndex\r
+                               nodes = tinymce.grep(parent.childNodes);\r
+                               endIndex = nodes.length - 1;\r
+                               // Perform a binary search for the position\r
+                               while (startIndex <= endIndex) {\r
+                                       index = Math.floor((startIndex + endIndex) / 2);\r
+\r
+                                       // Insert marker and check it's position relative to the selection\r
+                                       parent.insertBefore(marker, nodes[index]);\r
+                                       checkRng.moveToElementText(marker);\r
+                                       position = ieRange.compareEndPoints(start ? 'StartToStart' : 'EndToEnd', checkRng);\r
+                                       if (position > 0) {\r
+                                               // Marker is to the right\r
+                                               startIndex = index + 1;\r
+                                       } else if (position < 0) {\r
+                                               // Marker is to the left\r
+                                               endIndex = index - 1;\r
+                                       } else {\r
+                                               // Maker is where we are\r
+                                               found = true;\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               // Setup container\r
+                               container = position > 0 || index == 0 ? marker.nextSibling : marker.previousSibling;\r
+\r
+                               // Handle element selection\r
+                               if (container.nodeType == 1) {\r
+                                       dom.remove(marker);\r
+\r
+                                       // Find offset and container\r
+                                       offset = dom.nodeIndex(container);\r
+                                       container = container.parentNode;\r
+\r
+                                       // Move the offset if we are setting the end or the position is after an element\r
+                                       if (!start || index > 0)\r
+                                               offset++;\r
+                               } else {\r
+                                       // Calculate offset within text node\r
+                                       if (position > 0 || index == 0) {\r
+                                               checkRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', ieRange);\r
+                                               offset = checkRng.text.length;\r
+                                       } else {\r
+                                               checkRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', ieRange);\r
+                                               offset = container.nodeValue.length - checkRng.text.length;\r
+                                       }\r
+\r
+                                       dom.remove(marker);\r
+                               }\r
+\r
+                               domRange[start ? 'setStart' : 'setEnd'](container, offset);\r
+                       };\r
+\r
+                       // Find start point\r
+                       findEndPoint(true);\r
+\r
+                       // Find end point if needed\r
+                       if (!collapsed)\r
+                               findEndPoint();\r
+\r
+                       return domRange;\r
+               };\r
+\r
+               this.addRange = function(rng) {\r
+                       var ieRng, ctrlRng, startContainer, startOffset, endContainer, endOffset, doc = selection.dom.doc, body = doc.body;\r
+\r
+                       function setEndPoint(start) {\r
+                               var container, offset, marker, tmpRng, nodes;\r
+\r
+                               marker = dom.create('a');\r
+                               container = start ? startContainer : endContainer;\r
+                               offset = start ? startOffset : endOffset;\r
+                               tmpRng = ieRng.duplicate();\r
+\r
+                               if (container == doc) {\r
+                                       container = body;\r
+                                       offset = 0;\r
+                               }\r
+\r
+                               if (container.nodeType == 3) {\r
+                                       container.parentNode.insertBefore(marker, container);\r
+                                       tmpRng.moveToElementText(marker);\r
+                                       tmpRng.moveStart('character', offset);\r
+                                       dom.remove(marker);\r
+                                       ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);\r
+                               } else {\r
+                                       nodes = container.childNodes;\r
+\r
+                                       if (nodes.length) {\r
+                                               if (offset >= nodes.length) {\r
+                                                       dom.insertAfter(marker, nodes[nodes.length - 1]);\r
+                                               } else {\r
+                                                       container.insertBefore(marker, nodes[offset]);\r
+                                               }\r
+\r
+                                               tmpRng.moveToElementText(marker);\r
+                                       } else {\r
+                                               // Empty node selection for example <div>|</div>\r
+                                               marker = doc.createTextNode(invisibleChar);\r
+                                               container.appendChild(marker);\r
+                                               tmpRng.moveToElementText(marker.parentNode);\r
+                                               tmpRng.collapse(TRUE);\r
+                                       }\r
+\r
+                                       ieRng.setEndPoint(start ? 'StartToStart' : 'EndToEnd', tmpRng);\r
+                                       dom.remove(marker);\r
+                               }\r
+                       }\r
+\r
+                       // Destroy cached range\r
+                       this.destroy();\r
+\r
+                       // Setup some shorter versions\r
+                       startContainer = rng.startContainer;\r
+                       startOffset = rng.startOffset;\r
+                       endContainer = rng.endContainer;\r
+                       endOffset = rng.endOffset;\r
+                       ieRng = body.createTextRange();\r
+\r
+                       // If single element selection then try making a control selection out of it\r
+                       if (startContainer == endContainer && startContainer.nodeType == 1 && startOffset == endOffset - 1) {\r
+                               if (startOffset == endOffset - 1) {\r
+                                       try {\r
+                                               ctrlRng = body.createControlRange();\r
+                                               ctrlRng.addElement(startContainer.childNodes[startOffset]);\r
+                                               ctrlRng.select();\r
+                                               ctrlRng.scrollIntoView();\r
+                                               return;\r
+                                       } catch (ex) {\r
+                                               // Ignore\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // Set start/end point of selection\r
+                       setEndPoint(true);\r
+                       setEndPoint();\r
+\r
+                       // Select the new range and scroll it into view\r
+                       ieRng.select();\r
+                       ieRng.scrollIntoView();\r
+               };\r
+\r
+               this.getRangeAt = function() {\r
+                       // Setup new range if the cache is empty\r
+                       if (!range || !tinymce.dom.RangeUtils.compareRanges(lastIERng, selection.getRng())) {\r
+                               range = getRange();\r
+\r
+                               // Store away text range for next call\r
+                               lastIERng = selection.getRng();\r
+                       }\r
+\r
+                       // IE will say that the range is equal then produce an invalid argument exception\r
+                       // if you perform specific operations in a keyup event. For example Ctrl+Del.\r
+                       // This hack will invalidate the range cache if the exception occurs\r
+                       try {\r
+                               range.startContainer.nextSibling;\r
+                       } catch (ex) {\r
+                               range = getRange();\r
+                               lastIERng = null;\r
+                       }\r
+\r
+                       // Return cached range\r
+                       return range;\r
+               };\r
+\r
+               this.destroy = function() {\r
+                       // Destroy cached range and last IE range to avoid memory leaks\r
+                       lastIERng = range = null;\r
+               };\r
+\r
+               // IE has an issue where you can't select/move the caret by clicking outside the body if the document is in standards mode\r
+               if (selection.dom.boxModel) {\r
+                       (function() {\r
+                               var doc = dom.doc, body = doc.body, started, startRng;\r
+\r
+                               // Make HTML element unselectable since we are going to handle selection by hand\r
+                               doc.documentElement.unselectable = TRUE;\r
+\r
+                               // Return range from point or null if it failed\r
+                               function rngFromPoint(x, y) {\r
+                                       var rng = body.createTextRange();\r
+\r
+                                       try {\r
+                                               rng.moveToPoint(x, y);\r
+                                       } catch (ex) {\r
+                                               // IE sometimes throws and exception, so lets just ignore it\r
+                                               rng = null;\r
+                                       }\r
+\r
+                                       return rng;\r
+                               };\r
+\r
+                               // Fires while the selection is changing\r
+                               function selectionChange(e) {\r
+                                       var pointRng;\r
+\r
+                                       // Check if the button is down or not\r
+                                       if (e.button) {\r
+                                               // Create range from mouse position\r
+                                               pointRng = rngFromPoint(e.x, e.y);\r
+\r
+                                               if (pointRng) {\r
+                                                       // Check if pointRange is before/after selection then change the endPoint\r
+                                                       if (pointRng.compareEndPoints('StartToStart', startRng) > 0)\r
+                                                               pointRng.setEndPoint('StartToStart', startRng);\r
+                                                       else\r
+                                                               pointRng.setEndPoint('EndToEnd', startRng);\r
+\r
+                                                       pointRng.select();\r
+                                               }\r
+                                       } else\r
+                                               endSelection();\r
+                               }\r
+\r
+                               // Removes listeners\r
+                               function endSelection() {\r
+                                       dom.unbind(doc, 'mouseup', endSelection);\r
+                                       dom.unbind(doc, 'mousemove', selectionChange);\r
+                                       started = 0;\r
+                               };\r
+\r
+                               // Detect when user selects outside BODY\r
+                               dom.bind(doc, 'mousedown', function(e) {\r
+                                       if (e.target.nodeName === 'HTML') {\r
+                                               if (started)\r
+                                                       endSelection();\r
+\r
+                                               started = 1;\r
+\r
+                                               // Setup start position\r
+                                               startRng = rngFromPoint(e.x, e.y);\r
+                                               if (startRng) {\r
+                                                       // Listen for selection change events\r
+                                                       dom.bind(doc, 'mouseup', endSelection);\r
+                                                       dom.bind(doc, 'mousemove', selectionChange);\r
+\r
+                                                       startRng.select();\r
+                                               }\r
+                                       }\r
+                               });\r
+                       })();\r
+               }\r
+       };\r
+\r
+       // Expose the selection object\r
+       tinymce.dom.TridentSelection = Selection;\r
+})();\r
+\r
+\r
+(function(tinymce) {\r
+       // Shorten names\r
+       var each = tinymce.each, DOM = tinymce.DOM, isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, Event;\r
+\r
+       tinymce.create('tinymce.dom.EventUtils', {\r
+               EventUtils : function() {\r
+                       this.inits = [];\r
+                       this.events = [];\r
+               },\r
+\r
+               add : function(o, n, f, s) {\r
+                       var cb, t = this, el = t.events, r;\r
+\r
+                       if (n instanceof Array) {\r
+                               r = [];\r
+\r
+                               each(n, function(n) {\r
+                                       r.push(t.add(o, n, f, s));\r
+                               });\r
+\r
+                               return r;\r
+                       }\r
+\r
+                       // Handle array\r
+                       if (o && o.hasOwnProperty && o instanceof Array) {\r
+                               r = [];\r
+\r
+                               each(o, function(o) {\r
+                                       o = DOM.get(o);\r
+                                       r.push(t.add(o, n, f, s));\r
+                               });\r
+\r
+                               return r;\r
+                       }\r
+\r
+                       o = DOM.get(o);\r
+\r
+                       if (!o)\r
+                               return;\r
+\r
+                       // Setup event callback\r
+                       cb = function(e) {\r
+                               // Is all events disabled\r
+                               if (t.disabled)\r
+                                       return;\r
+\r
+                               e = e || window.event;\r
+\r
+                               // Patch in target, preventDefault and stopPropagation in IE it's W3C valid\r
+                               if (e && isIE) {\r
+                                       if (!e.target)\r
+                                               e.target = e.srcElement;\r
+\r
+                                       // Patch in preventDefault, stopPropagation methods for W3C compatibility\r
+                                       tinymce.extend(e, t._stoppers);\r
+                               }\r
+\r
+                               if (!s)\r
+                                       return f(e);\r
+\r
+                               return f.call(s, e);\r
+                       };\r
+\r
+                       if (n == 'unload') {\r
+                               tinymce.unloads.unshift({func : cb});\r
+                               return cb;\r
+                       }\r
+\r
+                       if (n == 'init') {\r
+                               if (t.domLoaded)\r
+                                       cb();\r
+                               else\r
+                                       t.inits.push(cb);\r
+\r
+                               return cb;\r
+                       }\r
+\r
+                       // Store away listener reference\r
+                       el.push({\r
+                               obj : o,\r
+                               name : n,\r
+                               func : f,\r
+                               cfunc : cb,\r
+                               scope : s\r
+                       });\r
+\r
+                       t._add(o, n, cb);\r
+\r
+                       return f;\r
+               },\r
+\r
+               remove : function(o, n, f) {\r
+                       var t = this, a = t.events, s = false, r;\r
+\r
+                       // Handle array\r
+                       if (o && o.hasOwnProperty && o instanceof Array) {\r
+                               r = [];\r
+\r
+                               each(o, function(o) {\r
+                                       o = DOM.get(o);\r
+                                       r.push(t.remove(o, n, f));\r
+                               });\r
+\r
+                               return r;\r
+                       }\r
+\r
+                       o = DOM.get(o);\r
+\r
+                       each(a, function(e, i) {\r
+                               if (e.obj == o && e.name == n && (!f || (e.func == f || e.cfunc == f))) {\r
+                                       a.splice(i, 1);\r
+                                       t._remove(o, n, e.cfunc);\r
+                                       s = true;\r
+                                       return false;\r
+                               }\r
+                       });\r
+\r
+                       return s;\r
+               },\r
+\r
+               clear : function(o) {\r
+                       var t = this, a = t.events, i, e;\r
+\r
+                       if (o) {\r
+                               o = DOM.get(o);\r
+\r
+                               for (i = a.length - 1; i >= 0; i--) {\r
+                                       e = a[i];\r
+\r
+                                       if (e.obj === o) {\r
+                                               t._remove(e.obj, e.name, e.cfunc);\r
+                                               e.obj = e.cfunc = null;\r
+                                               a.splice(i, 1);\r
+                                       }\r
+                               }\r
+                       }\r
+               },\r
+\r
+               cancel : function(e) {\r
+                       if (!e)\r
+                               return false;\r
+\r
+                       this.stop(e);\r
+\r
+                       return this.prevent(e);\r
+               },\r
+\r
+               stop : function(e) {\r
+                       if (e.stopPropagation)\r
+                               e.stopPropagation();\r
+                       else\r
+                               e.cancelBubble = true;\r
+\r
+                       return false;\r
+               },\r
+\r
+               prevent : function(e) {\r
+                       if (e.preventDefault)\r
+                               e.preventDefault();\r
+                       else\r
+                               e.returnValue = false;\r
+\r
+                       return false;\r
+               },\r
+\r
+               destroy : function() {\r
+                       var t = this;\r
+\r
+                       each(t.events, function(e, i) {\r
+                               t._remove(e.obj, e.name, e.cfunc);\r
+                               e.obj = e.cfunc = null;\r
+                       });\r
+\r
+                       t.events = [];\r
+                       t = null;\r
+               },\r
+\r
+               _add : function(o, n, f) {\r
+                       if (o.attachEvent)\r
+                               o.attachEvent('on' + n, f);\r
+                       else if (o.addEventListener)\r
+                               o.addEventListener(n, f, false);\r
+                       else\r
+                               o['on' + n] = f;\r
+               },\r
+\r
+               _remove : function(o, n, f) {\r
+                       if (o) {\r
+                               try {\r
+                                       if (o.detachEvent)\r
+                                               o.detachEvent('on' + n, f);\r
+                                       else if (o.removeEventListener)\r
+                                               o.removeEventListener(n, f, false);\r
+                                       else\r
+                                               o['on' + n] = null;\r
+                               } catch (ex) {\r
+                                       // Might fail with permission denined on IE so we just ignore that\r
+                               }\r
+                       }\r
+               },\r
+\r
+               _pageInit : function(win) {\r
+                       var t = this;\r
+\r
+                       // Keep it from running more than once\r
+                       if (t.domLoaded)\r
+                               return;\r
+\r
+                       t.domLoaded = true;\r
+\r
+                       each(t.inits, function(c) {\r
+                               c();\r
+                       });\r
+\r
+                       t.inits = [];\r
+               },\r
+\r
+               _wait : function(win) {\r
+                       var t = this, doc = win.document;\r
+\r
+                       // No need since the document is already loaded\r
+                       if (win.tinyMCE_GZ && tinyMCE_GZ.loaded) {\r
+                               t.domLoaded = 1;\r
+                               return;\r
+                       }\r
+\r
+                       // Use IE method\r
+                       if (doc.attachEvent) {\r
+                               doc.attachEvent("onreadystatechange", function() {\r
+                                       if (doc.readyState === "complete") {\r
+                                               doc.detachEvent("onreadystatechange", arguments.callee);\r
+                                               t._pageInit(win);\r
+                                       }\r
+                               });\r
+\r
+                               if (doc.documentElement.doScroll && win == win.top) {\r
+                                       (function() {\r
+                                               if (t.domLoaded)\r
+                                                       return;\r
+\r
+                                               try {\r
+                                                       // If IE is used, use the trick by Diego Perini\r
+                                                       // http://javascript.nwbox.com/IEContentLoaded/\r
+                                                       doc.documentElement.doScroll("left");\r
+                                               } catch (ex) {\r
+                                                       setTimeout(arguments.callee, 0);\r
+                                                       return;\r
+                                               }\r
+\r
+                                               t._pageInit(win);\r
+                                       })();\r
+                               }\r
+                       } else if (doc.addEventListener) {\r
+                               t._add(win, 'DOMContentLoaded', function() {\r
+                                       t._pageInit(win);\r
+                               });\r
+                       }\r
+\r
+                       t._add(win, 'load', function() {\r
+                               t._pageInit(win);\r
+                       });\r
+               },\r
+\r
+               _stoppers : {\r
+                       preventDefault :  function() {\r
+                               this.returnValue = false;\r
+                       },\r
+\r
+                       stopPropagation : function() {\r
+                               this.cancelBubble = true;\r
+                       }\r
+               }\r
+       });\r
+\r
+       Event = tinymce.dom.Event = new tinymce.dom.EventUtils();\r
+\r
+       // Dispatch DOM content loaded event for IE and Safari\r
+       Event._wait(window);\r
+\r
+       tinymce.addUnload(function() {\r
+               Event.destroy();\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       tinymce.dom.Element = function(id, settings) {\r
+               var t = this, dom, el;\r
+\r
+               t.settings = settings = settings || {};\r
+               t.id = id;\r
+               t.dom = dom = settings.dom || tinymce.DOM;\r
+\r
+               // Only IE leaks DOM references, this is a lot faster\r
+               if (!tinymce.isIE)\r
+                       el = dom.get(t.id);\r
+\r
+               tinymce.each(\r
+                               ('getPos,getRect,getParent,add,setStyle,getStyle,setStyles,' + \r
+                               'setAttrib,setAttribs,getAttrib,addClass,removeClass,' + \r
+                               'hasClass,getOuterHTML,setOuterHTML,remove,show,hide,' + \r
+                               'isHidden,setHTML,get').split(/,/)\r
+                       , function(k) {\r
+                               t[k] = function() {\r
+                                       var a = [id], i;\r
+\r
+                                       for (i = 0; i < arguments.length; i++)\r
+                                               a.push(arguments[i]);\r
+\r
+                                       a = dom[k].apply(dom, a);\r
+                                       t.update(k);\r
+\r
+                                       return a;\r
+                               };\r
+               });\r
+\r
+               tinymce.extend(t, {\r
+                       on : function(n, f, s) {\r
+                               return tinymce.dom.Event.add(t.id, n, f, s);\r
+                       },\r
+\r
+                       getXY : function() {\r
+                               return {\r
+                                       x : parseInt(t.getStyle('left')),\r
+                                       y : parseInt(t.getStyle('top'))\r
+                               };\r
+                       },\r
+\r
+                       getSize : function() {\r
+                               var n = dom.get(t.id);\r
+\r
+                               return {\r
+                                       w : parseInt(t.getStyle('width') || n.clientWidth),\r
+                                       h : parseInt(t.getStyle('height') || n.clientHeight)\r
+                               };\r
+                       },\r
+\r
+                       moveTo : function(x, y) {\r
+                               t.setStyles({left : x, top : y});\r
+                       },\r
+\r
+                       moveBy : function(x, y) {\r
+                               var p = t.getXY();\r
+\r
+                               t.moveTo(p.x + x, p.y + y);\r
+                       },\r
+\r
+                       resizeTo : function(w, h) {\r
+                               t.setStyles({width : w, height : h});\r
+                       },\r
+\r
+                       resizeBy : function(w, h) {\r
+                               var s = t.getSize();\r
+\r
+                               t.resizeTo(s.w + w, s.h + h);\r
+                       },\r
+\r
+                       update : function(k) {\r
+                               var b;\r
+\r
+                               if (tinymce.isIE6 && settings.blocker) {\r
+                                       k = k || '';\r
+\r
+                                       // Ignore getters\r
+                                       if (k.indexOf('get') === 0 || k.indexOf('has') === 0 || k.indexOf('is') === 0)\r
+                                               return;\r
+\r
+                                       // Remove blocker on remove\r
+                                       if (k == 'remove') {\r
+                                               dom.remove(t.blocker);\r
+                                               return;\r
+                                       }\r
+\r
+                                       if (!t.blocker) {\r
+                                               t.blocker = dom.uniqueId();\r
+                                               b = dom.add(settings.container || dom.getRoot(), 'iframe', {id : t.blocker, style : 'position:absolute;', frameBorder : 0, src : 'javascript:""'});\r
+                                               dom.setStyle(b, 'opacity', 0);\r
+                                       } else\r
+                                               b = dom.get(t.blocker);\r
+\r
+                                       dom.setStyles(b, {\r
+                                               left : t.getStyle('left', 1),\r
+                                               top : t.getStyle('top', 1),\r
+                                               width : t.getStyle('width', 1),\r
+                                               height : t.getStyle('height', 1),\r
+                                               display : t.getStyle('display', 1),\r
+                                               zIndex : parseInt(t.getStyle('zIndex', 1) || 0) - 1\r
+                                       });\r
+                               }\r
+                       }\r
+               });\r
+       };\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       function trimNl(s) {\r
+               return s.replace(/[\n\r]+/g, '');\r
+       };\r
+\r
+       // Shorten names\r
+       var is = tinymce.is, isIE = tinymce.isIE, each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.dom.Selection', {\r
+               Selection : function(dom, win, serializer) {\r
+                       var t = this;\r
+\r
+                       t.dom = dom;\r
+                       t.win = win;\r
+                       t.serializer = serializer;\r
+\r
+                       // Add events\r
+                       each([\r
+                               'onBeforeSetContent',\r
+                               'onBeforeGetContent',\r
+                               'onSetContent',\r
+                               'onGetContent'\r
+                       ], function(e) {\r
+                               t[e] = new tinymce.util.Dispatcher(t);\r
+                       });\r
+\r
+                       // No W3C Range support\r
+                       if (!t.win.getSelection)\r
+                               t.tridentSel = new tinymce.dom.TridentSelection(t);\r
+\r
+                       // Prevent leaks\r
+                       tinymce.addUnload(t.destroy, t);\r
+               },\r
+\r
+               getContent : function(s) {\r
+                       var t = this, r = t.getRng(), e = t.dom.create("body"), se = t.getSel(), wb, wa, n;\r
+\r
+                       s = s || {};\r
+                       wb = wa = '';\r
+                       s.get = true;\r
+                       s.format = s.format || 'html';\r
+                       t.onBeforeGetContent.dispatch(t, s);\r
+\r
+                       if (s.format == 'text')\r
+                               return t.isCollapsed() ? '' : (r.text || (se.toString ? se.toString() : ''));\r
+\r
+                       if (r.cloneContents) {\r
+                               n = r.cloneContents();\r
+\r
+                               if (n)\r
+                                       e.appendChild(n);\r
+                       } else if (is(r.item) || is(r.htmlText))\r
+                               e.innerHTML = r.item ? r.item(0).outerHTML : r.htmlText;\r
+                       else\r
+                               e.innerHTML = r.toString();\r
+\r
+                       // Keep whitespace before and after\r
+                       if (/^\s/.test(e.innerHTML))\r
+                               wb = ' ';\r
+\r
+                       if (/\s+$/.test(e.innerHTML))\r
+                               wa = ' ';\r
+\r
+                       s.getInner = true;\r
+\r
+                       s.content = t.isCollapsed() ? '' : wb + t.serializer.serialize(e, s) + wa;\r
+                       t.onGetContent.dispatch(t, s);\r
+\r
+                       return s.content;\r
+               },\r
+\r
+               setContent : function(h, s) {\r
+                       var t = this, r = t.getRng(), c, d = t.win.document;\r
+\r
+                       s = s || {format : 'html'};\r
+                       s.set = true;\r
+                       h = s.content = t.dom.processHTML(h);\r
+\r
+                       // Dispatch before set content event\r
+                       t.onBeforeSetContent.dispatch(t, s);\r
+                       h = s.content;\r
+\r
+                       if (r.insertNode) {\r
+                               // Make caret marker since insertNode places the caret in the beginning of text after insert\r
+                               h += '<span id="__caret">_</span>';\r
+\r
+                               // Delete and insert new node\r
+                               \r
+                               if (r.startContainer == d && r.endContainer ==  d) {\r
+                                       // WebKit will fail if the body is empty since the range is then invalid and it can't insert contents\r
+                                       d.body.innerHTML = h;\r
+                               } else {\r
+                                       r.deleteContents();\r
+                                       if (d.body.childNodes.length == 0) {\r
+                                               d.body.innerHTML = h;\r
+                                       } else {\r
+                                               r.insertNode(r.createContextualFragment(h));\r
+                                       }\r
+                               }\r
+\r
+                               // Move to caret marker\r
+                               c = t.dom.get('__caret');\r
+                               // Make sure we wrap it compleatly, Opera fails with a simple select call\r
+                               r = d.createRange();\r
+                               r.setStartBefore(c);\r
+                               r.setEndBefore(c);\r
+                               t.setRng(r);\r
+\r
+                               // Remove the caret position\r
+                               t.dom.remove('__caret');\r
+                       } else {\r
+                               if (r.item) {\r
+                                       // Delete content and get caret text selection\r
+                                       d.execCommand('Delete', false, null);\r
+                                       r = t.getRng();\r
+                               }\r
+\r
+                               r.pasteHTML(h);\r
+                       }\r
+\r
+                       // Dispatch set content event\r
+                       t.onSetContent.dispatch(t, s);\r
+               },\r
+\r
+               getStart : function() {\r
+                       var rng = this.getRng(), startElement, parentElement, checkRng, node;\r
+\r
+                       if (rng.duplicate || rng.item) {\r
+                               // Control selection, return first item\r
+                               if (rng.item)\r
+                                       return rng.item(0);\r
+\r
+                               // Get start element\r
+                               checkRng = rng.duplicate();\r
+                               checkRng.collapse(1);\r
+                               startElement = checkRng.parentElement();\r
+\r
+                               // Check if range parent is inside the start element, then return the inner parent element\r
+                               // This will fix issues when a single element is selected, IE would otherwise return the wrong start element\r
+                               parentElement = node = rng.parentElement();\r
+                               while (node = node.parentNode) {\r
+                                       if (node == startElement) {\r
+                                               startElement = parentElement;\r
+                                               break;\r
+                                       }\r
+                               }\r
+\r
+                               // If start element is body element try to move to the first child if it exists\r
+                               if (startElement && startElement.nodeName == 'BODY')\r
+                                       return startElement.firstChild || startElement;\r
+\r
+                               return startElement;\r
+                       } else {\r
+                               startElement = rng.startContainer;\r
+\r
+                               if (startElement.nodeType == 1 && startElement.hasChildNodes())\r
+                                       startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];\r
+\r
+                               if (startElement && startElement.nodeType == 3)\r
+                                       return startElement.parentNode;\r
+\r
+                               return startElement;\r
+                       }\r
+               },\r
+\r
+               getEnd : function() {\r
+                       var t = this, r = t.getRng(), e, eo;\r
+\r
+                       if (r.duplicate || r.item) {\r
+                               if (r.item)\r
+                                       return r.item(0);\r
+\r
+                               r = r.duplicate();\r
+                               r.collapse(0);\r
+                               e = r.parentElement();\r
+\r
+                               if (e && e.nodeName == 'BODY')\r
+                                       return e.lastChild || e;\r
+\r
+                               return e;\r
+                       } else {\r
+                               e = r.endContainer;\r
+                               eo = r.endOffset;\r
+\r
+                               if (e.nodeType == 1 && e.hasChildNodes())\r
+                                       e = e.childNodes[eo > 0 ? eo - 1 : eo];\r
+\r
+                               if (e && e.nodeType == 3)\r
+                                       return e.parentNode;\r
+\r
+                               return e;\r
+                       }\r
+               },\r
+\r
+               getBookmark : function(type, normalized) {\r
+                       var t = this, dom = t.dom, rng, rng2, id, collapsed, name, element, index, chr = '\uFEFF', styles;\r
+\r
+                       function findIndex(name, element) {\r
+                               var index = 0;\r
+\r
+                               each(dom.select(name), function(node, i) {\r
+                                       if (node == element)\r
+                                               index = i;\r
+                               });\r
+\r
+                               return index;\r
+                       };\r
+\r
+                       if (type == 2) {\r
+                               function getLocation() {\r
+                                       var rng = t.getRng(true), root = dom.getRoot(), bookmark = {};\r
+\r
+                                       function getPoint(rng, start) {\r
+                                               var container = rng[start ? 'startContainer' : 'endContainer'],\r
+                                                       offset = rng[start ? 'startOffset' : 'endOffset'], point = [], node, childNodes, after = 0;\r
+\r
+                                               if (container.nodeType == 3) {\r
+                                                       if (normalized) {\r
+                                                               for (node = container.previousSibling; node && node.nodeType == 3; node = node.previousSibling)\r
+                                                                       offset += node.nodeValue.length;\r
+                                                       }\r
+\r
+                                                       point.push(offset);\r
+                                               } else {\r
+                                                       childNodes = container.childNodes;\r
+\r
+                                                       if (offset >= childNodes.length && childNodes.length) {\r
+                                                               after = 1;\r
+                                                               offset = Math.max(0, childNodes.length - 1);\r
+                                                       }\r
+\r
+                                                       point.push(t.dom.nodeIndex(childNodes[offset], normalized) + after);\r
+                                               }\r
+\r
+                                               for (; container && container != root; container = container.parentNode)\r
+                                                       point.push(t.dom.nodeIndex(container, normalized));\r
+\r
+                                               return point;\r
+                                       };\r
+\r
+                                       bookmark.start = getPoint(rng, true);\r
+\r
+                                       if (!t.isCollapsed())\r
+                                               bookmark.end = getPoint(rng);\r
+\r
+                                       return bookmark;\r
+                               };\r
+\r
+                               return getLocation();\r
+                       }\r
+\r
+                       // Handle simple range\r
+                       if (type)\r
+                               return {rng : t.getRng()};\r
+\r
+                       rng = t.getRng();\r
+                       id = dom.uniqueId();\r
+                       collapsed = tinyMCE.activeEditor.selection.isCollapsed();\r
+                       styles = 'overflow:hidden;line-height:0px';\r
+\r
+                       // Explorer method\r
+                       if (rng.duplicate || rng.item) {\r
+                               // Text selection\r
+                               if (!rng.item) {\r
+                                       rng2 = rng.duplicate();\r
+\r
+                                       // Insert start marker\r
+                                       rng.collapse();\r
+                                       rng.pasteHTML('<span _mce_type="bookmark" id="' + id + '_start" style="' + styles + '">' + chr + '</span>');\r
+\r
+                                       // Insert end marker\r
+                                       if (!collapsed) {\r
+                                               rng2.collapse(false);\r
+                                               rng2.pasteHTML('<span _mce_type="bookmark" id="' + id + '_end" style="' + styles + '">' + chr + '</span>');\r
+                                       }\r
+                               } else {\r
+                                       // Control selection\r
+                                       element = rng.item(0);\r
+                                       name = element.nodeName;\r
+\r
+                                       return {name : name, index : findIndex(name, element)};\r
+                               }\r
+                       } else {\r
+                               element = t.getNode();\r
+                               name = element.nodeName;\r
+                               if (name == 'IMG')\r
+                                       return {name : name, index : findIndex(name, element)};\r
+\r
+                               // W3C method\r
+                               rng2 = rng.cloneRange();\r
+\r
+                               // Insert end marker\r
+                               if (!collapsed) {\r
+                                       rng2.collapse(false);\r
+                                       rng2.insertNode(dom.create('span', {_mce_type : "bookmark", id : id + '_end', style : styles}, chr));\r
+                               }\r
+\r
+                               rng.collapse(true);\r
+                               rng.insertNode(dom.create('span', {_mce_type : "bookmark", id : id + '_start', style : styles}, chr));\r
+                       }\r
+\r
+                       t.moveToBookmark({id : id, keep : 1});\r
+\r
+                       return {id : id};\r
+               },\r
+\r
+               moveToBookmark : function(bookmark) {\r
+                       var t = this, dom = t.dom, marker1, marker2, rng, root, startContainer, endContainer, startOffset, endOffset;\r
+\r
+                       // Clear selection cache\r
+                       if (t.tridentSel)\r
+                               t.tridentSel.destroy();\r
+\r
+                       if (bookmark) {\r
+                               if (bookmark.start) {\r
+                                       rng = dom.createRng();\r
+                                       root = dom.getRoot();\r
+\r
+                                       function setEndPoint(start) {\r
+                                               var point = bookmark[start ? 'start' : 'end'], i, node, offset, children;\r
+\r
+                                               if (point) {\r
+                                                       // Find container node\r
+                                                       for (node = root, i = point.length - 1; i >= 1; i--) {\r
+                                                               children = node.childNodes;\r
+\r
+                                                               if (children.length)\r
+                                                                       node = children[point[i]];\r
+                                                       }\r
+\r
+                                                       // Set offset within container node\r
+                                                       if (start)\r
+                                                               rng.setStart(node, point[0]);\r
+                                                       else\r
+                                                               rng.setEnd(node, point[0]);\r
+                                               }\r
+                                       };\r
+\r
+                                       setEndPoint(true);\r
+                                       setEndPoint();\r
+\r
+                                       t.setRng(rng);\r
+                               } else if (bookmark.id) {\r
+                                       function restoreEndPoint(suffix) {\r
+                                               var marker = dom.get(bookmark.id + '_' + suffix), node, idx, next, prev, keep = bookmark.keep;\r
+\r
+                                               if (marker) {\r
+                                                       node = marker.parentNode;\r
+\r
+                                                       if (suffix == 'start') {\r
+                                                               if (!keep) {\r
+                                                                       idx = dom.nodeIndex(marker);\r
+                                                               } else {\r
+                                                                       node = marker.firstChild;\r
+                                                                       idx = 1;\r
+                                                               }\r
+\r
+                                                               startContainer = endContainer = node;\r
+                                                               startOffset = endOffset = idx;\r
+                                                       } else {\r
+                                                               if (!keep) {\r
+                                                                       idx = dom.nodeIndex(marker);\r
+                                                               } else {\r
+                                                                       node = marker.firstChild;\r
+                                                                       idx = 1;\r
+                                                               }\r
+\r
+                                                               endContainer = node;\r
+                                                               endOffset = idx;\r
+                                                       }\r
+\r
+                                                       if (!keep) {\r
+                                                               prev = marker.previousSibling;\r
+                                                               next = marker.nextSibling;\r
+\r
+                                                               // Remove all marker text nodes\r
+                                                               each(tinymce.grep(marker.childNodes), function(node) {\r
+                                                                       if (node.nodeType == 3)\r
+                                                                               node.nodeValue = node.nodeValue.replace(/\uFEFF/g, '');\r
+                                                               });\r
+\r
+                                                               // Remove marker but keep children if for example contents where inserted into the marker\r
+                                                               // Also remove duplicated instances of the marker for example by a split operation or by WebKit auto split on paste feature\r
+                                                               while (marker = dom.get(bookmark.id + '_' + suffix))\r
+                                                                       dom.remove(marker, 1);\r
+\r
+                                                               // If siblings are text nodes then merge them\r
+                                                               if (prev && next && prev.nodeType == next.nodeType && prev.nodeType == 3) {\r
+                                                                       idx = prev.nodeValue.length;\r
+                                                                       prev.appendData(next.nodeValue);\r
+                                                                       dom.remove(next);\r
+\r
+                                                                       if (suffix == 'start') {\r
+                                                                               startContainer = endContainer = prev;\r
+                                                                               startOffset = endOffset = idx;\r
+                                                                       } else {\r
+                                                                               endContainer = prev;\r
+                                                                               endOffset = idx;\r
+                                                                       }\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       };\r
+\r
+                                       function addBogus(node) {\r
+                                               // Adds a bogus BR element for empty block elements\r
+                                               // on non IE browsers just to have a place to put the caret\r
+                                               if (!isIE && dom.isBlock(node) && !node.innerHTML)\r
+                                                       node.innerHTML = '<br _mce_bogus="1" />';\r
+\r
+                                               return node;\r
+                                       };\r
+\r
+                                       // Restore start/end points\r
+                                       restoreEndPoint('start');\r
+                                       restoreEndPoint('end');\r
+\r
+                                       rng = dom.createRng();\r
+                                       rng.setStart(addBogus(startContainer), startOffset);\r
+                                       rng.setEnd(addBogus(endContainer), endOffset);\r
+                                       t.setRng(rng);\r
+                               } else if (bookmark.name) {\r
+                                       t.select(dom.select(bookmark.name)[bookmark.index]);\r
+                               } else if (bookmark.rng)\r
+                                       t.setRng(bookmark.rng);\r
+                       }\r
+               },\r
+\r
+               select : function(node, content) {\r
+                       var t = this, dom = t.dom, rng = dom.createRng(), idx;\r
+\r
+                       idx = dom.nodeIndex(node);\r
+                       rng.setStart(node.parentNode, idx);\r
+                       rng.setEnd(node.parentNode, idx + 1);\r
+\r
+                       // Find first/last text node or BR element\r
+                       if (content) {\r
+                               function setPoint(node, start) {\r
+                                       var walker = new tinymce.dom.TreeWalker(node, node);\r
+\r
+                                       do {\r
+                                               // Text node\r
+                                               if (node.nodeType == 3 && tinymce.trim(node.nodeValue).length != 0) {\r
+                                                       if (start)\r
+                                                               rng.setStart(node, 0);\r
+                                                       else\r
+                                                               rng.setEnd(node, node.nodeValue.length);\r
+\r
+                                                       return;\r
+                                               }\r
+\r
+                                               // BR element\r
+                                               if (node.nodeName == 'BR') {\r
+                                                       if (start)\r
+                                                               rng.setStartBefore(node);\r
+                                                       else\r
+                                                               rng.setEndBefore(node);\r
+\r
+                                                       return;\r
+                                               }\r
+                                       } while (node = (start ? walker.next() : walker.prev()));\r
+                               };\r
+\r
+                               setPoint(node, 1);\r
+                               setPoint(node);\r
+                       }\r
+\r
+                       t.setRng(rng);\r
+\r
+                       return node;\r
+               },\r
+\r
+               isCollapsed : function() {\r
+                       var t = this, r = t.getRng(), s = t.getSel();\r
+\r
+                       if (!r || r.item)\r
+                               return false;\r
+\r
+                       if (r.compareEndPoints)\r
+                               return r.compareEndPoints('StartToEnd', r) === 0;\r
+\r
+                       return !s || r.collapsed;\r
+               },\r
+\r
+               collapse : function(b) {\r
+                       var t = this, r = t.getRng(), n;\r
+\r
+                       // Control range on IE\r
+                       if (r.item) {\r
+                               n = r.item(0);\r
+                               r = this.win.document.body.createTextRange();\r
+                               r.moveToElementText(n);\r
+                       }\r
+\r
+                       r.collapse(!!b);\r
+                       t.setRng(r);\r
+               },\r
+\r
+               getSel : function() {\r
+                       var t = this, w = this.win;\r
+\r
+                       return w.getSelection ? w.getSelection() : w.document.selection;\r
+               },\r
+\r
+               getRng : function(w3c) {\r
+                       var t = this, s, r;\r
+\r
+                       // Found tridentSel object then we need to use that one\r
+                       if (w3c && t.tridentSel)\r
+                               return t.tridentSel.getRangeAt(0);\r
+\r
+                       try {\r
+                               if (s = t.getSel())\r
+                                       r = s.rangeCount > 0 ? s.getRangeAt(0) : (s.createRange ? s.createRange() : t.win.document.createRange());\r
+                       } catch (ex) {\r
+                               // IE throws unspecified error here if TinyMCE is placed in a frame/iframe\r
+                       }\r
+\r
+                       // No range found then create an empty one\r
+                       // This can occur when the editor is placed in a hidden container element on Gecko\r
+                       // Or on IE when there was an exception\r
+                       if (!r)\r
+                               r = t.win.document.createRange ? t.win.document.createRange() : t.win.document.body.createTextRange();\r
+\r
+                       if (t.selectedRange && t.explicitRange) {\r
+                               if (r.compareBoundaryPoints(r.START_TO_START, t.selectedRange) === 0 && r.compareBoundaryPoints(r.END_TO_END, t.selectedRange) === 0) {\r
+                                       // Safari, Opera and Chrome only ever select text which causes the range to change.\r
+                                       // This lets us use the originally set range if the selection hasn't been changed by the user.\r
+                                       r = t.explicitRange;\r
+                               } else {\r
+                                       t.selectedRange = null;\r
+                                       t.explicitRange = null;\r
+                               }\r
+                       }\r
+                       return r;\r
+               },\r
+\r
+               setRng : function(r) {\r
+                       var s, t = this;\r
+                       \r
+                       if (!t.tridentSel) {\r
+                               s = t.getSel();\r
+\r
+                               if (s) {\r
+                                       t.explicitRange = r;\r
+                                       s.removeAllRanges();\r
+                                       s.addRange(r);\r
+                                       t.selectedRange = s.getRangeAt(0);\r
+                               }\r
+                       } else {\r
+                               // Is W3C Range\r
+                               if (r.cloneRange) {\r
+                                       t.tridentSel.addRange(r);\r
+                                       return;\r
+                               }\r
+\r
+                               // Is IE specific range\r
+                               try {\r
+                                       r.select();\r
+                               } catch (ex) {\r
+                                       // Needed for some odd IE bug #1843306\r
+                               }\r
+                       }\r
+               },\r
+\r
+               setNode : function(n) {\r
+                       var t = this;\r
+\r
+                       t.setContent(t.dom.getOuterHTML(n));\r
+\r
+                       return n;\r
+               },\r
+\r
+               getNode : function() {\r
+                       var t = this, rng = t.getRng(), sel = t.getSel(), elm;\r
+\r
+                       if (rng.setStart) {\r
+                               // Range maybe lost after the editor is made visible again\r
+                               if (!rng)\r
+                                       return t.dom.getRoot();\r
+\r
+                               elm = rng.commonAncestorContainer;\r
+\r
+                               // Handle selection a image or other control like element such as anchors\r
+                               if (!rng.collapsed) {\r
+                                       if (rng.startContainer == rng.endContainer) {\r
+                                               if (rng.startOffset - rng.endOffset < 2) {\r
+                                                       if (rng.startContainer.hasChildNodes())\r
+                                                               elm = rng.startContainer.childNodes[rng.startOffset];\r
+                                               }\r
+                                       }\r
+\r
+                                       // If the anchor node is a element instead of a text node then return this element\r
+                                       if (tinymce.isWebKit && sel.anchorNode && sel.anchorNode.nodeType == 1) \r
+                                               return sel.anchorNode.childNodes[sel.anchorOffset]; \r
+                               }\r
+\r
+                               if (elm && elm.nodeType == 3)\r
+                                       return elm.parentNode;\r
+\r
+                               return elm;\r
+                       }\r
+\r
+                       return rng.item ? rng.item(0) : rng.parentElement();\r
+               },\r
+\r
+               getSelectedBlocks : function(st, en) {\r
+                       var t = this, dom = t.dom, sb, eb, n, bl = [];\r
+\r
+                       sb = dom.getParent(st || t.getStart(), dom.isBlock);\r
+                       eb = dom.getParent(en || t.getEnd(), dom.isBlock);\r
+\r
+                       if (sb)\r
+                               bl.push(sb);\r
+\r
+                       if (sb && eb && sb != eb) {\r
+                               n = sb;\r
+\r
+                               while ((n = n.nextSibling) && n != eb) {\r
+                                       if (dom.isBlock(n))\r
+                                               bl.push(n);\r
+                               }\r
+                       }\r
+\r
+                       if (eb && sb != eb)\r
+                               bl.push(eb);\r
+\r
+                       return bl;\r
+               },\r
+\r
+               destroy : function(s) {\r
+                       var t = this;\r
+\r
+                       t.win = null;\r
+\r
+                       if (t.tridentSel)\r
+                               t.tridentSel.destroy();\r
+\r
+                       // Manual destroy then remove unload handler\r
+                       if (!s)\r
+                               tinymce.removeUnload(t.destroy);\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       tinymce.create('tinymce.dom.XMLWriter', {\r
+               node : null,\r
+\r
+               XMLWriter : function(s) {\r
+                       // Get XML document\r
+                       function getXML() {\r
+                               var i = document.implementation;\r
+\r
+                               if (!i || !i.createDocument) {\r
+                                       // Try IE objects\r
+                                       try {return new ActiveXObject('MSXML2.DOMDocument');} catch (ex) {}\r
+                                       try {return new ActiveXObject('Microsoft.XmlDom');} catch (ex) {}\r
+                               } else\r
+                                       return i.createDocument('', '', null);\r
+                       };\r
+\r
+                       this.doc = getXML();\r
+                       \r
+                       // Since Opera and WebKit doesn't escape > into &gt; we need to do it our self to normalize the output for all browsers\r
+                       this.valid = tinymce.isOpera || tinymce.isWebKit;\r
+\r
+                       this.reset();\r
+               },\r
+\r
+               reset : function() {\r
+                       var t = this, d = t.doc;\r
+\r
+                       if (d.firstChild)\r
+                               d.removeChild(d.firstChild);\r
+\r
+                       t.node = d.appendChild(d.createElement("html"));\r
+               },\r
+\r
+               writeStartElement : function(n) {\r
+                       var t = this;\r
+\r
+                       t.node = t.node.appendChild(t.doc.createElement(n));\r
+               },\r
+\r
+               writeAttribute : function(n, v) {\r
+                       if (this.valid)\r
+                               v = v.replace(/>/g, '%MCGT%');\r
+\r
+                       this.node.setAttribute(n, v);\r
+               },\r
+\r
+               writeEndElement : function() {\r
+                       this.node = this.node.parentNode;\r
+               },\r
+\r
+               writeFullEndElement : function() {\r
+                       var t = this, n = t.node;\r
+\r
+                       n.appendChild(t.doc.createTextNode(""));\r
+                       t.node = n.parentNode;\r
+               },\r
+\r
+               writeText : function(v) {\r
+                       if (this.valid)\r
+                               v = v.replace(/>/g, '%MCGT%');\r
+\r
+                       this.node.appendChild(this.doc.createTextNode(v));\r
+               },\r
+\r
+               writeCDATA : function(v) {\r
+                       this.node.appendChild(this.doc.createCDATASection(v));\r
+               },\r
+\r
+               writeComment : function(v) {\r
+                       // Fix for bug #2035694\r
+                       if (tinymce.isIE)\r
+                               v = v.replace(/^\-|\-$/g, ' ');\r
+\r
+                       this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g, ' ')));\r
+               },\r
+\r
+               getContent : function() {\r
+                       var h;\r
+\r
+                       h = this.doc.xml || new XMLSerializer().serializeToString(this.doc);\r
+                       h = h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g, '');\r
+                       h = h.replace(/ ?\/>/g, ' />');\r
+\r
+                       if (this.valid)\r
+                               h = h.replace(/\%MCGT%/g, '&gt;');\r
+\r
+                       return h;\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       tinymce.create('tinymce.dom.StringWriter', {\r
+               str : null,\r
+               tags : null,\r
+               count : 0,\r
+               settings : null,\r
+               indent : null,\r
+\r
+               StringWriter : function(s) {\r
+                       this.settings = tinymce.extend({\r
+                               indent_char : ' ',\r
+                               indentation : 0\r
+                       }, s);\r
+\r
+                       this.reset();\r
+               },\r
+\r
+               reset : function() {\r
+                       this.indent = '';\r
+                       this.str = "";\r
+                       this.tags = [];\r
+                       this.count = 0;\r
+               },\r
+\r
+               writeStartElement : function(n) {\r
+                       this._writeAttributesEnd();\r
+                       this.writeRaw('<' + n);\r
+                       this.tags.push(n);\r
+                       this.inAttr = true;\r
+                       this.count++;\r
+                       this.elementCount = this.count;\r
+               },\r
+\r
+               writeAttribute : function(n, v) {\r
+                       var t = this;\r
+\r
+                       t.writeRaw(" " + t.encode(n) + '="' + t.encode(v) + '"');\r
+               },\r
+\r
+               writeEndElement : function() {\r
+                       var n;\r
+\r
+                       if (this.tags.length > 0) {\r
+                               n = this.tags.pop();\r
+\r
+                               if (this._writeAttributesEnd(1))\r
+                                       this.writeRaw('</' + n + '>');\r
+\r
+                               if (this.settings.indentation > 0)\r
+                                       this.writeRaw('\n');\r
+                       }\r
+               },\r
+\r
+               writeFullEndElement : function() {\r
+                       if (this.tags.length > 0) {\r
+                               this._writeAttributesEnd();\r
+                               this.writeRaw('</' + this.tags.pop() + '>');\r
+\r
+                               if (this.settings.indentation > 0)\r
+                                       this.writeRaw('\n');\r
+                       }\r
+               },\r
+\r
+               writeText : function(v) {\r
+                       this._writeAttributesEnd();\r
+                       this.writeRaw(this.encode(v));\r
+                       this.count++;\r
+               },\r
+\r
+               writeCDATA : function(v) {\r
+                       this._writeAttributesEnd();\r
+                       this.writeRaw('<![CDATA[' + v + ']]>');\r
+                       this.count++;\r
+               },\r
+\r
+               writeComment : function(v) {\r
+                       this._writeAttributesEnd();\r
+                       this.writeRaw('<!-- ' + v + '-->');\r
+                       this.count++;\r
+               },\r
+\r
+               writeRaw : function(v) {\r
+                       this.str += v;\r
+               },\r
+\r
+               encode : function(s) {\r
+                       return s.replace(/[<>&"]/g, function(v) {\r
+                               switch (v) {\r
+                                       case '<':\r
+                                               return '&lt;';\r
+\r
+                                       case '>':\r
+                                               return '&gt;';\r
+\r
+                                       case '&':\r
+                                               return '&amp;';\r
+\r
+                                       case '"':\r
+                                               return '&quot;';\r
+                               }\r
+\r
+                               return v;\r
+                       });\r
+               },\r
+\r
+               getContent : function() {\r
+                       return this.str;\r
+               },\r
+\r
+               _writeAttributesEnd : function(s) {\r
+                       if (!this.inAttr)\r
+                               return;\r
+\r
+                       this.inAttr = false;\r
+\r
+                       if (s && this.elementCount == this.count) {\r
+                               this.writeRaw(' />');\r
+                               return false;\r
+                       }\r
+\r
+                       this.writeRaw('>');\r
+\r
+                       return true;\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       // Shorten names\r
+       var extend = tinymce.extend, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher, isIE = tinymce.isIE, isGecko = tinymce.isGecko;\r
+\r
+       function wildcardToRE(s) {\r
+               return s.replace(/([?+*])/g, '.$1');\r
+       };\r
+\r
+       tinymce.create('tinymce.dom.Serializer', {\r
+               Serializer : function(s) {\r
+                       var t = this;\r
+\r
+                       t.key = 0;\r
+                       t.onPreProcess = new Dispatcher(t);\r
+                       t.onPostProcess = new Dispatcher(t);\r
+\r
+                       try {\r
+                               t.writer = new tinymce.dom.XMLWriter();\r
+                       } catch (ex) {\r
+                               // IE might throw exception if ActiveX is disabled so we then switch to the slightly slower StringWriter\r
+                               t.writer = new tinymce.dom.StringWriter();\r
+                       }\r
+\r
+                       // Default settings\r
+                       t.settings = s = extend({\r
+                               dom : tinymce.DOM,\r
+                               valid_nodes : 0,\r
+                               node_filter : 0,\r
+                               attr_filter : 0,\r
+                               invalid_attrs : /^(_mce_|_moz_|sizset|sizcache)/,\r
+                               closed : /^(br|hr|input|meta|img|link|param|area)$/,\r
+                               entity_encoding : 'named',\r
+                               entities : '160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',\r
+                               valid_elements : '*[*]',\r
+                               extended_valid_elements : 0,\r
+                               invalid_elements : 0,\r
+                               fix_table_elements : 1,\r
+                               fix_list_elements : true,\r
+                               fix_content_duplication : true,\r
+                               convert_fonts_to_spans : false,\r
+                               font_size_classes : 0,\r
+                               apply_source_formatting : 0,\r
+                               indent_mode : 'simple',\r
+                               indent_char : '\t',\r
+                               indent_levels : 1,\r
+                               remove_linebreaks : 1,\r
+                               remove_redundant_brs : 1,\r
+                               element_format : 'xhtml'\r
+                       }, s);\r
+\r
+                       t.dom = s.dom;\r
+                       t.schema = s.schema;\r
+\r
+                       // Use raw entities if no entities are defined\r
+                       if (s.entity_encoding == 'named' && !s.entities)\r
+                               s.entity_encoding = 'raw';\r
+\r
+                       if (s.remove_redundant_brs) {\r
+                               t.onPostProcess.add(function(se, o) {\r
+                                       // Remove single BR at end of block elements since they get rendered\r
+                                       o.content = o.content.replace(/(<br \/>\s*)+<\/(p|h[1-6]|div|li)>/gi, function(a, b, c) {\r
+                                               // Check if it's a single element\r
+                                               if (/^<br \/>\s*<\//.test(a))\r
+                                                       return '</' + c + '>';\r
+\r
+                                               return a;\r
+                                       });\r
+                               });\r
+                       }\r
+\r
+                       // Remove XHTML element endings i.e. produce crap :) XHTML is better\r
+                       if (s.element_format == 'html') {\r
+                               t.onPostProcess.add(function(se, o) {\r
+                                       o.content = o.content.replace(/<([^>]+) \/>/g, '<$1>');\r
+                               });\r
+                       }\r
+\r
+                       if (s.fix_list_elements) {\r
+                               t.onPreProcess.add(function(se, o) {\r
+                                       var nl, x, a = ['ol', 'ul'], i, n, p, r = /^(OL|UL)$/, np;\r
+\r
+                                       function prevNode(e, n) {\r
+                                               var a = n.split(','), i;\r
+\r
+                                               while ((e = e.previousSibling) != null) {\r
+                                                       for (i=0; i<a.length; i++) {\r
+                                                               if (e.nodeName == a[i])\r
+                                                                       return e;\r
+                                                       }\r
+                                               }\r
+\r
+                                               return null;\r
+                                       };\r
+\r
+                                       for (x=0; x<a.length; x++) {\r
+                                               nl = t.dom.select(a[x], o.node);\r
+\r
+                                               for (i=0; i<nl.length; i++) {\r
+                                                       n = nl[i];\r
+                                                       p = n.parentNode;\r
+\r
+                                                       if (r.test(p.nodeName)) {\r
+                                                               np = prevNode(n, 'LI');\r
+\r
+                                                               if (!np) {\r
+                                                                       np = t.dom.create('li');\r
+                                                                       np.innerHTML = '&nbsp;';\r
+                                                                       np.appendChild(n);\r
+                                                                       p.insertBefore(np, p.firstChild);\r
+                                                               } else\r
+                                                                       np.appendChild(n);\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       if (s.fix_table_elements) {\r
+                               t.onPreProcess.add(function(se, o) {\r
+                                       // Since Opera will crash if you attach the node to a dynamic document we need to brrowser sniff a specific build\r
+                                       // so Opera users with an older version will have to live with less compaible output not much we can do here\r
+                                       if (!tinymce.isOpera || opera.buildNumber() >= 1767) {\r
+                                               each(t.dom.select('p table', o.node).reverse(), function(n) {\r
+                                                       var parent = t.dom.getParent(n.parentNode, 'table,p');\r
+\r
+                                                       if (parent.nodeName != 'TABLE') {\r
+                                                               try {\r
+                                                                       t.dom.split(parent, n);\r
+                                                               } catch (ex) {\r
+                                                                       // IE can sometimes fire an unknown runtime error so we just ignore it\r
+                                                               }\r
+                                                       }\r
+                                               });\r
+                                       }\r
+                               });\r
+                       }\r
+               },\r
+\r
+               setEntities : function(s) {\r
+                       var t = this, a, i, l = {}, v;\r
+\r
+                       // No need to setup more than once\r
+                       if (t.entityLookup)\r
+                               return;\r
+\r
+                       // Build regex and lookup array\r
+                       a = s.split(',');\r
+                       for (i = 0; i < a.length; i += 2) {\r
+                               v = a[i];\r
+\r
+                               // Don't add default &amp; &quot; etc.\r
+                               if (v == 34 || v == 38 || v == 60 || v == 62)\r
+                                       continue;\r
+\r
+                               l[String.fromCharCode(a[i])] = a[i + 1];\r
+\r
+                               v = parseInt(a[i]).toString(16);\r
+                       }\r
+\r
+                       t.entityLookup = l;\r
+               },\r
+\r
+               setRules : function(s) {\r
+                       var t = this;\r
+\r
+                       t._setup();\r
+                       t.rules = {};\r
+                       t.wildRules = [];\r
+                       t.validElements = {};\r
+\r
+                       return t.addRules(s);\r
+               },\r
+\r
+               addRules : function(s) {\r
+                       var t = this, dr;\r
+\r
+                       if (!s)\r
+                               return;\r
+\r
+                       t._setup();\r
+\r
+                       each(s.split(','), function(s) {\r
+                               var p = s.split(/\[|\]/), tn = p[0].split('/'), ra, at, wat, va = [];\r
+\r
+                               // Extend with default rules\r
+                               if (dr)\r
+                                       at = tinymce.extend([], dr.attribs);\r
+\r
+                               // Parse attributes\r
+                               if (p.length > 1) {\r
+                                       each(p[1].split('|'), function(s) {\r
+                                               var ar = {}, i;\r
+\r
+                                               at = at || [];\r
+\r
+                                               // Parse attribute rule\r
+                                               s = s.replace(/::/g, '~');\r
+                                               s = /^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);\r
+                                               s[2] = s[2].replace(/~/g, ':');\r
+\r
+                                               // Add required attributes\r
+                                               if (s[1] == '!') {\r
+                                                       ra = ra || [];\r
+                                                       ra.push(s[2]);\r
+                                               }\r
+\r
+                                               // Remove inherited attributes\r
+                                               if (s[1] == '-') {\r
+                                                       for (i = 0; i <at.length; i++) {\r
+                                                               if (at[i].name == s[2]) {\r
+                                                                       at.splice(i, 1);\r
+                                                                       return;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               switch (s[3]) {\r
+                                                       // Add default attrib values\r
+                                                       case '=':\r
+                                                               ar.defaultVal = s[4] || '';\r
+                                                               break;\r
+\r
+                                                       // Add forced attrib values\r
+                                                       case ':':\r
+                                                               ar.forcedVal = s[4];\r
+                                                               break;\r
+\r
+                                                       // Add validation values\r
+                                                       case '<':\r
+                                                               ar.validVals = s[4].split('?');\r
+                                                               break;\r
+                                               }\r
+\r
+                                               if (/[*.?]/.test(s[2])) {\r
+                                                       wat = wat || [];\r
+                                                       ar.nameRE = new RegExp('^' + wildcardToRE(s[2]) + '$');\r
+                                                       wat.push(ar);\r
+                                               } else {\r
+                                                       ar.name = s[2];\r
+                                                       at.push(ar);\r
+                                               }\r
+\r
+                                               va.push(s[2]);\r
+                                       });\r
+                               }\r
+\r
+                               // Handle element names\r
+                               each(tn, function(s, i) {\r
+                                       var pr = s.charAt(0), x = 1, ru = {};\r
+\r
+                                       // Extend with default rule data\r
+                                       if (dr) {\r
+                                               if (dr.noEmpty)\r
+                                                       ru.noEmpty = dr.noEmpty;\r
+\r
+                                               if (dr.fullEnd)\r
+                                                       ru.fullEnd = dr.fullEnd;\r
+\r
+                                               if (dr.padd)\r
+                                                       ru.padd = dr.padd;\r
+                                       }\r
+\r
+                                       // Handle prefixes\r
+                                       switch (pr) {\r
+                                               case '-':\r
+                                                       ru.noEmpty = true;\r
+                                                       break;\r
+\r
+                                               case '+':\r
+                                                       ru.fullEnd = true;\r
+                                                       break;\r
+\r
+                                               case '#':\r
+                                                       ru.padd = true;\r
+                                                       break;\r
+\r
+                                               default:\r
+                                                       x = 0;\r
+                                       }\r
+\r
+                                       tn[i] = s = s.substring(x);\r
+                                       t.validElements[s] = 1;\r
+\r
+                                       // Add element name or element regex\r
+                                       if (/[*.?]/.test(tn[0])) {\r
+                                               ru.nameRE = new RegExp('^' + wildcardToRE(tn[0]) + '$');\r
+                                               t.wildRules = t.wildRules || {};\r
+                                               t.wildRules.push(ru);\r
+                                       } else {\r
+                                               ru.name = tn[0];\r
+\r
+                                               // Store away default rule\r
+                                               if (tn[0] == '@')\r
+                                                       dr = ru;\r
+\r
+                                               t.rules[s] = ru;\r
+                                       }\r
+\r
+                                       ru.attribs = at;\r
+\r
+                                       if (ra)\r
+                                               ru.requiredAttribs = ra;\r
+\r
+                                       if (wat) {\r
+                                               // Build valid attributes regexp\r
+                                               s = '';\r
+                                               each(va, function(v) {\r
+                                                       if (s)\r
+                                                               s += '|';\r
+\r
+                                                       s += '(' + wildcardToRE(v) + ')';\r
+                                               });\r
+                                               ru.validAttribsRE = new RegExp('^' + s.toLowerCase() + '$');\r
+                                               ru.wildAttribs = wat;\r
+                                       }\r
+                               });\r
+                       });\r
+\r
+                       // Build valid elements regexp\r
+                       s = '';\r
+                       each(t.validElements, function(v, k) {\r
+                               if (s)\r
+                                       s += '|';\r
+\r
+                               if (k != '@')\r
+                                       s += k;\r
+                       });\r
+                       t.validElementsRE = new RegExp('^(' + wildcardToRE(s.toLowerCase()) + ')$');\r
+\r
+                       //console.debug(t.validElementsRE.toString());\r
+                       //console.dir(t.rules);\r
+                       //console.dir(t.wildRules);\r
+               },\r
+\r
+               findRule : function(n) {\r
+                       var t = this, rl = t.rules, i, r;\r
+\r
+                       t._setup();\r
+\r
+                       // Exact match\r
+                       r = rl[n];\r
+                       if (r)\r
+                               return r;\r
+\r
+                       // Try wildcards\r
+                       rl = t.wildRules;\r
+                       for (i = 0; i < rl.length; i++) {\r
+                               if (rl[i].nameRE.test(n))\r
+                                       return rl[i];\r
+                       }\r
+\r
+                       return null;\r
+               },\r
+\r
+               findAttribRule : function(ru, n) {\r
+                       var i, wa = ru.wildAttribs;\r
+\r
+                       for (i = 0; i < wa.length; i++) {\r
+                               if (wa[i].nameRE.test(n))\r
+                                       return wa[i];\r
+                       }\r
+\r
+                       return null;\r
+               },\r
+\r
+               serialize : function(n, o) {\r
+                       var h, t = this, doc, oldDoc, impl, selected;\r
+\r
+                       t._setup();\r
+                       o = o || {};\r
+                       o.format = o.format || 'html';\r
+                       t.processObj = o;\r
+\r
+                       // IE looses the selected attribute on option elements so we need to store it\r
+                       // See: http://support.microsoft.com/kb/829907\r
+                       if (isIE) {\r
+                               selected = [];\r
+                               each(n.getElementsByTagName('option'), function(n) {\r
+                                       var v = t.dom.getAttrib(n, 'selected');\r
+\r
+                                       selected.push(v ? v : null);\r
+                               });\r
+                       }\r
+\r
+                       n = n.cloneNode(true);\r
+\r
+                       // IE looses the selected attribute on option elements so we need to restore it\r
+                       if (isIE) {\r
+                               each(n.getElementsByTagName('option'), function(n, i) {\r
+                                       t.dom.setAttrib(n, 'selected', selected[i]);\r
+                               });\r
+                       }\r
+\r
+                       // Nodes needs to be attached to something in WebKit/Opera\r
+                       // Older builds of Opera crashes if you attach the node to an document created dynamically\r
+                       // and since we can't feature detect a crash we need to sniff the acutal build number\r
+                       // This fix will make DOM ranges and make Sizzle happy!\r
+                       impl = n.ownerDocument.implementation;\r
+                       if (impl.createHTMLDocument && (tinymce.isOpera && opera.buildNumber() >= 1767)) {\r
+                               // Create an empty HTML document\r
+                               doc = impl.createHTMLDocument("");\r
+\r
+                               // Add the element or it's children if it's a body element to the new document\r
+                               each(n.nodeName == 'BODY' ? n.childNodes : [n], function(node) {\r
+                                       doc.body.appendChild(doc.importNode(node, true));\r
+                               });\r
+\r
+                               // Grab first child or body element for serialization\r
+                               if (n.nodeName != 'BODY')\r
+                                       n = doc.body.firstChild;\r
+                               else\r
+                                       n = doc.body;\r
+\r
+                               // set the new document in DOMUtils so createElement etc works\r
+                               oldDoc = t.dom.doc;\r
+                               t.dom.doc = doc;\r
+                       }\r
+\r
+                       t.key = '' + (parseInt(t.key) + 1);\r
+\r
+                       // Pre process\r
+                       if (!o.no_events) {\r
+                               o.node = n;\r
+                               t.onPreProcess.dispatch(t, o);\r
+                       }\r
+\r
+                       // Serialize HTML DOM into a string\r
+                       t.writer.reset();\r
+                       t._info = o;\r
+                       t._serializeNode(n, o.getInner);\r
+\r
+                       // Post process\r
+                       o.content = t.writer.getContent();\r
+\r
+                       // Restore the old document if it was changed\r
+                       if (oldDoc)\r
+                               t.dom.doc = oldDoc;\r
+\r
+                       if (!o.no_events)\r
+                               t.onPostProcess.dispatch(t, o);\r
+\r
+                       t._postProcess(o);\r
+                       o.node = null;\r
+\r
+                       return tinymce.trim(o.content);\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _postProcess : function(o) {\r
+                       var t = this, s = t.settings, h = o.content, sc = [], p;\r
+\r
+                       if (o.format == 'html') {\r
+                               // Protect some elements\r
+                               p = t._protect({\r
+                                       content : h,\r
+                                       patterns : [\r
+                                               {pattern : /(<script[^>]*>)(.*?)(<\/script>)/g},\r
+                                               {pattern : /(<noscript[^>]*>)(.*?)(<\/noscript>)/g},\r
+                                               {pattern : /(<style[^>]*>)(.*?)(<\/style>)/g},\r
+                                               {pattern : /(<pre[^>]*>)(.*?)(<\/pre>)/g, encode : 1},\r
+                                               {pattern : /(<!--\[CDATA\[)(.*?)(\]\]-->)/g}\r
+                                       ]\r
+                               });\r
+\r
+                               h = p.content;\r
+\r
+                               // Entity encode\r
+                               if (s.entity_encoding !== 'raw')\r
+                                       h = t._encode(h);\r
+\r
+                               // Use BR instead of &nbsp; padded P elements inside editor and use <p>&nbsp;</p> outside editor\r
+/*                             if (o.set)\r
+                                       h = h.replace(/<p>\s+(&nbsp;|&#160;|\u00a0|<br \/>)\s+<\/p>/g, '<p><br /></p>');\r
+                               else\r
+                                       h = h.replace(/<p>\s+(&nbsp;|&#160;|\u00a0|<br \/>)\s+<\/p>/g, '<p>$1</p>');*/\r
+\r
+                               // Since Gecko and Safari keeps whitespace in the DOM we need to\r
+                               // remove it inorder to match other browsers. But I think Gecko and Safari is right.\r
+                               // This process is only done when getting contents out from the editor.\r
+                               if (!o.set) {\r
+                                       // We need to replace paragraph whitespace with an nbsp before indentation to keep the \u00a0 char\r
+                                       h = h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g, s.entity_encoding == 'numeric' ? '<p$1>&#160;</p>' : '<p$1>&nbsp;</p>');\r
+\r
+                                       if (s.remove_linebreaks) {\r
+                                               h = h.replace(/\r?\n|\r/g, ' ');\r
+                                               h = h.replace(/(<[^>]+>)\s+/g, '$1 ');\r
+                                               h = h.replace(/\s+(<\/[^>]+>)/g, ' $1');\r
+                                               h = h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g, '<$1 $2>'); // Trim block start\r
+                                               h = h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g, '<$1>'); // Trim block start\r
+                                               h = h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g, '</$1>'); // Trim block end\r
+                                       }\r
+\r
+                                       // Simple indentation\r
+                                       if (s.apply_source_formatting && s.indent_mode == 'simple') {\r
+                                               // Add line breaks before and after block elements\r
+                                               h = h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g, '\n<$1$2$3>\n');\r
+                                               h = h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g, '\n<$1$2>');\r
+                                               h = h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g, '</$1>\n');\r
+                                               h = h.replace(/\n\n/g, '\n');\r
+                                       }\r
+                               }\r
+\r
+                               h = t._unprotect(h, p);\r
+\r
+                               // Restore CDATA sections\r
+                               h = h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g, '<![CDATA[$1]]>');\r
+\r
+                               // Restore the \u00a0 character if raw mode is enabled\r
+                               if (s.entity_encoding == 'raw')\r
+                                       h = h.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g, '<p$1>\u00a0</p>');\r
+\r
+                               // Restore noscript elements\r
+                               h = h.replace(/<noscript([^>]+|)>([\s\S]*?)<\/noscript>/g, function(v, attribs, text) {\r
+                                       return '<noscript' + attribs + '>' + t.dom.decode(text.replace(/<!--|-->/g, '')) + '</noscript>';\r
+                               });\r
+                       }\r
+\r
+                       o.content = h;\r
+               },\r
+\r
+               _serializeNode : function(n, inner) {\r
+                       var t = this, s = t.settings, w = t.writer, hc, el, cn, i, l, a, at, no, v, nn, ru, ar, iv, closed, keep, type, scopeName;\r
+\r
+                       if (!s.node_filter || s.node_filter(n)) {\r
+                               switch (n.nodeType) {\r
+                                       case 1: // Element\r
+                                               if (n.hasAttribute ? n.hasAttribute('_mce_bogus') : n.getAttribute('_mce_bogus'))\r
+                                                       return;\r
+\r
+                                               iv = keep = false;\r
+                                               hc = n.hasChildNodes();\r
+                                               nn = n.getAttribute('_mce_name') || n.nodeName.toLowerCase();\r
+\r
+                                               // Get internal type\r
+                                               type = n.getAttribute('_mce_type');\r
+                                               if (type) {\r
+                                                       if (!t._info.cleanup) {\r
+                                                               iv = true;\r
+                                                               return;\r
+                                                       } else\r
+                                                               keep = 1;\r
+                                               }\r
+\r
+                                               // Add correct prefix on IE\r
+                                               if (isIE) {\r
+                                                       scopeName = n.scopeName;\r
+                                                       if (scopeName && scopeName !== 'HTML' && scopeName !== 'html')\r
+                                                               nn = scopeName + ':' + nn;\r
+                                               }\r
+\r
+                                               // Remove mce prefix on IE needed for the abbr element\r
+                                               if (nn.indexOf('mce:') === 0)\r
+                                                       nn = nn.substring(4);\r
+\r
+                                               // Check if valid\r
+                                               if (!keep) {\r
+                                                       if (!t.validElementsRE || !t.validElementsRE.test(nn) || (t.invalidElementsRE && t.invalidElementsRE.test(nn)) || inner) {\r
+                                                               iv = true;\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+\r
+                                               if (isIE) {\r
+                                                       // Fix IE content duplication (DOM can have multiple copies of the same node)\r
+                                                       if (s.fix_content_duplication) {\r
+                                                               if (n._mce_serialized == t.key)\r
+                                                                       return;\r
+\r
+                                                               n._mce_serialized = t.key;\r
+                                                       }\r
+\r
+                                                       // IE sometimes adds a / infront of the node name\r
+                                                       if (nn.charAt(0) == '/')\r
+                                                               nn = nn.substring(1);\r
+                                               } else if (isGecko) {\r
+                                                       // Ignore br elements\r
+                                                       if (n.nodeName === 'BR' && n.getAttribute('type') == '_moz')\r
+                                                               return;\r
+                                               }\r
+\r
+                                               // Check if valid child\r
+                                               if (s.validate_children) {\r
+                                                       if (t.elementName && !t.schema.isValid(t.elementName, nn)) {\r
+                                                               iv = true;\r
+                                                               break;\r
+                                                       }\r
+\r
+                                                       t.elementName = nn;\r
+                                               }\r
+\r
+                                               ru = t.findRule(nn);\r
+                                               \r
+                                               // No valid rule for this element could be found then skip it\r
+                                               if (!ru) {\r
+                                                       iv = true;\r
+                                                       break;\r
+                                               }\r
+\r
+                                               nn = ru.name || nn;\r
+                                               closed = s.closed.test(nn);\r
+\r
+                                               // Skip empty nodes or empty node name in IE\r
+                                               if ((!hc && ru.noEmpty) || (isIE && !nn)) {\r
+                                                       iv = true;\r
+                                                       break;\r
+                                               }\r
+\r
+                                               // Check required\r
+                                               if (ru.requiredAttribs) {\r
+                                                       a = ru.requiredAttribs;\r
+\r
+                                                       for (i = a.length - 1; i >= 0; i--) {\r
+                                                               if (this.dom.getAttrib(n, a[i]) !== '')\r
+                                                                       break;\r
+                                                       }\r
+\r
+                                                       // None of the required was there\r
+                                                       if (i == -1) {\r
+                                                               iv = true;\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+\r
+                                               w.writeStartElement(nn);\r
+\r
+                                               // Add ordered attributes\r
+                                               if (ru.attribs) {\r
+                                                       for (i=0, at = ru.attribs, l = at.length; i<l; i++) {\r
+                                                               a = at[i];\r
+                                                               v = t._getAttrib(n, a);\r
+\r
+                                                               if (v !== null)\r
+                                                                       w.writeAttribute(a.name, v);\r
+                                                       }\r
+                                               }\r
+\r
+                                               // Add wild attributes\r
+                                               if (ru.validAttribsRE) {\r
+                                                       at = t.dom.getAttribs(n);\r
+                                                       for (i=at.length-1; i>-1; i--) {\r
+                                                               no = at[i];\r
+\r
+                                                               if (no.specified) {\r
+                                                                       a = no.nodeName.toLowerCase();\r
+\r
+                                                                       if (s.invalid_attrs.test(a) || !ru.validAttribsRE.test(a))\r
+                                                                               continue;\r
+\r
+                                                                       ar = t.findAttribRule(ru, a);\r
+                                                                       v = t._getAttrib(n, ar, a);\r
+\r
+                                                                       if (v !== null)\r
+                                                                               w.writeAttribute(a, v);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               // Keep type attribute\r
+                                               if (type && keep)\r
+                                                       w.writeAttribute('_mce_type', type);\r
+\r
+                                               // Write text from script\r
+                                               if (nn === 'script' && tinymce.trim(n.innerHTML)) {\r
+                                                       w.writeText('// '); // Padd it with a comment so it will parse on older browsers\r
+                                                       w.writeCDATA(n.innerHTML.replace(/<!--|-->|<\[CDATA\[|\]\]>/g, '')); // Remove comments and cdata stuctures\r
+                                                       hc = false;\r
+                                                       break;\r
+                                               }\r
+\r
+                                               // Padd empty nodes with a &nbsp;\r
+                                               if (ru.padd) {\r
+                                                       // If it has only one bogus child, padd it anyway workaround for <td><br /></td> bug\r
+                                                       if (hc && (cn = n.firstChild) && cn.nodeType === 1 && n.childNodes.length === 1) {\r
+                                                               if (cn.hasAttribute ? cn.hasAttribute('_mce_bogus') : cn.getAttribute('_mce_bogus'))\r
+                                                                       w.writeText('\u00a0');\r
+                                                       } else if (!hc)\r
+                                                               w.writeText('\u00a0'); // No children then padd it\r
+                                               }\r
+\r
+                                               break;\r
+\r
+                                       case 3: // Text\r
+                                               // Check if valid child\r
+                                               if (s.validate_children && t.elementName && !t.schema.isValid(t.elementName, '#text'))\r
+                                                       return;\r
+\r
+                                               return w.writeText(n.nodeValue);\r
+\r
+                                       case 4: // CDATA\r
+                                               return w.writeCDATA(n.nodeValue);\r
+\r
+                                       case 8: // Comment\r
+                                               return w.writeComment(n.nodeValue);\r
+                               }\r
+                       } else if (n.nodeType == 1)\r
+                               hc = n.hasChildNodes();\r
+\r
+                       if (hc && !closed) {\r
+                               cn = n.firstChild;\r
+\r
+                               while (cn) {\r
+                                       t._serializeNode(cn);\r
+                                       t.elementName = nn;\r
+                                       cn = cn.nextSibling;\r
+                               }\r
+                       }\r
+\r
+                       // Write element end\r
+                       if (!iv) {\r
+                               if (!closed)\r
+                                       w.writeFullEndElement();\r
+                               else\r
+                                       w.writeEndElement();\r
+                       }\r
+               },\r
+\r
+               _protect : function(o) {\r
+                       var t = this;\r
+\r
+                       o.items = o.items || [];\r
+\r
+                       function enc(s) {\r
+                               return s.replace(/[\r\n\\]/g, function(c) {\r
+                                       if (c === '\n')\r
+                                               return '\\n';\r
+                                       else if (c === '\\')\r
+                                               return '\\\\';\r
+\r
+                                       return '\\r';\r
+                               });\r
+                       };\r
+\r
+                       function dec(s) {\r
+                               return s.replace(/\\[\\rn]/g, function(c) {\r
+                                       if (c === '\\n')\r
+                                               return '\n';\r
+                                       else if (c === '\\\\')\r
+                                               return '\\';\r
+\r
+                                       return '\r';\r
+                               });\r
+                       };\r
+\r
+                       each(o.patterns, function(p) {\r
+                               o.content = dec(enc(o.content).replace(p.pattern, function(x, a, b, c) {\r
+                                       b = dec(b);\r
+\r
+                                       if (p.encode)\r
+                                               b = t._encode(b);\r
+\r
+                                       o.items.push(b);\r
+                                       return a + '<!--mce:' + (o.items.length - 1) + '-->' + c;\r
+                               }));\r
+                       });\r
+\r
+                       return o;\r
+               },\r
+\r
+               _unprotect : function(h, o) {\r
+                       h = h.replace(/\<!--mce:([0-9]+)--\>/g, function(a, b) {\r
+                               return o.items[parseInt(b)];\r
+                       });\r
+\r
+                       o.items = [];\r
+\r
+                       return h;\r
+               },\r
+\r
+               _encode : function(h) {\r
+                       var t = this, s = t.settings, l;\r
+\r
+                       // Entity encode\r
+                       if (s.entity_encoding !== 'raw') {\r
+                               if (s.entity_encoding.indexOf('named') != -1) {\r
+                                       t.setEntities(s.entities);\r
+                                       l = t.entityLookup;\r
+\r
+                                       h = h.replace(/[\u007E-\uFFFF]/g, function(a) {\r
+                                               var v;\r
+\r
+                                               if (v = l[a])\r
+                                                       a = '&' + v + ';';\r
+\r
+                                               return a;\r
+                                       });\r
+                               }\r
+\r
+                               if (s.entity_encoding.indexOf('numeric') != -1) {\r
+                                       h = h.replace(/[\u007E-\uFFFF]/g, function(a) {\r
+                                               return '&#' + a.charCodeAt(0) + ';';\r
+                                       });\r
+                               }\r
+                       }\r
+\r
+                       return h;\r
+               },\r
+\r
+               _setup : function() {\r
+                       var t = this, s = this.settings;\r
+\r
+                       if (t.done)\r
+                               return;\r
+\r
+                       t.done = 1;\r
+\r
+                       t.setRules(s.valid_elements);\r
+                       t.addRules(s.extended_valid_elements);\r
+\r
+                       if (s.invalid_elements)\r
+                               t.invalidElementsRE = new RegExp('^(' + wildcardToRE(s.invalid_elements.replace(/,/g, '|').toLowerCase()) + ')$');\r
+\r
+                       if (s.attrib_value_filter)\r
+                               t.attribValueFilter = s.attribValueFilter;\r
+               },\r
+\r
+               _getAttrib : function(n, a, na) {\r
+                       var i, v;\r
+\r
+                       na = na || a.name;\r
+\r
+                       if (a.forcedVal && (v = a.forcedVal)) {\r
+                               if (v === '{$uid}')\r
+                                       return this.dom.uniqueId();\r
+\r
+                               return v;\r
+                       }\r
+\r
+                       v = this.dom.getAttrib(n, na);\r
+\r
+                       switch (na) {\r
+                               case 'rowspan':\r
+                               case 'colspan':\r
+                                       // Whats the point? Remove usless attribute value\r
+                                       if (v == '1')\r
+                                               v = '';\r
+\r
+                                       break;\r
+                       }\r
+\r
+                       if (this.attribValueFilter)\r
+                               v = this.attribValueFilter(na, v, n);\r
+\r
+                       if (a.validVals) {\r
+                               for (i = a.validVals.length - 1; i >= 0; i--) {\r
+                                       if (v == a.validVals[i])\r
+                                               break;\r
+                               }\r
+\r
+                               if (i == -1)\r
+                                       return null;\r
+                       }\r
+\r
+                       if (v === '' && typeof(a.defaultVal) != 'undefined') {\r
+                               v = a.defaultVal;\r
+\r
+                               if (v === '{$uid}')\r
+                                       return this.dom.uniqueId();\r
+\r
+                               return v;\r
+                       } else {\r
+                               // Remove internal mceItemXX classes when content is extracted from editor\r
+                               if (na == 'class' && this.processObj.get)\r
+                                       v = v.replace(/\s?mceItem\w+\s?/g, '');\r
+                       }\r
+\r
+                       if (v === '')\r
+                               return null;\r
+\r
+\r
+                       return v;\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       tinymce.dom.ScriptLoader = function(settings) {\r
+               var QUEUED = 0,\r
+                       LOADING = 1,\r
+                       LOADED = 2,\r
+                       states = {},\r
+                       queue = [],\r
+                       scriptLoadedCallbacks = {},\r
+                       queueLoadedCallbacks = [],\r
+                       loading = 0,\r
+                       undefined;\r
+\r
+               function loadScript(url, callback) {\r
+                       var t = this, dom = tinymce.DOM, elm, uri, loc, id;\r
+\r
+                       // Execute callback when script is loaded\r
+                       function done() {\r
+                               dom.remove(id);\r
+\r
+                               if (elm)\r
+                                       elm.onreadystatechange = elm.onload = elm = null;\r
+\r
+                               callback();\r
+                       };\r
+\r
+                       id = dom.uniqueId();\r
+\r
+                       if (tinymce.isIE6) {\r
+                               uri = new tinymce.util.URI(url);\r
+                               loc = location;\r
+\r
+                               // If script is from same domain and we\r
+                               // use IE 6 then use XHR since it's more reliable\r
+                               if (uri.host == loc.hostname && uri.port == loc.port && (uri.protocol + ':') == loc.protocol) {\r
+                                       tinymce.util.XHR.send({\r
+                                               url : tinymce._addVer(uri.getURI()),\r
+                                               success : function(content) {\r
+                                                       // Create new temp script element\r
+                                                       var script = dom.create('script', {\r
+                                                               type : 'text/javascript'\r
+                                                       });\r
+\r
+                                                       // Evaluate script in global scope\r
+                                                       script.text = content;\r
+                                                       document.getElementsByTagName('head')[0].appendChild(script);\r
+                                                       dom.remove(script);\r
+\r
+                                                       done();\r
+                                               }\r
+                                       });\r
+\r
+                                       return;\r
+                               }\r
+                       }\r
+\r
+                       // Create new script element\r
+                       elm = dom.create('script', {\r
+                               id : id,\r
+                               type : 'text/javascript',\r
+                               src : tinymce._addVer(url)\r
+                       });\r
+\r
+                       // Add onload and readystate listeners\r
+                       elm.onload = done;\r
+                       elm.onreadystatechange = function() {\r
+                               var state = elm.readyState;\r
+\r
+                               // Loaded state is passed on IE 6 however there\r
+                               // are known issues with this method but we can't use\r
+                               // XHR in a cross domain loading\r
+                               if (state == 'complete' || state == 'loaded')\r
+                                       done();\r
+                       };\r
+\r
+                       // Most browsers support this feature so we report errors\r
+                       // for those at least to help users track their missing plugins etc\r
+                       // todo: Removed since it produced error if the document is unloaded by navigating away, re-add it as an option\r
+                       /*elm.onerror = function() {\r
+                               alert('Failed to load: ' + url);\r
+                       };*/\r
+\r
+                       // Add script to document\r
+                       (document.getElementsByTagName('head')[0] || document.body).appendChild(elm);\r
+               };\r
+\r
+               this.isDone = function(url) {\r
+                       return states[url] == LOADED;\r
+               };\r
+\r
+               this.markDone = function(url) {\r
+                       states[url] = LOADED;\r
+               };\r
+\r
+               this.add = this.load = function(url, callback, scope) {\r
+                       var item, state = states[url];\r
+\r
+                       // Add url to load queue\r
+                       if (state == undefined) {\r
+                               queue.push(url);\r
+                               states[url] = QUEUED;\r
+                       }\r
+\r
+                       if (callback) {\r
+                               // Store away callback for later execution\r
+                               if (!scriptLoadedCallbacks[url])\r
+                                       scriptLoadedCallbacks[url] = [];\r
+\r
+                               scriptLoadedCallbacks[url].push({\r
+                                       func : callback,\r
+                                       scope : scope || this\r
+                               });\r
+                       }\r
+               };\r
+\r
+               this.loadQueue = function(callback, scope) {\r
+                       this.loadScripts(queue, callback, scope);\r
+               };\r
+\r
+               this.loadScripts = function(scripts, callback, scope) {\r
+                       var loadScripts;\r
+\r
+                       function execScriptLoadedCallbacks(url) {\r
+                               // Execute URL callback functions\r
+                               tinymce.each(scriptLoadedCallbacks[url], function(callback) {\r
+                                       callback.func.call(callback.scope);\r
+                               });\r
+\r
+                               scriptLoadedCallbacks[url] = undefined;\r
+                       };\r
+\r
+                       queueLoadedCallbacks.push({\r
+                               func : callback,\r
+                               scope : scope || this\r
+                       });\r
+\r
+                       loadScripts = function() {\r
+                               var loadingScripts = tinymce.grep(scripts);\r
+\r
+                               // Current scripts has been handled\r
+                               scripts.length = 0;\r
+\r
+                               // Load scripts that needs to be loaded\r
+                               tinymce.each(loadingScripts, function(url) {\r
+                                       // Script is already loaded then execute script callbacks directly\r
+                                       if (states[url] == LOADED) {\r
+                                               execScriptLoadedCallbacks(url);\r
+                                               return;\r
+                                       }\r
+\r
+                                       // Is script not loading then start loading it\r
+                                       if (states[url] != LOADING) {\r
+                                               states[url] = LOADING;\r
+                                               loading++;\r
+\r
+                                               loadScript(url, function() {\r
+                                                       states[url] = LOADED;\r
+                                                       loading--;\r
+\r
+                                                       execScriptLoadedCallbacks(url);\r
+\r
+                                                       // Load more scripts if they where added by the recently loaded script\r
+                                                       loadScripts();\r
+                                               });\r
+                                       }\r
+                               });\r
+\r
+                               // No scripts are currently loading then execute all pending queue loaded callbacks\r
+                               if (!loading) {\r
+                                       tinymce.each(queueLoadedCallbacks, function(callback) {\r
+                                               callback.func.call(callback.scope);\r
+                                       });\r
+\r
+                                       queueLoadedCallbacks.length = 0;\r
+                               }\r
+                       };\r
+\r
+                       loadScripts();\r
+               };\r
+       };\r
+\r
+       // Global script loader\r
+       tinymce.ScriptLoader = new tinymce.dom.ScriptLoader();\r
+})(tinymce);\r
+\r
+tinymce.dom.TreeWalker = function(start_node, root_node) {\r
+       var node = start_node;\r
+\r
+       function findSibling(node, start_name, sibling_name, shallow) {\r
+               var sibling, parent;\r
+\r
+               if (node) {\r
+                       // Walk into nodes if it has a start\r
+                       if (!shallow && node[start_name])\r
+                               return node[start_name];\r
+\r
+                       // Return the sibling if it has one\r
+                       if (node != root_node) {\r
+                               sibling = node[sibling_name];\r
+                               if (sibling)\r
+                                       return sibling;\r
+\r
+                               // Walk up the parents to look for siblings\r
+                               for (parent = node.parentNode; parent && parent != root_node; parent = parent.parentNode) {\r
+                                       sibling = parent[sibling_name];\r
+                                       if (sibling)\r
+                                               return sibling;\r
+                               }\r
+                       }\r
+               }\r
+       };\r
+\r
+       this.current = function() {\r
+               return node;\r
+       };\r
+\r
+       this.next = function(shallow) {\r
+               return (node = findSibling(node, 'firstChild', 'nextSibling', shallow));\r
+       };\r
+\r
+       this.prev = function(shallow) {\r
+               return (node = findSibling(node, 'lastChild', 'lastSibling', shallow));\r
+       };\r
+};\r
+\r
+(function() {\r
+       var transitional = {};\r
+\r
+       function unpack(lookup, data) {\r
+               var key;\r
+\r
+               function replace(value) {\r
+                       return value.replace(/[A-Z]+/g, function(key) {\r
+                               return replace(lookup[key]);\r
+                       });\r
+               };\r
+\r
+               // Unpack lookup\r
+               for (key in lookup) {\r
+                       if (lookup.hasOwnProperty(key))\r
+                               lookup[key] = replace(lookup[key]);\r
+               }\r
+\r
+               // Unpack and parse data into object map\r
+               replace(data).replace(/#/g, '#text').replace(/(\w+)\[([^\]]+)\]/g, function(str, name, children) {\r
+                       var i, map = {};\r
+\r
+                       children = children.split(/\|/);\r
+\r
+                       for (i = children.length - 1; i >= 0; i--)\r
+                               map[children[i]] = 1;\r
+\r
+                       transitional[name] = map;\r
+               });\r
+       };\r
+\r
+       // This is the XHTML 1.0 transitional elements with it's children packed to reduce it's size\r
+       // we will later include the attributes here and use it as a default for valid elements but it\r
+       // requires us to rewrite the serializer engine\r
+       unpack({\r
+               Z : '#|H|K|N|O|P',\r
+               Y : '#|X|form|R|Q',\r
+               X : 'p|T|div|U|W|isindex|fieldset|table',\r
+               W : 'pre|hr|blockquote|address|center|noframes',\r
+               U : 'ul|ol|dl|menu|dir',\r
+               ZC : '#|p|Y|div|U|W|table|br|span|bdo|object|applet|img|map|K|N|Q',\r
+               T : 'h1|h2|h3|h4|h5|h6',\r
+               ZB : '#|X|S|Q',\r
+               S : 'R|P',\r
+               ZA : '#|a|G|J|M|O|P',\r
+               R : '#|a|H|K|N|O',\r
+               Q : 'noscript|P',\r
+               P : 'ins|del|script',\r
+               O : 'input|select|textarea|label|button',\r
+               N : 'M|L',\r
+               M : 'em|strong|dfn|code|q|samp|kbd|var|cite|abbr|acronym',\r
+               L : 'sub|sup',\r
+               K : 'J|I',\r
+               J : 'tt|i|b|u|s|strike',\r
+               I : 'big|small|font|basefont',\r
+               H : 'G|F',\r
+               G : 'br|span|bdo',\r
+               F : 'object|applet|img|map|iframe'\r
+       }, 'script[]' + \r
+               'style[]' + \r
+               'object[#|param|X|form|a|H|K|N|O|Q]' + \r
+               'param[]' + \r
+               'p[S]' + \r
+               'a[Z]' + \r
+               'br[]' + \r
+               'span[S]' + \r
+               'bdo[S]' + \r
+               'applet[#|param|X|form|a|H|K|N|O|Q]' + \r
+               'h1[S]' + \r
+               'img[]' + \r
+               'map[X|form|Q|area]' + \r
+               'h2[S]' + \r
+               'iframe[#|X|form|a|H|K|N|O|Q]' + \r
+               'h3[S]' + \r
+               'tt[S]' + \r
+               'i[S]' + \r
+               'b[S]' + \r
+               'u[S]' + \r
+               's[S]' + \r
+               'strike[S]' + \r
+               'big[S]' + \r
+               'small[S]' + \r
+               'font[S]' + \r
+               'basefont[]' + \r
+               'em[S]' + \r
+               'strong[S]' + \r
+               'dfn[S]' + \r
+               'code[S]' + \r
+               'q[S]' + \r
+               'samp[S]' + \r
+               'kbd[S]' + \r
+               'var[S]' + \r
+               'cite[S]' + \r
+               'abbr[S]' + \r
+               'acronym[S]' + \r
+               'sub[S]' + \r
+               'sup[S]' + \r
+               'input[]' + \r
+               'select[optgroup|option]' + \r
+               'optgroup[option]' + \r
+               'option[]' + \r
+               'textarea[]' + \r
+               'label[S]' + \r
+               'button[#|p|T|div|U|W|table|G|object|applet|img|map|K|N|Q]' + \r
+               'h4[S]' + \r
+               'ins[#|X|form|a|H|K|N|O|Q]' + \r
+               'h5[S]' + \r
+               'del[#|X|form|a|H|K|N|O|Q]' + \r
+               'h6[S]' + \r
+               'div[#|X|form|a|H|K|N|O|Q]' + \r
+               'ul[li]' + \r
+               'li[#|X|form|a|H|K|N|O|Q]' + \r
+               'ol[li]' + \r
+               'dl[dt|dd]' + \r
+               'dt[S]' + \r
+               'dd[#|X|form|a|H|K|N|O|Q]' + \r
+               'menu[li]' + \r
+               'dir[li]' + \r
+               'pre[ZA]' + \r
+               'hr[]' + \r
+               'blockquote[#|X|form|a|H|K|N|O|Q]' + \r
+               'address[S|p]' + \r
+               'center[#|X|form|a|H|K|N|O|Q]' + \r
+               'noframes[#|X|form|a|H|K|N|O|Q]' + \r
+               'isindex[]' + \r
+               'fieldset[#|legend|X|form|a|H|K|N|O|Q]' + \r
+               'legend[S]' + \r
+               'table[caption|col|colgroup|thead|tfoot|tbody|tr]' + \r
+               'caption[S]' + \r
+               'col[]' + \r
+               'colgroup[col]' + \r
+               'thead[tr]' + \r
+               'tr[th|td]' + \r
+               'th[#|X|form|a|H|K|N|O|Q]' + \r
+               'form[#|X|a|H|K|N|O|Q]' + \r
+               'noscript[#|X|form|a|H|K|N|O|Q]' + \r
+               'td[#|X|form|a|H|K|N|O|Q]' + \r
+               'tfoot[tr]' + \r
+               'tbody[tr]' + \r
+               'area[]' + \r
+               'base[]' + \r
+               'body[#|X|form|a|H|K|N|O|Q]'\r
+       );\r
+\r
+       tinymce.dom.Schema = function() {\r
+               var t = this, elements = transitional;\r
+\r
+               t.isValid = function(name, child_name) {\r
+                       var element = elements[name];\r
+\r
+                       return !!(element && (!child_name || element[child_name]));\r
+               };\r
+       };\r
+})();\r
+(function(tinymce) {\r
+       tinymce.dom.RangeUtils = function(dom) {\r
+               var INVISIBLE_CHAR = '\uFEFF';\r
+\r
+               this.walk = function(rng, callback) {\r
+                       var startContainer = rng.startContainer,\r
+                               startOffset = rng.startOffset,\r
+                               endContainer = rng.endContainer,\r
+                               endOffset = rng.endOffset,\r
+                               ancestor, startPoint,\r
+                               endPoint, node, parent, siblings, nodes;\r
+\r
+                       // Handle table cell selection the table plugin enables\r
+                       // you to fake select table cells and perform formatting actions on them\r
+                       nodes = dom.select('td.mceSelected,th.mceSelected');\r
+                       if (nodes.length > 0) {\r
+                               tinymce.each(nodes, function(node) {\r
+                                       callback([node]);\r
+                               });\r
+\r
+                               return;\r
+                       }\r
+\r
+                       function collectSiblings(node, name, end_node) {\r
+                               var siblings = [];\r
+\r
+                               for (; node && node != end_node; node = node[name])\r
+                                       siblings.push(node);\r
+\r
+                               return siblings;\r
+                       };\r
+\r
+                       function findEndPoint(node, root) {\r
+                               do {\r
+                                       if (node.parentNode == root)\r
+                                               return node;\r
+\r
+                                       node = node.parentNode;\r
+                               } while(node);\r
+                       };\r
+\r
+                       function walkBoundary(start_node, end_node, next) {\r
+                               var siblingName = next ? 'nextSibling' : 'previousSibling';\r
+\r
+                               for (node = start_node, parent = node.parentNode; node && node != end_node; node = parent) {\r
+                                       parent = node.parentNode;\r
+                                       siblings = collectSiblings(node == start_node ? node : node[siblingName], siblingName);\r
+\r
+                                       if (siblings.length) {\r
+                                               if (!next)\r
+                                                       siblings.reverse();\r
+\r
+                                               callback(siblings);\r
+                                       }\r
+                               }\r
+                       };\r
+\r
+                       // If index based start position then resolve it\r
+                       if (startContainer.nodeType == 1 && startContainer.hasChildNodes())\r
+                               startContainer = startContainer.childNodes[startOffset];\r
+\r
+                       // If index based end position then resolve it\r
+                       if (endContainer.nodeType == 1 && endContainer.hasChildNodes())\r
+                               endContainer = endContainer.childNodes[Math.min(startOffset == endOffset ? endOffset : endOffset - 1, endContainer.childNodes.length - 1)];\r
+\r
+                       // Find common ancestor and end points\r
+                       ancestor = dom.findCommonAncestor(startContainer, endContainer);\r
+\r
+                       // Same container\r
+                       if (startContainer == endContainer)\r
+                               return callback([startContainer]);\r
+\r
+                       // Process left side\r
+                       for (node = startContainer; node; node = node.parentNode) {\r
+                               if (node == endContainer)\r
+                                       return walkBoundary(startContainer, ancestor, true);\r
+\r
+                               if (node == ancestor)\r
+                                       break;\r
+                       }\r
+\r
+                       // Process right side\r
+                       for (node = endContainer; node; node = node.parentNode) {\r
+                               if (node == startContainer)\r
+                                       return walkBoundary(endContainer, ancestor);\r
+\r
+                               if (node == ancestor)\r
+                                       break;\r
+                       }\r
+\r
+                       // Find start/end point\r
+                       startPoint = findEndPoint(startContainer, ancestor) || startContainer;\r
+                       endPoint = findEndPoint(endContainer, ancestor) || endContainer;\r
+\r
+                       // Walk left leaf\r
+                       walkBoundary(startContainer, startPoint, true);\r
+\r
+                       // Walk the middle from start to end point\r
+                       siblings = collectSiblings(\r
+                               startPoint == startContainer ? startPoint : startPoint.nextSibling,\r
+                               'nextSibling',\r
+                               endPoint == endContainer ? endPoint.nextSibling : endPoint\r
+                       );\r
+\r
+                       if (siblings.length)\r
+                               callback(siblings);\r
+\r
+                       // Walk right leaf\r
+                       walkBoundary(endContainer, endPoint);\r
+               };\r
+\r
+               /*              this.split = function(rng) {\r
+                       var startContainer = rng.startContainer,\r
+                               startOffset = rng.startOffset,\r
+                               endContainer = rng.endContainer,\r
+                               endOffset = rng.endOffset;\r
+\r
+                       function splitText(node, offset) {\r
+                               if (offset == node.nodeValue.length)\r
+                                       node.appendData(INVISIBLE_CHAR);\r
+\r
+                               node = node.splitText(offset);\r
+\r
+                               if (node.nodeValue === INVISIBLE_CHAR)\r
+                                       node.nodeValue = '';\r
+\r
+                               return node;\r
+                       };\r
+\r
+                       // Handle single text node\r
+                       if (startContainer == endContainer) {\r
+                               if (startContainer.nodeType == 3) {\r
+                                       if (startOffset != 0)\r
+                                               startContainer = endContainer = splitText(startContainer, startOffset);\r
+\r
+                                       if (endOffset - startOffset != startContainer.nodeValue.length)\r
+                                               splitText(startContainer, endOffset - startOffset);\r
+                               }\r
+                       } else {\r
+                               // Split startContainer text node if needed\r
+                               if (startContainer.nodeType == 3 && startOffset != 0) {\r
+                                       startContainer = splitText(startContainer, startOffset);\r
+                                       startOffset = 0;\r
+                               }\r
+\r
+                               // Split endContainer text node if needed\r
+                               if (endContainer.nodeType == 3 && endOffset != endContainer.nodeValue.length) {\r
+                                       endContainer = splitText(endContainer, endOffset).previousSibling;\r
+                                       endOffset = endContainer.nodeValue.length;\r
+                               }\r
+                       }\r
+\r
+                       return {\r
+                               startContainer : startContainer,\r
+                               startOffset : startOffset,\r
+                               endContainer : endContainer,\r
+                               endOffset : endOffset\r
+                       };\r
+               };\r
+*/\r
+       };\r
+\r
+       tinymce.dom.RangeUtils.compareRanges = function(rng1, rng2) {\r
+               if (rng1 && rng2) {\r
+                       // Compare native IE ranges\r
+                       if (rng1.item || rng1.duplicate) {\r
+                               // Both are control ranges and the selected element matches\r
+                               if (rng1.item && rng2.item && rng1.item(0) === rng2.item(0))\r
+                                       return true;\r
+\r
+                               // Both are text ranges and the range matches\r
+                               if (rng1.isEqual && rng2.isEqual && rng2.isEqual(rng1))\r
+                                       return true;\r
+                       } else {\r
+                               // Compare w3c ranges\r
+                               return rng1.startContainer == rng2.startContainer && rng1.startOffset == rng2.startOffset;\r
+                       }\r
+               }\r
+\r
+               return false;\r
+       };\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       // Shorten class names\r
+       var DOM = tinymce.DOM, is = tinymce.is;\r
+\r
+       tinymce.create('tinymce.ui.Control', {\r
+               Control : function(id, s) {\r
+                       this.id = id;\r
+                       this.settings = s = s || {};\r
+                       this.rendered = false;\r
+                       this.onRender = new tinymce.util.Dispatcher(this);\r
+                       this.classPrefix = '';\r
+                       this.scope = s.scope || this;\r
+                       this.disabled = 0;\r
+                       this.active = 0;\r
+               },\r
+\r
+               setDisabled : function(s) {\r
+                       var e;\r
+\r
+                       if (s != this.disabled) {\r
+                               e = DOM.get(this.id);\r
+\r
+                               // Add accessibility title for unavailable actions\r
+                               if (e && this.settings.unavailable_prefix) {\r
+                                       if (s) {\r
+                                               this.prevTitle = e.title;\r
+                                               e.title = this.settings.unavailable_prefix + ": " + e.title;\r
+                                       } else\r
+                                               e.title = this.prevTitle;\r
+                               }\r
+\r
+                               this.setState('Disabled', s);\r
+                               this.setState('Enabled', !s);\r
+                               this.disabled = s;\r
+                       }\r
+               },\r
+\r
+               isDisabled : function() {\r
+                       return this.disabled;\r
+               },\r
+\r
+               setActive : function(s) {\r
+                       if (s != this.active) {\r
+                               this.setState('Active', s);\r
+                               this.active = s;\r
+                       }\r
+               },\r
+\r
+               isActive : function() {\r
+                       return this.active;\r
+               },\r
+\r
+               setState : function(c, s) {\r
+                       var n = DOM.get(this.id);\r
+\r
+                       c = this.classPrefix + c;\r
+\r
+                       if (s)\r
+                               DOM.addClass(n, c);\r
+                       else\r
+                               DOM.removeClass(n, c);\r
+               },\r
+\r
+               isRendered : function() {\r
+                       return this.rendered;\r
+               },\r
+\r
+               renderHTML : function() {\r
+               },\r
+\r
+               renderTo : function(n) {\r
+                       DOM.setHTML(n, this.renderHTML());\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, b;\r
+\r
+                       // Set pending states\r
+                       if (is(t.disabled)) {\r
+                               b = t.disabled;\r
+                               t.disabled = -1;\r
+                               t.setDisabled(b);\r
+                       }\r
+\r
+                       if (is(t.active)) {\r
+                               b = t.active;\r
+                               t.active = -1;\r
+                               t.setActive(b);\r
+                       }\r
+               },\r
+\r
+               remove : function() {\r
+                       DOM.remove(this.id);\r
+                       this.destroy();\r
+               },\r
+\r
+               destroy : function() {\r
+                       tinymce.dom.Event.clear(this.id);\r
+               }\r
+       });\r
+})(tinymce);\r
+tinymce.create('tinymce.ui.Container:tinymce.ui.Control', {\r
+       Container : function(id, s) {\r
+               this.parent(id, s);\r
+\r
+               this.controls = [];\r
+\r
+               this.lookup = {};\r
+       },\r
+\r
+       add : function(c) {\r
+               this.lookup[c.id] = c;\r
+               this.controls.push(c);\r
+\r
+               return c;\r
+       },\r
+\r
+       get : function(n) {\r
+               return this.lookup[n];\r
+       }\r
+});\r
+\r
+\r
+tinymce.create('tinymce.ui.Separator:tinymce.ui.Control', {\r
+       Separator : function(id, s) {\r
+               this.parent(id, s);\r
+               this.classPrefix = 'mceSeparator';\r
+       },\r
+\r
+       renderHTML : function() {\r
+               return tinymce.DOM.createHTML('span', {'class' : this.classPrefix});\r
+       }\r
+});\r
+\r
+(function(tinymce) {\r
+       var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
+\r
+       tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control', {\r
+               MenuItem : function(id, s) {\r
+                       this.parent(id, s);\r
+                       this.classPrefix = 'mceMenuItem';\r
+               },\r
+\r
+               setSelected : function(s) {\r
+                       this.setState('Selected', s);\r
+                       this.selected = s;\r
+               },\r
+\r
+               isSelected : function() {\r
+                       return this.selected;\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this;\r
+                       \r
+                       t.parent();\r
+\r
+                       // Set pending state\r
+                       if (is(t.selected))\r
+                               t.setSelected(t.selected);\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, walk = tinymce.walk;\r
+\r
+       tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem', {\r
+               Menu : function(id, s) {\r
+                       var t = this;\r
+\r
+                       t.parent(id, s);\r
+                       t.items = {};\r
+                       t.collapsed = false;\r
+                       t.menuCount = 0;\r
+                       t.onAddItem = new tinymce.util.Dispatcher(this);\r
+               },\r
+\r
+               expand : function(d) {\r
+                       var t = this;\r
+\r
+                       if (d) {\r
+                               walk(t, function(o) {\r
+                                       if (o.expand)\r
+                                               o.expand();\r
+                               }, 'items', t);\r
+                       }\r
+\r
+                       t.collapsed = false;\r
+               },\r
+\r
+               collapse : function(d) {\r
+                       var t = this;\r
+\r
+                       if (d) {\r
+                               walk(t, function(o) {\r
+                                       if (o.collapse)\r
+                                               o.collapse();\r
+                               }, 'items', t);\r
+                       }\r
+\r
+                       t.collapsed = true;\r
+               },\r
+\r
+               isCollapsed : function() {\r
+                       return this.collapsed;\r
+               },\r
+\r
+               add : function(o) {\r
+                       if (!o.settings)\r
+                               o = new tinymce.ui.MenuItem(o.id || DOM.uniqueId(), o);\r
+\r
+                       this.onAddItem.dispatch(this, o);\r
+\r
+                       return this.items[o.id] = o;\r
+               },\r
+\r
+               addSeparator : function() {\r
+                       return this.add({separator : true});\r
+               },\r
+\r
+               addMenu : function(o) {\r
+                       if (!o.collapse)\r
+                               o = this.createMenu(o);\r
+\r
+                       this.menuCount++;\r
+\r
+                       return this.add(o);\r
+               },\r
+\r
+               hasMenus : function() {\r
+                       return this.menuCount !== 0;\r
+               },\r
+\r
+               remove : function(o) {\r
+                       delete this.items[o.id];\r
+               },\r
+\r
+               removeAll : function() {\r
+                       var t = this;\r
+\r
+                       walk(t, function(o) {\r
+                               if (o.removeAll)\r
+                                       o.removeAll();\r
+                               else\r
+                                       o.remove();\r
+\r
+                               o.destroy();\r
+                       }, 'items', t);\r
+\r
+                       t.items = {};\r
+               },\r
+\r
+               createMenu : function(o) {\r
+                       var m = new tinymce.ui.Menu(o.id || DOM.uniqueId(), o);\r
+\r
+                       m.onAddItem.add(this.onAddItem.dispatch, this.onAddItem);\r
+\r
+                       return m;\r
+               }\r
+       });\r
+})(tinymce);\r
+(function(tinymce) {\r
+       var is = tinymce.is, DOM = tinymce.DOM, each = tinymce.each, Event = tinymce.dom.Event, Element = tinymce.dom.Element;\r
+\r
+       tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu', {\r
+               DropMenu : function(id, s) {\r
+                       s = s || {};\r
+                       s.container = s.container || DOM.doc.body;\r
+                       s.offset_x = s.offset_x || 0;\r
+                       s.offset_y = s.offset_y || 0;\r
+                       s.vp_offset_x = s.vp_offset_x || 0;\r
+                       s.vp_offset_y = s.vp_offset_y || 0;\r
+\r
+                       if (is(s.icons) && !s.icons)\r
+                               s['class'] += ' mceNoIcons';\r
+\r
+                       this.parent(id, s);\r
+                       this.onShowMenu = new tinymce.util.Dispatcher(this);\r
+                       this.onHideMenu = new tinymce.util.Dispatcher(this);\r
+                       this.classPrefix = 'mceMenu';\r
+               },\r
+\r
+               createMenu : function(s) {\r
+                       var t = this, cs = t.settings, m;\r
+\r
+                       s.container = s.container || cs.container;\r
+                       s.parent = t;\r
+                       s.constrain = s.constrain || cs.constrain;\r
+                       s['class'] = s['class'] || cs['class'];\r
+                       s.vp_offset_x = s.vp_offset_x || cs.vp_offset_x;\r
+                       s.vp_offset_y = s.vp_offset_y || cs.vp_offset_y;\r
+                       m = new tinymce.ui.DropMenu(s.id || DOM.uniqueId(), s);\r
+\r
+                       m.onAddItem.add(t.onAddItem.dispatch, t.onAddItem);\r
+\r
+                       return m;\r
+               },\r
+\r
+               update : function() {\r
+                       var t = this, s = t.settings, tb = DOM.get('menu_' + t.id + '_tbl'), co = DOM.get('menu_' + t.id + '_co'), tw, th;\r
+\r
+                       tw = s.max_width ? Math.min(tb.clientWidth, s.max_width) : tb.clientWidth;\r
+                       th = s.max_height ? Math.min(tb.clientHeight, s.max_height) : tb.clientHeight;\r
+\r
+                       if (!DOM.boxModel)\r
+                               t.element.setStyles({width : tw + 2, height : th + 2});\r
+                       else\r
+                               t.element.setStyles({width : tw, height : th});\r
+\r
+                       if (s.max_width)\r
+                               DOM.setStyle(co, 'width', tw);\r
+\r
+                       if (s.max_height) {\r
+                               DOM.setStyle(co, 'height', th);\r
+\r
+                               if (tb.clientHeight < s.max_height)\r
+                                       DOM.setStyle(co, 'overflow', 'hidden');\r
+                       }\r
+               },\r
+\r
+               showMenu : function(x, y, px) {\r
+                       var t = this, s = t.settings, co, vp = DOM.getViewPort(), w, h, mx, my, ot = 2, dm, tb, cp = t.classPrefix;\r
+\r
+                       t.collapse(1);\r
+\r
+                       if (t.isMenuVisible)\r
+                               return;\r
+\r
+                       if (!t.rendered) {\r
+                               co = DOM.add(t.settings.container, t.renderNode());\r
+\r
+                               each(t.items, function(o) {\r
+                                       o.postRender();\r
+                               });\r
+\r
+                               t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});\r
+                       } else\r
+                               co = DOM.get('menu_' + t.id);\r
+\r
+                       // Move layer out of sight unless it's Opera since it scrolls to top of page due to an bug\r
+                       if (!tinymce.isOpera)\r
+                               DOM.setStyles(co, {left : -0xFFFF , top : -0xFFFF});\r
+\r
+                       DOM.show(co);\r
+                       t.update();\r
+\r
+                       x += s.offset_x || 0;\r
+                       y += s.offset_y || 0;\r
+                       vp.w -= 4;\r
+                       vp.h -= 4;\r
+\r
+                       // Move inside viewport if not submenu\r
+                       if (s.constrain) {\r
+                               w = co.clientWidth - ot;\r
+                               h = co.clientHeight - ot;\r
+                               mx = vp.x + vp.w;\r
+                               my = vp.y + vp.h;\r
+\r
+                               if ((x + s.vp_offset_x + w) > mx)\r
+                                       x = px ? px - w : Math.max(0, (mx - s.vp_offset_x) - w);\r
+\r
+                               if ((y + s.vp_offset_y + h) > my)\r
+                                       y = Math.max(0, (my - s.vp_offset_y) - h);\r
+                       }\r
+\r
+                       DOM.setStyles(co, {left : x , top : y});\r
+                       t.element.update();\r
+\r
+                       t.isMenuVisible = 1;\r
+                       t.mouseClickFunc = Event.add(co, 'click', function(e) {\r
+                               var m;\r
+\r
+                               e = e.target;\r
+\r
+                               if (e && (e = DOM.getParent(e, 'tr')) && !DOM.hasClass(e, cp + 'ItemSub')) {\r
+                                       m = t.items[e.id];\r
+\r
+                                       if (m.isDisabled())\r
+                                               return;\r
+\r
+                                       dm = t;\r
+\r
+                                       while (dm) {\r
+                                               if (dm.hideMenu)\r
+                                                       dm.hideMenu();\r
+\r
+                                               dm = dm.settings.parent;\r
+                                       }\r
+\r
+                                       if (m.settings.onclick)\r
+                                               m.settings.onclick(e);\r
+\r
+                                       return Event.cancel(e); // Cancel to fix onbeforeunload problem\r
+                               }\r
+                       });\r
+\r
+                       if (t.hasMenus()) {\r
+                               t.mouseOverFunc = Event.add(co, 'mouseover', function(e) {\r
+                                       var m, r, mi;\r
+\r
+                                       e = e.target;\r
+                                       if (e && (e = DOM.getParent(e, 'tr'))) {\r
+                                               m = t.items[e.id];\r
+\r
+                                               if (t.lastMenu)\r
+                                                       t.lastMenu.collapse(1);\r
+\r
+                                               if (m.isDisabled())\r
+                                                       return;\r
+\r
+                                               if (e && DOM.hasClass(e, cp + 'ItemSub')) {\r
+                                                       //p = DOM.getPos(s.container);\r
+                                                       r = DOM.getRect(e);\r
+                                                       m.showMenu((r.x + r.w - ot), r.y - ot, r.x);\r
+                                                       t.lastMenu = m;\r
+                                                       DOM.addClass(DOM.get(m.id).firstChild, cp + 'ItemActive');\r
+                                               }\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       t.onShowMenu.dispatch(t);\r
+\r
+                       if (s.keyboard_focus) {\r
+                               Event.add(co, 'keydown', t._keyHandler, t);\r
+                               DOM.select('a', 'menu_' + t.id)[0].focus(); // Select first link\r
+                               t._focusIdx = 0;\r
+                       }\r
+               },\r
+\r
+               hideMenu : function(c) {\r
+                       var t = this, co = DOM.get('menu_' + t.id), e;\r
+\r
+                       if (!t.isMenuVisible)\r
+                               return;\r
+\r
+                       Event.remove(co, 'mouseover', t.mouseOverFunc);\r
+                       Event.remove(co, 'click', t.mouseClickFunc);\r
+                       Event.remove(co, 'keydown', t._keyHandler);\r
+                       DOM.hide(co);\r
+                       t.isMenuVisible = 0;\r
+\r
+                       if (!c)\r
+                               t.collapse(1);\r
+\r
+                       if (t.element)\r
+                               t.element.hide();\r
+\r
+                       if (e = DOM.get(t.id))\r
+                               DOM.removeClass(e.firstChild, t.classPrefix + 'ItemActive');\r
+\r
+                       t.onHideMenu.dispatch(t);\r
+               },\r
+\r
+               add : function(o) {\r
+                       var t = this, co;\r
+\r
+                       o = t.parent(o);\r
+\r
+                       if (t.isRendered && (co = DOM.get('menu_' + t.id)))\r
+                               t._add(DOM.select('tbody', co)[0], o);\r
+\r
+                       return o;\r
+               },\r
+\r
+               collapse : function(d) {\r
+                       this.parent(d);\r
+                       this.hideMenu(1);\r
+               },\r
+\r
+               remove : function(o) {\r
+                       DOM.remove(o.id);\r
+                       this.destroy();\r
+\r
+                       return this.parent(o);\r
+               },\r
+\r
+               destroy : function() {\r
+                       var t = this, co = DOM.get('menu_' + t.id);\r
+\r
+                       Event.remove(co, 'mouseover', t.mouseOverFunc);\r
+                       Event.remove(co, 'click', t.mouseClickFunc);\r
+\r
+                       if (t.element)\r
+                               t.element.remove();\r
+\r
+                       DOM.remove(co);\r
+               },\r
+\r
+               renderNode : function() {\r
+                       var t = this, s = t.settings, n, tb, co, w;\r
+\r
+                       w = DOM.create('div', {id : 'menu_' + t.id, 'class' : s['class'], 'style' : 'position:absolute;left:0;top:0;z-index:200000'});\r
+                       co = DOM.add(w, 'div', {id : 'menu_' + t.id + '_co', 'class' : t.classPrefix + (s['class'] ? ' ' + s['class'] : '')});\r
+                       t.element = new Element('menu_' + t.id, {blocker : 1, container : s.container});\r
+\r
+                       if (s.menu_line)\r
+                               DOM.add(co, 'span', {'class' : t.classPrefix + 'Line'});\r
+\r
+//                     n = DOM.add(co, 'div', {id : 'menu_' + t.id + '_co', 'class' : 'mceMenuContainer'});\r
+                       n = DOM.add(co, 'table', {id : 'menu_' + t.id + '_tbl', border : 0, cellPadding : 0, cellSpacing : 0});\r
+                       tb = DOM.add(n, 'tbody');\r
+\r
+                       each(t.items, function(o) {\r
+                               t._add(tb, o);\r
+                       });\r
+\r
+                       t.rendered = true;\r
+\r
+                       return w;\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _keyHandler : function(e) {\r
+                       var t = this, kc = e.keyCode;\r
+\r
+                       function focus(d) {\r
+                               var i = t._focusIdx + d, e = DOM.select('a', 'menu_' + t.id)[i];\r
+\r
+                               if (e) {\r
+                                       t._focusIdx = i;\r
+                                       e.focus();\r
+                               }\r
+                       };\r
+\r
+                       switch (kc) {\r
+                               case 38:\r
+                                       focus(-1); // Select first link\r
+                                       return;\r
+\r
+                               case 40:\r
+                                       focus(1);\r
+                                       return;\r
+\r
+                               case 13:\r
+                                       return;\r
+\r
+                               case 27:\r
+                                       return this.hideMenu();\r
+                       }\r
+               },\r
+\r
+               _add : function(tb, o) {\r
+                       var n, s = o.settings, a, ro, it, cp = this.classPrefix, ic;\r
+\r
+                       if (s.separator) {\r
+                               ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'ItemSeparator'});\r
+                               DOM.add(ro, 'td', {'class' : cp + 'ItemSeparator'});\r
+\r
+                               if (n = ro.previousSibling)\r
+                                       DOM.addClass(n, 'mceLast');\r
+\r
+                               return;\r
+                       }\r
+\r
+                       n = ro = DOM.add(tb, 'tr', {id : o.id, 'class' : cp + 'Item ' + cp + 'ItemEnabled'});\r
+                       n = it = DOM.add(n, 'td');\r
+                       n = a = DOM.add(n, 'a', {href : 'javascript:;', onclick : "return false;", onmousedown : 'return false;'});\r
+\r
+                       DOM.addClass(it, s['class']);\r
+//                     n = DOM.add(n, 'span', {'class' : 'item'});\r
+\r
+                       ic = DOM.add(n, 'span', {'class' : 'mceIcon' + (s.icon ? ' mce_' + s.icon : '')});\r
+\r
+                       if (s.icon_src)\r
+                               DOM.add(ic, 'img', {src : s.icon_src});\r
+\r
+                       n = DOM.add(n, s.element || 'span', {'class' : 'mceText', title : o.settings.title}, o.settings.title);\r
+\r
+                       if (o.settings.style)\r
+                               DOM.setAttrib(n, 'style', o.settings.style);\r
+\r
+                       if (tb.childNodes.length == 1)\r
+                               DOM.addClass(ro, 'mceFirst');\r
+\r
+                       if ((n = ro.previousSibling) && DOM.hasClass(n, cp + 'ItemSeparator'))\r
+                               DOM.addClass(ro, 'mceFirst');\r
+\r
+                       if (o.collapse)\r
+                               DOM.addClass(ro, cp + 'ItemSub');\r
+\r
+                       if (n = ro.previousSibling)\r
+                               DOM.removeClass(n, 'mceLast');\r
+\r
+                       DOM.addClass(ro, 'mceLast');\r
+               }\r
+       });\r
+})(tinymce);\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM;\r
+\r
+       tinymce.create('tinymce.ui.Button:tinymce.ui.Control', {\r
+               Button : function(id, s) {\r
+                       this.parent(id, s);\r
+                       this.classPrefix = 'mceButton';\r
+               },\r
+\r
+               renderHTML : function() {\r
+                       var cp = this.classPrefix, s = this.settings, h, l;\r
+\r
+                       l = DOM.encode(s.label || '');\r
+                       h = '<a id="' + this.id + '" href="javascript:;" class="' + cp + ' ' + cp + 'Enabled ' + s['class'] + (l ? ' ' + cp + 'Labeled' : '') +'" onmousedown="return false;" onclick="return false;" title="' + DOM.encode(s.title) + '">';\r
+\r
+                       if (s.image)\r
+                               h += '<img class="mceIcon" src="' + s.image + '" />' + l + '</a>';\r
+                       else\r
+                               h += '<span class="mceIcon ' + s['class'] + '"></span>' + (l ? '<span class="' + cp + 'Label">' + l + '</span>' : '') + '</a>';\r
+\r
+                       return h;\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, s = t.settings;\r
+\r
+                       tinymce.dom.Event.add(t.id, 'click', function(e) {\r
+                               if (!t.isDisabled())\r
+                                       return s.onclick.call(s.scope, e);\r
+                       });\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
+\r
+       tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control', {\r
+               ListBox : function(id, s) {\r
+                       var t = this;\r
+\r
+                       t.parent(id, s);\r
+\r
+                       t.items = [];\r
+\r
+                       t.onChange = new Dispatcher(t);\r
+\r
+                       t.onPostRender = new Dispatcher(t);\r
+\r
+                       t.onAdd = new Dispatcher(t);\r
+\r
+                       t.onRenderMenu = new tinymce.util.Dispatcher(this);\r
+\r
+                       t.classPrefix = 'mceListBox';\r
+               },\r
+\r
+               select : function(va) {\r
+                       var t = this, fv, f;\r
+\r
+                       if (va == undefined)\r
+                               return t.selectByIndex(-1);\r
+\r
+                       // Is string or number make function selector\r
+                       if (va && va.call)\r
+                               f = va;\r
+                       else {\r
+                               f = function(v) {\r
+                                       return v == va;\r
+                               };\r
+                       }\r
+\r
+                       // Do we need to do something?\r
+                       if (va != t.selectedValue) {\r
+                               // Find item\r
+                               each(t.items, function(o, i) {\r
+                                       if (f(o.value)) {\r
+                                               fv = 1;\r
+                                               t.selectByIndex(i);\r
+                                               return false;\r
+                                       }\r
+                               });\r
+\r
+                               if (!fv)\r
+                                       t.selectByIndex(-1);\r
+                       }\r
+               },\r
+\r
+               selectByIndex : function(idx) {\r
+                       var t = this, e, o;\r
+\r
+                       if (idx != t.selectedIndex) {\r
+                               e = DOM.get(t.id + '_text');\r
+                               o = t.items[idx];\r
+\r
+                               if (o) {\r
+                                       t.selectedValue = o.value;\r
+                                       t.selectedIndex = idx;\r
+                                       DOM.setHTML(e, DOM.encode(o.title));\r
+                                       DOM.removeClass(e, 'mceTitle');\r
+                               } else {\r
+                                       DOM.setHTML(e, DOM.encode(t.settings.title));\r
+                                       DOM.addClass(e, 'mceTitle');\r
+                                       t.selectedValue = t.selectedIndex = null;\r
+                               }\r
+\r
+                               e = 0;\r
+                       }\r
+               },\r
+\r
+               add : function(n, v, o) {\r
+                       var t = this;\r
+\r
+                       o = o || {};\r
+                       o = tinymce.extend(o, {\r
+                               title : n,\r
+                               value : v\r
+                       });\r
+\r
+                       t.items.push(o);\r
+                       t.onAdd.dispatch(t, o);\r
+               },\r
+\r
+               getLength : function() {\r
+                       return this.items.length;\r
+               },\r
+\r
+               renderHTML : function() {\r
+                       var h = '', t = this, s = t.settings, cp = t.classPrefix;\r
+\r
+                       h = '<table id="' + t.id + '" cellpadding="0" cellspacing="0" class="' + cp + ' ' + cp + 'Enabled' + (s['class'] ? (' ' + s['class']) : '') + '"><tbody><tr>';\r
+                       h += '<td>' + DOM.createHTML('a', {id : t.id + '_text', href : 'javascript:;', 'class' : 'mceText', onclick : "return false;", onmousedown : 'return false;'}, DOM.encode(t.settings.title)) + '</td>';\r
+                       h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', tabindex : -1, href : 'javascript:;', 'class' : 'mceOpen', onclick : "return false;", onmousedown : 'return false;'}, '<span></span>') + '</td>';\r
+                       h += '</tr></tbody></table>';\r
+\r
+                       return h;\r
+               },\r
+\r
+               showMenu : function() {\r
+                       var t = this, p1, p2, e = DOM.get(this.id), m;\r
+\r
+                       if (t.isDisabled() || t.items.length == 0)\r
+                               return;\r
+\r
+                       if (t.menu && t.menu.isMenuVisible)\r
+                               return t.hideMenu();\r
+\r
+                       if (!t.isMenuRendered) {\r
+                               t.renderMenu();\r
+                               t.isMenuRendered = true;\r
+                       }\r
+\r
+                       p1 = DOM.getPos(this.settings.menu_container);\r
+                       p2 = DOM.getPos(e);\r
+\r
+                       m = t.menu;\r
+                       m.settings.offset_x = p2.x;\r
+                       m.settings.offset_y = p2.y;\r
+                       m.settings.keyboard_focus = !tinymce.isOpera; // Opera is buggy when it comes to auto focus\r
+\r
+                       // Select in menu\r
+                       if (t.oldID)\r
+                               m.items[t.oldID].setSelected(0);\r
+\r
+                       each(t.items, function(o) {\r
+                               if (o.value === t.selectedValue) {\r
+                                       m.items[o.id].setSelected(1);\r
+                                       t.oldID = o.id;\r
+                               }\r
+                       });\r
+\r
+                       m.showMenu(0, e.clientHeight);\r
+\r
+                       Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+                       DOM.addClass(t.id, t.classPrefix + 'Selected');\r
+\r
+                       //DOM.get(t.id + '_text').focus();\r
+               },\r
+\r
+               hideMenu : function(e) {\r
+                       var t = this;\r
+\r
+                       if (t.menu && t.menu.isMenuVisible) {\r
+                               // Prevent double toogles by canceling the mouse click event to the button\r
+                               if (e && e.type == "mousedown" && (e.target.id == t.id + '_text' || e.target.id == t.id + '_open'))\r
+                                       return;\r
+\r
+                               if (!e || !DOM.getParent(e.target, '.mceMenu')) {\r
+                                       DOM.removeClass(t.id, t.classPrefix + 'Selected');\r
+                                       Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+                                       t.menu.hideMenu();\r
+                               }\r
+                       }\r
+               },\r
+\r
+               renderMenu : function() {\r
+                       var t = this, m;\r
+\r
+                       m = t.settings.control_manager.createDropMenu(t.id + '_menu', {\r
+                               menu_line : 1,\r
+                               'class' : t.classPrefix + 'Menu mceNoIcons',\r
+                               max_width : 150,\r
+                               max_height : 150\r
+                       });\r
+\r
+                       m.onHideMenu.add(t.hideMenu, t);\r
+\r
+                       m.add({\r
+                               title : t.settings.title,\r
+                               'class' : 'mceMenuItemTitle',\r
+                               onclick : function() {\r
+                                       if (t.settings.onselect('') !== false)\r
+                                               t.select(''); // Must be runned after\r
+                               }\r
+                       });\r
+\r
+                       each(t.items, function(o) {\r
+                               // No value then treat it as a title\r
+                               if (o.value === undefined) {\r
+                                       m.add({\r
+                                               title : o.title,\r
+                                               'class' : 'mceMenuItemTitle',\r
+                                               onclick : function() {\r
+                                                       if (t.settings.onselect('') !== false)\r
+                                                               t.select(''); // Must be runned after\r
+                                               }\r
+                                       });\r
+                               } else {\r
+                                       o.id = DOM.uniqueId();\r
+                                       o.onclick = function() {\r
+                                               if (t.settings.onselect(o.value) !== false)\r
+                                                       t.select(o.value); // Must be runned after\r
+                                       };\r
+\r
+                                       m.add(o);\r
+                               }\r
+                       });\r
+\r
+                       t.onRenderMenu.dispatch(t, m);\r
+                       t.menu = m;\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, cp = t.classPrefix;\r
+\r
+                       Event.add(t.id, 'click', t.showMenu, t);\r
+                       Event.add(t.id + '_text', 'focus', function() {\r
+                               if (!t._focused) {\r
+                                       t.keyDownHandler = Event.add(t.id + '_text', 'keydown', function(e) {\r
+                                               var idx = -1, v, kc = e.keyCode;\r
+\r
+                                               // Find current index\r
+                                               each(t.items, function(v, i) {\r
+                                                       if (t.selectedValue == v.value)\r
+                                                               idx = i;\r
+                                               });\r
+\r
+                                               // Move up/down\r
+                                               if (kc == 38)\r
+                                                       v = t.items[idx - 1];\r
+                                               else if (kc == 40)\r
+                                                       v = t.items[idx + 1];\r
+                                               else if (kc == 13) {\r
+                                                       // Fake select on enter\r
+                                                       v = t.selectedValue;\r
+                                                       t.selectedValue = null; // Needs to be null to fake change\r
+                                                       t.settings.onselect(v);\r
+                                                       return Event.cancel(e);\r
+                                               }\r
+\r
+                                               if (v) {\r
+                                                       t.hideMenu();\r
+                                                       t.select(v.value);\r
+                                               }\r
+                                       });\r
+                               }\r
+\r
+                               t._focused = 1;\r
+                       });\r
+                       Event.add(t.id + '_text', 'blur', function() {Event.remove(t.id + '_text', 'keydown', t.keyDownHandler); t._focused = 0;});\r
+\r
+                       // Old IE doesn't have hover on all elements\r
+                       if (tinymce.isIE6 || !DOM.boxModel) {\r
+                               Event.add(t.id, 'mouseover', function() {\r
+                                       if (!DOM.hasClass(t.id, cp + 'Disabled'))\r
+                                               DOM.addClass(t.id, cp + 'Hover');\r
+                               });\r
+\r
+                               Event.add(t.id, 'mouseout', function() {\r
+                                       if (!DOM.hasClass(t.id, cp + 'Disabled'))\r
+                                               DOM.removeClass(t.id, cp + 'Hover');\r
+                               });\r
+                       }\r
+\r
+                       t.onPostRender.dispatch(t, DOM.get(t.id));\r
+               },\r
+\r
+               destroy : function() {\r
+                       this.parent();\r
+\r
+                       Event.clear(this.id + '_text');\r
+                       Event.clear(this.id + '_open');\r
+               }\r
+       });\r
+})(tinymce);\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, Dispatcher = tinymce.util.Dispatcher;\r
+\r
+       tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox', {\r
+               NativeListBox : function(id, s) {\r
+                       this.parent(id, s);\r
+                       this.classPrefix = 'mceNativeListBox';\r
+               },\r
+\r
+               setDisabled : function(s) {\r
+                       DOM.get(this.id).disabled = s;\r
+               },\r
+\r
+               isDisabled : function() {\r
+                       return DOM.get(this.id).disabled;\r
+               },\r
+\r
+               select : function(va) {\r
+                       var t = this, fv, f;\r
+\r
+                       if (va == undefined)\r
+                               return t.selectByIndex(-1);\r
+\r
+                       // Is string or number make function selector\r
+                       if (va && va.call)\r
+                               f = va;\r
+                       else {\r
+                               f = function(v) {\r
+                                       return v == va;\r
+                               };\r
+                       }\r
+\r
+                       // Do we need to do something?\r
+                       if (va != t.selectedValue) {\r
+                               // Find item\r
+                               each(t.items, function(o, i) {\r
+                                       if (f(o.value)) {\r
+                                               fv = 1;\r
+                                               t.selectByIndex(i);\r
+                                               return false;\r
+                                       }\r
+                               });\r
+\r
+                               if (!fv)\r
+                                       t.selectByIndex(-1);\r
+                       }\r
+               },\r
+\r
+               selectByIndex : function(idx) {\r
+                       DOM.get(this.id).selectedIndex = idx + 1;\r
+                       this.selectedValue = this.items[idx] ? this.items[idx].value : null;\r
+               },\r
+\r
+               add : function(n, v, a) {\r
+                       var o, t = this;\r
+\r
+                       a = a || {};\r
+                       a.value = v;\r
+\r
+                       if (t.isRendered())\r
+                               DOM.add(DOM.get(this.id), 'option', a, n);\r
+\r
+                       o = {\r
+                               title : n,\r
+                               value : v,\r
+                               attribs : a\r
+                       };\r
+\r
+                       t.items.push(o);\r
+                       t.onAdd.dispatch(t, o);\r
+               },\r
+\r
+               getLength : function() {\r
+                       return this.items.length;\r
+               },\r
+\r
+               renderHTML : function() {\r
+                       var h, t = this;\r
+\r
+                       h = DOM.createHTML('option', {value : ''}, '-- ' + t.settings.title + ' --');\r
+\r
+                       each(t.items, function(it) {\r
+                               h += DOM.createHTML('option', {value : it.value}, it.title);\r
+                       });\r
+\r
+                       h = DOM.createHTML('select', {id : t.id, 'class' : 'mceNativeListBox'}, h);\r
+\r
+                       return h;\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, ch;\r
+\r
+                       t.rendered = true;\r
+\r
+                       function onChange(e) {\r
+                               var v = t.items[e.target.selectedIndex - 1];\r
+\r
+                               if (v && (v = v.value)) {\r
+                                       t.onChange.dispatch(t, v);\r
+\r
+                                       if (t.settings.onselect)\r
+                                               t.settings.onselect(v);\r
+                               }\r
+                       };\r
+\r
+                       Event.add(t.id, 'change', onChange);\r
+\r
+                       // Accessibility keyhandler\r
+                       Event.add(t.id, 'keydown', function(e) {\r
+                               var bf;\r
+\r
+                               Event.remove(t.id, 'change', ch);\r
+\r
+                               bf = Event.add(t.id, 'blur', function() {\r
+                                       Event.add(t.id, 'change', onChange);\r
+                                       Event.remove(t.id, 'blur', bf);\r
+                               });\r
+\r
+                               if (e.keyCode == 13 || e.keyCode == 32) {\r
+                                       onChange(e);\r
+                                       return Event.cancel(e);\r
+                               }\r
+                       });\r
+\r
+                       t.onPostRender.dispatch(t, DOM.get(t.id));\r
+               }\r
+       });\r
+})(tinymce);\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button', {\r
+               MenuButton : function(id, s) {\r
+                       this.parent(id, s);\r
+\r
+                       this.onRenderMenu = new tinymce.util.Dispatcher(this);\r
+\r
+                       s.menu_container = s.menu_container || DOM.doc.body;\r
+               },\r
+\r
+               showMenu : function() {\r
+                       var t = this, p1, p2, e = DOM.get(t.id), m;\r
+\r
+                       if (t.isDisabled())\r
+                               return;\r
+\r
+                       if (!t.isMenuRendered) {\r
+                               t.renderMenu();\r
+                               t.isMenuRendered = true;\r
+                       }\r
+\r
+                       if (t.isMenuVisible)\r
+                               return t.hideMenu();\r
+\r
+                       p1 = DOM.getPos(t.settings.menu_container);\r
+                       p2 = DOM.getPos(e);\r
+\r
+                       m = t.menu;\r
+                       m.settings.offset_x = p2.x;\r
+                       m.settings.offset_y = p2.y;\r
+                       m.settings.vp_offset_x = p2.x;\r
+                       m.settings.vp_offset_y = p2.y;\r
+                       m.settings.keyboard_focus = t._focused;\r
+                       m.showMenu(0, e.clientHeight);\r
+\r
+                       Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+                       t.setState('Selected', 1);\r
+\r
+                       t.isMenuVisible = 1;\r
+               },\r
+\r
+               renderMenu : function() {\r
+                       var t = this, m;\r
+\r
+                       m = t.settings.control_manager.createDropMenu(t.id + '_menu', {\r
+                               menu_line : 1,\r
+                               'class' : this.classPrefix + 'Menu',\r
+                               icons : t.settings.icons\r
+                       });\r
+\r
+                       m.onHideMenu.add(t.hideMenu, t);\r
+\r
+                       t.onRenderMenu.dispatch(t, m);\r
+                       t.menu = m;\r
+               },\r
+\r
+               hideMenu : function(e) {\r
+                       var t = this;\r
+\r
+                       // Prevent double toogles by canceling the mouse click event to the button\r
+                       if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id || e.id === t.id + '_open';}))\r
+                               return;\r
+\r
+                       if (!e || !DOM.getParent(e.target, '.mceMenu')) {\r
+                               t.setState('Selected', 0);\r
+                               Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+                               if (t.menu)\r
+                                       t.menu.hideMenu();\r
+                       }\r
+\r
+                       t.isMenuVisible = 0;\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, s = t.settings;\r
+\r
+                       Event.add(t.id, 'click', function() {\r
+                               if (!t.isDisabled()) {\r
+                                       if (s.onclick)\r
+                                               s.onclick(t.value);\r
+\r
+                                       t.showMenu();\r
+                               }\r
+                       });\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton', {\r
+               SplitButton : function(id, s) {\r
+                       this.parent(id, s);\r
+                       this.classPrefix = 'mceSplitButton';\r
+               },\r
+\r
+               renderHTML : function() {\r
+                       var h, t = this, s = t.settings, h1;\r
+\r
+                       h = '<tbody><tr>';\r
+\r
+                       if (s.image)\r
+                               h1 = DOM.createHTML('img ', {src : s.image, 'class' : 'mceAction ' + s['class']});\r
+                       else\r
+                               h1 = DOM.createHTML('span', {'class' : 'mceAction ' + s['class']}, '');\r
+\r
+                       h += '<td>' + DOM.createHTML('a', {id : t.id + '_action', href : 'javascript:;', 'class' : 'mceAction ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';\r
+       \r
+                       h1 = DOM.createHTML('span', {'class' : 'mceOpen ' + s['class']});\r
+                       h += '<td>' + DOM.createHTML('a', {id : t.id + '_open', href : 'javascript:;', 'class' : 'mceOpen ' + s['class'], onclick : "return false;", onmousedown : 'return false;', title : s.title}, h1) + '</td>';\r
+\r
+                       h += '</tr></tbody>';\r
+\r
+                       return DOM.createHTML('table', {id : t.id, 'class' : 'mceSplitButton mceSplitButtonEnabled ' + s['class'], cellpadding : '0', cellspacing : '0', onmousedown : 'return false;', title : s.title}, h);\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, s = t.settings;\r
+\r
+                       if (s.onclick) {\r
+                               Event.add(t.id + '_action', 'click', function() {\r
+                                       if (!t.isDisabled())\r
+                                               s.onclick(t.value);\r
+                               });\r
+                       }\r
+\r
+                       Event.add(t.id + '_open', 'click', t.showMenu, t);\r
+                       Event.add(t.id + '_open', 'focus', function() {t._focused = 1;});\r
+                       Event.add(t.id + '_open', 'blur', function() {t._focused = 0;});\r
+\r
+                       // Old IE doesn't have hover on all elements\r
+                       if (tinymce.isIE6 || !DOM.boxModel) {\r
+                               Event.add(t.id, 'mouseover', function() {\r
+                                       if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))\r
+                                               DOM.addClass(t.id, 'mceSplitButtonHover');\r
+                               });\r
+\r
+                               Event.add(t.id, 'mouseout', function() {\r
+                                       if (!DOM.hasClass(t.id, 'mceSplitButtonDisabled'))\r
+                                               DOM.removeClass(t.id, 'mceSplitButtonHover');\r
+                               });\r
+                       }\r
+               },\r
+\r
+               destroy : function() {\r
+                       this.parent();\r
+\r
+                       Event.clear(this.id + '_action');\r
+                       Event.clear(this.id + '_open');\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, is = tinymce.is, each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton', {\r
+               ColorSplitButton : function(id, s) {\r
+                       var t = this;\r
+\r
+                       t.parent(id, s);\r
+\r
+                       t.settings = s = tinymce.extend({\r
+                               colors : '000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',\r
+                               grid_width : 8,\r
+                               default_color : '#888888'\r
+                       }, t.settings);\r
+\r
+                       t.onShowMenu = new tinymce.util.Dispatcher(t);\r
+\r
+                       t.onHideMenu = new tinymce.util.Dispatcher(t);\r
+\r
+                       t.value = s.default_color;\r
+               },\r
+\r
+               showMenu : function() {\r
+                       var t = this, r, p, e, p2;\r
+\r
+                       if (t.isDisabled())\r
+                               return;\r
+\r
+                       if (!t.isMenuRendered) {\r
+                               t.renderMenu();\r
+                               t.isMenuRendered = true;\r
+                       }\r
+\r
+                       if (t.isMenuVisible)\r
+                               return t.hideMenu();\r
+\r
+                       e = DOM.get(t.id);\r
+                       DOM.show(t.id + '_menu');\r
+                       DOM.addClass(e, 'mceSplitButtonSelected');\r
+                       p2 = DOM.getPos(e);\r
+                       DOM.setStyles(t.id + '_menu', {\r
+                               left : p2.x,\r
+                               top : p2.y + e.clientHeight,\r
+                               zIndex : 200000\r
+                       });\r
+                       e = 0;\r
+\r
+                       Event.add(DOM.doc, 'mousedown', t.hideMenu, t);\r
+                       t.onShowMenu.dispatch(t);\r
+\r
+                       if (t._focused) {\r
+                               t._keyHandler = Event.add(t.id + '_menu', 'keydown', function(e) {\r
+                                       if (e.keyCode == 27)\r
+                                               t.hideMenu();\r
+                               });\r
+\r
+                               DOM.select('a', t.id + '_menu')[0].focus(); // Select first link\r
+                       }\r
+\r
+                       t.isMenuVisible = 1;\r
+               },\r
+\r
+               hideMenu : function(e) {\r
+                       var t = this;\r
+\r
+                       // Prevent double toogles by canceling the mouse click event to the button\r
+                       if (e && e.type == "mousedown" && DOM.getParent(e.target, function(e) {return e.id === t.id + '_open';}))\r
+                               return;\r
+\r
+                       if (!e || !DOM.getParent(e.target, '.mceSplitButtonMenu')) {\r
+                               DOM.removeClass(t.id, 'mceSplitButtonSelected');\r
+                               Event.remove(DOM.doc, 'mousedown', t.hideMenu, t);\r
+                               Event.remove(t.id + '_menu', 'keydown', t._keyHandler);\r
+                               DOM.hide(t.id + '_menu');\r
+                       }\r
+\r
+                       t.onHideMenu.dispatch(t);\r
+\r
+                       t.isMenuVisible = 0;\r
+               },\r
+\r
+               renderMenu : function() {\r
+                       var t = this, m, i = 0, s = t.settings, n, tb, tr, w;\r
+\r
+                       w = DOM.add(s.menu_container, 'div', {id : t.id + '_menu', 'class' : s['menu_class'] + ' ' + s['class'], style : 'position:absolute;left:0;top:-1000px;'});\r
+                       m = DOM.add(w, 'div', {'class' : s['class'] + ' mceSplitButtonMenu'});\r
+                       DOM.add(m, 'span', {'class' : 'mceMenuLine'});\r
+\r
+                       n = DOM.add(m, 'table', {'class' : 'mceColorSplitMenu'});\r
+                       tb = DOM.add(n, 'tbody');\r
+\r
+                       // Generate color grid\r
+                       i = 0;\r
+                       each(is(s.colors, 'array') ? s.colors : s.colors.split(','), function(c) {\r
+                               c = c.replace(/^#/, '');\r
+\r
+                               if (!i--) {\r
+                                       tr = DOM.add(tb, 'tr');\r
+                                       i = s.grid_width - 1;\r
+                               }\r
+\r
+                               n = DOM.add(tr, 'td');\r
+\r
+                               n = DOM.add(n, 'a', {\r
+                                       href : 'javascript:;',\r
+                                       style : {\r
+                                               backgroundColor : '#' + c\r
+                                       },\r
+                                       _mce_color : '#' + c\r
+                               });\r
+                       });\r
+\r
+                       if (s.more_colors_func) {\r
+                               n = DOM.add(tb, 'tr');\r
+                               n = DOM.add(n, 'td', {colspan : s.grid_width, 'class' : 'mceMoreColors'});\r
+                               n = DOM.add(n, 'a', {id : t.id + '_more', href : 'javascript:;', onclick : 'return false;', 'class' : 'mceMoreColors'}, s.more_colors_title);\r
+\r
+                               Event.add(n, 'click', function(e) {\r
+                                       s.more_colors_func.call(s.more_colors_scope || this);\r
+                                       return Event.cancel(e); // Cancel to fix onbeforeunload problem\r
+                               });\r
+                       }\r
+\r
+                       DOM.addClass(m, 'mceColorSplitMenu');\r
+\r
+                       Event.add(t.id + '_menu', 'click', function(e) {\r
+                               var c;\r
+\r
+                               e = e.target;\r
+\r
+                               if (e.nodeName == 'A' && (c = e.getAttribute('_mce_color')))\r
+                                       t.setColor(c);\r
+\r
+                               return Event.cancel(e); // Prevent IE auto save warning\r
+                       });\r
+\r
+                       return w;\r
+               },\r
+\r
+               setColor : function(c) {\r
+                       var t = this;\r
+\r
+                       DOM.setStyle(t.id + '_preview', 'backgroundColor', c);\r
+\r
+                       t.value = c;\r
+                       t.hideMenu();\r
+                       t.settings.onselect(c);\r
+               },\r
+\r
+               postRender : function() {\r
+                       var t = this, id = t.id;\r
+\r
+                       t.parent();\r
+                       DOM.add(id + '_action', 'div', {id : id + '_preview', 'class' : 'mceColorPreview'});\r
+                       DOM.setStyle(t.id + '_preview', 'backgroundColor', t.value);\r
+               },\r
+\r
+               destroy : function() {\r
+                       this.parent();\r
+\r
+                       Event.clear(this.id + '_menu');\r
+                       Event.clear(this.id + '_more');\r
+                       DOM.remove(this.id + '_menu');\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container', {\r
+       renderHTML : function() {\r
+               var t = this, h = '', c, co, dom = tinymce.DOM, s = t.settings, i, pr, nx, cl;\r
+\r
+               cl = t.controls;\r
+               for (i=0; i<cl.length; i++) {\r
+                       // Get current control, prev control, next control and if the control is a list box or not\r
+                       co = cl[i];\r
+                       pr = cl[i - 1];\r
+                       nx = cl[i + 1];\r
+\r
+                       // Add toolbar start\r
+                       if (i === 0) {\r
+                               c = 'mceToolbarStart';\r
+\r
+                               if (co.Button)\r
+                                       c += ' mceToolbarStartButton';\r
+                               else if (co.SplitButton)\r
+                                       c += ' mceToolbarStartSplitButton';\r
+                               else if (co.ListBox)\r
+                                       c += ' mceToolbarStartListBox';\r
+\r
+                               h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));\r
+                       }\r
+\r
+                       // Add toolbar end before list box and after the previous button\r
+                       // This is to fix the o2k7 editor skins\r
+                       if (pr && co.ListBox) {\r
+                               if (pr.Button || pr.SplitButton)\r
+                                       h += dom.createHTML('td', {'class' : 'mceToolbarEnd'}, dom.createHTML('span', null, '<!-- IE -->'));\r
+                       }\r
+\r
+                       // Render control HTML\r
+\r
+                       // IE 8 quick fix, needed to propertly generate a hit area for anchors\r
+                       if (dom.stdMode)\r
+                               h += '<td style="position: relative">' + co.renderHTML() + '</td>';\r
+                       else\r
+                               h += '<td>' + co.renderHTML() + '</td>';\r
+\r
+                       // Add toolbar start after list box and before the next button\r
+                       // This is to fix the o2k7 editor skins\r
+                       if (nx && co.ListBox) {\r
+                               if (nx.Button || nx.SplitButton)\r
+                                       h += dom.createHTML('td', {'class' : 'mceToolbarStart'}, dom.createHTML('span', null, '<!-- IE -->'));\r
+                       }\r
+               }\r
+\r
+               c = 'mceToolbarEnd';\r
+\r
+               if (co.Button)\r
+                       c += ' mceToolbarEndButton';\r
+               else if (co.SplitButton)\r
+                       c += ' mceToolbarEndSplitButton';\r
+               else if (co.ListBox)\r
+                       c += ' mceToolbarEndListBox';\r
+\r
+               h += dom.createHTML('td', {'class' : c}, dom.createHTML('span', null, '<!-- IE -->'));\r
+\r
+               return dom.createHTML('table', {id : t.id, 'class' : 'mceToolbar' + (s['class'] ? ' ' + s['class'] : ''), cellpadding : '0', cellspacing : '0', align : t.settings.align || ''}, '<tbody><tr>' + h + '</tr></tbody>');\r
+       }\r
+});\r
+\r
+(function(tinymce) {\r
+       var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each;\r
+\r
+       tinymce.create('tinymce.AddOnManager', {\r
+               items : [],\r
+               urls : {},\r
+               lookup : {},\r
+\r
+               onAdd : new Dispatcher(this),\r
+\r
+               get : function(n) {\r
+                       return this.lookup[n];\r
+               },\r
+\r
+               requireLangPack : function(n) {\r
+                       var s = tinymce.settings;\r
+\r
+                       if (s && s.language)\r
+                               tinymce.ScriptLoader.add(this.urls[n] + '/langs/' + s.language + '.js');\r
+               },\r
+\r
+               add : function(id, o) {\r
+                       this.items.push(o);\r
+                       this.lookup[id] = o;\r
+                       this.onAdd.dispatch(this, id, o);\r
+\r
+                       return o;\r
+               },\r
+\r
+               load : function(n, u, cb, s) {\r
+                       var t = this;\r
+\r
+                       if (t.urls[n])\r
+                               return;\r
+\r
+                       if (u.indexOf('/') != 0 && u.indexOf('://') == -1)\r
+                               u = tinymce.baseURL + '/' +  u;\r
+\r
+                       t.urls[n] = u.substring(0, u.lastIndexOf('/'));\r
+                       tinymce.ScriptLoader.add(u, cb, s);\r
+               }\r
+       });\r
+\r
+       // Create plugin and theme managers\r
+       tinymce.PluginManager = new tinymce.AddOnManager();\r
+       tinymce.ThemeManager = new tinymce.AddOnManager();\r
+}(tinymce));\r
+\r
+(function(tinymce) {\r
+       // Shorten names\r
+       var each = tinymce.each, extend = tinymce.extend,\r
+               DOM = tinymce.DOM, Event = tinymce.dom.Event,\r
+               ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,\r
+               explode = tinymce.explode,\r
+               Dispatcher = tinymce.util.Dispatcher, undefined, instanceCounter = 0;\r
+\r
+       // Setup some URLs where the editor API is located and where the document is\r
+       tinymce.documentBaseURL = window.location.href.replace(/[\?#].*$/, '').replace(/[\/\\][^\/]+$/, '');\r
+       if (!/[\/\\]$/.test(tinymce.documentBaseURL))\r
+               tinymce.documentBaseURL += '/';\r
+\r
+       tinymce.baseURL = new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);\r
+\r
+       tinymce.baseURI = new tinymce.util.URI(tinymce.baseURL);\r
+\r
+       // Add before unload listener\r
+       // This was required since IE was leaking memory if you added and removed beforeunload listeners\r
+       // with attachEvent/detatchEvent so this only adds one listener and instances can the attach to the onBeforeUnload event\r
+       tinymce.onBeforeUnload = new Dispatcher(tinymce);\r
+\r
+       // Must be on window or IE will leak if the editor is placed in frame or iframe\r
+       Event.add(window, 'beforeunload', function(e) {\r
+               tinymce.onBeforeUnload.dispatch(tinymce, e);\r
+       });\r
+\r
+       tinymce.onAddEditor = new Dispatcher(tinymce);\r
+\r
+       tinymce.onRemoveEditor = new Dispatcher(tinymce);\r
+\r
+       tinymce.EditorManager = extend(tinymce, {\r
+               editors : [],\r
+\r
+               i18n : {},\r
+\r
+               activeEditor : null,\r
+\r
+               init : function(s) {\r
+                       var t = this, pl, sl = tinymce.ScriptLoader, e, el = [], ed;\r
+\r
+                       function execCallback(se, n, s) {\r
+                               var f = se[n];\r
+\r
+                               if (!f)\r
+                                       return;\r
+\r
+                               if (tinymce.is(f, 'string')) {\r
+                                       s = f.replace(/\.\w+$/, '');\r
+                                       s = s ? tinymce.resolve(s) : 0;\r
+                                       f = tinymce.resolve(f);\r
+                               }\r
+\r
+                               return f.apply(s || this, Array.prototype.slice.call(arguments, 2));\r
+                       };\r
+\r
+                       s = extend({\r
+                               theme : "simple",\r
+                               language : "en"\r
+                       }, s);\r
+\r
+                       t.settings = s;\r
+\r
+                       // Legacy call\r
+                       Event.add(document, 'init', function() {\r
+                               var l, co;\r
+\r
+                               execCallback(s, 'onpageload');\r
+\r
+                               switch (s.mode) {\r
+                                       case "exact":\r
+                                               l = s.elements || '';\r
+\r
+                                               if(l.length > 0) {\r
+                                                       each(explode(l), function(v) {\r
+                                                               if (DOM.get(v)) {\r
+                                                                       ed = new tinymce.Editor(v, s);\r
+                                                                       el.push(ed);\r
+                                                                       ed.render(1);\r
+                                                               } else {\r
+                                                                       each(document.forms, function(f) {\r
+                                                                               each(f.elements, function(e) {\r
+                                                                                       if (e.name === v) {\r
+                                                                                               v = 'mce_editor_' + instanceCounter++;\r
+                                                                                               DOM.setAttrib(e, 'id', v);\r
+\r
+                                                                                               ed = new tinymce.Editor(v, s);\r
+                                                                                               el.push(ed);\r
+                                                                                               ed.render(1);\r
+                                                                                       }\r
+                                                                               });\r
+                                                                       });\r
+                                                               }\r
+                                                       });\r
+                                               }\r
+                                               break;\r
+\r
+                                       case "textareas":\r
+                                       case "specific_textareas":\r
+                                               function hasClass(n, c) {\r
+                                                       return c.constructor === RegExp ? c.test(n.className) : DOM.hasClass(n, c);\r
+                                               };\r
+\r
+                                               each(DOM.select('textarea'), function(v) {\r
+                                                       if (s.editor_deselector && hasClass(v, s.editor_deselector))\r
+                                                               return;\r
+\r
+                                                       if (!s.editor_selector || hasClass(v, s.editor_selector)) {\r
+                                                               // Can we use the name\r
+                                                               e = DOM.get(v.name);\r
+                                                               if (!v.id && !e)\r
+                                                                       v.id = v.name;\r
+\r
+                                                               // Generate unique name if missing or already exists\r
+                                                               if (!v.id || t.get(v.id))\r
+                                                                       v.id = DOM.uniqueId();\r
+\r
+                                                               ed = new tinymce.Editor(v.id, s);\r
+                                                               el.push(ed);\r
+                                                               ed.render(1);\r
+                                                       }\r
+                                               });\r
+                                               break;\r
+                               }\r
+\r
+                               // Call onInit when all editors are initialized\r
+                               if (s.oninit) {\r
+                                       l = co = 0;\r
+\r
+                                       each(el, function(ed) {\r
+                                               co++;\r
+\r
+                                               if (!ed.initialized) {\r
+                                                       // Wait for it\r
+                                                       ed.onInit.add(function() {\r
+                                                               l++;\r
+\r
+                                                               // All done\r
+                                                               if (l == co)\r
+                                                                       execCallback(s, 'oninit');\r
+                                                       });\r
+                                               } else\r
+                                                       l++;\r
+\r
+                                               // All done\r
+                                               if (l == co)\r
+                                                       execCallback(s, 'oninit');                                      \r
+                                       });\r
+                               }\r
+                       });\r
+               },\r
+\r
+               get : function(id) {\r
+                       if (id === undefined)\r
+                               return this.editors;\r
+\r
+                       return this.editors[id];\r
+               },\r
+\r
+               getInstanceById : function(id) {\r
+                       return this.get(id);\r
+               },\r
+\r
+               add : function(editor) {\r
+                       var self = this, editors = self.editors;\r
+\r
+                       // Add named and index editor instance\r
+                       editors[editor.id] = editor;\r
+                       editors.push(editor);\r
+\r
+                       self._setActive(editor);\r
+                       self.onAddEditor.dispatch(self, editor);\r
+\r
+\r
+                       // Patch the tinymce.Editor instance with jQuery adapter logic\r
+                       if (tinymce.adapter)\r
+                               tinymce.adapter.patchEditor(editor);\r
+\r
+\r
+                       return editor;\r
+               },\r
+\r
+               remove : function(editor) {\r
+                       var t = this, i, editors = t.editors;\r
+\r
+                       // Not in the collection\r
+                       if (!editors[editor.id])\r
+                               return null;\r
+\r
+                       delete editors[editor.id];\r
+\r
+                       for (i = 0; i < editors.length; i++) {\r
+                               if (editors[i] == editor) {\r
+                                       editors.splice(i, 1);\r
+                                       break;\r
+                               }\r
+                       }\r
+\r
+                       // Select another editor since the active one was removed\r
+                       if (t.activeEditor == editor)\r
+                               t._setActive(editors[0]);\r
+\r
+                       editor.destroy();\r
+                       t.onRemoveEditor.dispatch(t, editor);\r
+\r
+                       return editor;\r
+               },\r
+\r
+               execCommand : function(c, u, v) {\r
+                       var t = this, ed = t.get(v), w;\r
+\r
+                       // Manager commands\r
+                       switch (c) {\r
+                               case "mceFocus":\r
+                                       ed.focus();\r
+                                       return true;\r
+\r
+                               case "mceAddEditor":\r
+                               case "mceAddControl":\r
+                                       if (!t.get(v))\r
+                                               new tinymce.Editor(v, t.settings).render();\r
+\r
+                                       return true;\r
+\r
+                               case "mceAddFrameControl":\r
+                                       w = v.window;\r
+\r
+                                       // Add tinyMCE global instance and tinymce namespace to specified window\r
+                                       w.tinyMCE = tinyMCE;\r
+                                       w.tinymce = tinymce;\r
+\r
+                                       tinymce.DOM.doc = w.document;\r
+                                       tinymce.DOM.win = w;\r
+\r
+                                       ed = new tinymce.Editor(v.element_id, v);\r
+                                       ed.render();\r
+\r
+                                       // Fix IE memory leaks\r
+                                       if (tinymce.isIE) {\r
+                                               function clr() {\r
+                                                       ed.destroy();\r
+                                                       w.detachEvent('onunload', clr);\r
+                                                       w = w.tinyMCE = w.tinymce = null; // IE leak\r
+                                               };\r
+\r
+                                               w.attachEvent('onunload', clr);\r
+                                       }\r
+\r
+                                       v.page_window = null;\r
+\r
+                                       return true;\r
+\r
+                               case "mceRemoveEditor":\r
+                               case "mceRemoveControl":\r
+                                       if (ed)\r
+                                               ed.remove();\r
+\r
+                                       return true;\r
+\r
+                               case 'mceToggleEditor':\r
+                                       if (!ed) {\r
+                                               t.execCommand('mceAddControl', 0, v);\r
+                                               return true;\r
+                                       }\r
+\r
+                                       if (ed.isHidden())\r
+                                               ed.show();\r
+                                       else\r
+                                               ed.hide();\r
+\r
+                                       return true;\r
+                       }\r
+\r
+                       // Run command on active editor\r
+                       if (t.activeEditor)\r
+                               return t.activeEditor.execCommand(c, u, v);\r
+\r
+                       return false;\r
+               },\r
+\r
+               execInstanceCommand : function(id, c, u, v) {\r
+                       var ed = this.get(id);\r
+\r
+                       if (ed)\r
+                               return ed.execCommand(c, u, v);\r
+\r
+                       return false;\r
+               },\r
+\r
+               triggerSave : function() {\r
+                       each(this.editors, function(e) {\r
+                               e.save();\r
+                       });\r
+               },\r
+\r
+               addI18n : function(p, o) {\r
+                       var lo, i18n = this.i18n;\r
+\r
+                       if (!tinymce.is(p, 'string')) {\r
+                               each(p, function(o, lc) {\r
+                                       each(o, function(o, g) {\r
+                                               each(o, function(o, k) {\r
+                                                       if (g === 'common')\r
+                                                               i18n[lc + '.' + k] = o;\r
+                                                       else\r
+                                                               i18n[lc + '.' + g + '.' + k] = o;\r
+                                               });\r
+                                       });\r
+                               });\r
+                       } else {\r
+                               each(o, function(o, k) {\r
+                                       i18n[p + '.' + k] = o;\r
+                               });\r
+                       }\r
+               },\r
+\r
+               // Private methods\r
+\r
+               _setActive : function(editor) {\r
+                       this.selectedInstance = this.activeEditor = editor;\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       // Shorten these names\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend,\r
+               Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isGecko = tinymce.isGecko,\r
+               isIE = tinymce.isIE, isWebKit = tinymce.isWebKit, is = tinymce.is,\r
+               ThemeManager = tinymce.ThemeManager, PluginManager = tinymce.PluginManager,\r
+               inArray = tinymce.inArray, grep = tinymce.grep, explode = tinymce.explode;\r
+\r
+       tinymce.create('tinymce.Editor', {\r
+               Editor : function(id, s) {\r
+                       var t = this;\r
+\r
+                       t.id = t.editorId = id;\r
+\r
+                       t.execCommands = {};\r
+                       t.queryStateCommands = {};\r
+                       t.queryValueCommands = {};\r
+\r
+                       t.isNotDirty = false;\r
+\r
+                       t.plugins = {};\r
+\r
+                       // Add events to the editor\r
+                       each([\r
+                               'onPreInit',\r
+\r
+                               'onBeforeRenderUI',\r
+\r
+                               'onPostRender',\r
+\r
+                               'onInit',\r
+\r
+                               'onRemove',\r
+\r
+                               'onActivate',\r
+\r
+                               'onDeactivate',\r
+\r
+                               'onClick',\r
+\r
+                               'onEvent',\r
+\r
+                               'onMouseUp',\r
+\r
+                               'onMouseDown',\r
+\r
+                               'onDblClick',\r
+\r
+                               'onKeyDown',\r
+\r
+                               'onKeyUp',\r
+\r
+                               'onKeyPress',\r
+\r
+                               'onContextMenu',\r
+\r
+                               'onSubmit',\r
+\r
+                               'onReset',\r
+\r
+                               'onPaste',\r
+\r
+                               'onPreProcess',\r
+\r
+                               'onPostProcess',\r
+\r
+                               'onBeforeSetContent',\r
+\r
+                               'onBeforeGetContent',\r
+\r
+                               'onSetContent',\r
+\r
+                               'onGetContent',\r
+\r
+                               'onLoadContent',\r
+\r
+                               'onSaveContent',\r
+\r
+                               'onNodeChange',\r
+\r
+                               'onChange',\r
+\r
+                               'onBeforeExecCommand',\r
+\r
+                               'onExecCommand',\r
+\r
+                               'onUndo',\r
+\r
+                               'onRedo',\r
+\r
+                               'onVisualAid',\r
+\r
+                               'onSetProgressState'\r
+                       ], function(e) {\r
+                               t[e] = new Dispatcher(t);\r
+                       });\r
+\r
+                       t.settings = s = extend({\r
+                               id : id,\r
+                               language : 'en',\r
+                               docs_language : 'en',\r
+                               theme : 'simple',\r
+                               skin : 'default',\r
+                               delta_width : 0,\r
+                               delta_height : 0,\r
+                               popup_css : '',\r
+                               plugins : '',\r
+                               document_base_url : tinymce.documentBaseURL,\r
+                               add_form_submit_trigger : 1,\r
+                               submit_patch : 1,\r
+                               add_unload_trigger : 1,\r
+                               convert_urls : 1,\r
+                               relative_urls : 1,\r
+                               remove_script_host : 1,\r
+                               table_inline_editing : 0,\r
+                               object_resizing : 1,\r
+                               cleanup : 1,\r
+                               accessibility_focus : 1,\r
+                               custom_shortcuts : 1,\r
+                               custom_undo_redo_keyboard_shortcuts : 1,\r
+                               custom_undo_redo_restore_selection : 1,\r
+                               custom_undo_redo : 1,\r
+                               doctype : tinymce.isIE6 ? '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">' : '<!DOCTYPE>', // Use old doctype on IE 6 to avoid horizontal scroll\r
+                               visual_table_class : 'mceItemTable',\r
+                               visual : 1,\r
+                               font_size_style_values : 'xx-small,x-small,small,medium,large,x-large,xx-large',\r
+                               apply_source_formatting : 1,\r
+                               directionality : 'ltr',\r
+                               forced_root_block : 'p',\r
+                               valid_elements : '@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p,-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',\r
+                               hidden_input : 1,\r
+                               padd_empty_editor : 1,\r
+                               render_ui : 1,\r
+                               init_theme : 1,\r
+                               force_p_newlines : 1,\r
+                               indentation : '30px',\r
+                               keep_styles : 1,\r
+                               fix_table_elements : 1,\r
+                               inline_styles : 1,\r
+                               convert_fonts_to_spans : true\r
+                       }, s);\r
+\r
+                       t.documentBaseURI = new tinymce.util.URI(s.document_base_url || tinymce.documentBaseURL, {\r
+                               base_uri : tinyMCE.baseURI\r
+                       });\r
+\r
+                       t.baseURI = tinymce.baseURI;\r
+\r
+                       // Call setup\r
+                       t.execCallback('setup', t);\r
+               },\r
+\r
+               render : function(nst) {\r
+                       var t = this, s = t.settings, id = t.id, sl = tinymce.ScriptLoader;\r
+\r
+                       // Page is not loaded yet, wait for it\r
+                       if (!Event.domLoaded) {\r
+                               Event.add(document, 'init', function() {\r
+                                       t.render();\r
+                               });\r
+                               return;\r
+                       }\r
+\r
+                       tinyMCE.settings = s;\r
+\r
+                       // Element not found, then skip initialization\r
+                       if (!t.getElement())\r
+                               return;\r
+\r
+                       // Is a iPad/iPhone, then skip initialization. We need to sniff here since the\r
+                       // browser says it has contentEditable support but there is no visible caret\r
+                       // We will remove this check ones Apple implements full contentEditable support\r
+                       if (tinymce.isIDevice)\r
+                               return;\r
+\r
+                       // Add hidden input for non input elements inside form elements\r
+                       if (!/TEXTAREA|INPUT/i.test(t.getElement().nodeName) && s.hidden_input && DOM.getParent(id, 'form'))\r
+                               DOM.insertAfter(DOM.create('input', {type : 'hidden', name : id}), id);\r
+\r
+                       if (tinymce.WindowManager)\r
+                               t.windowManager = new tinymce.WindowManager(t);\r
+\r
+                       if (s.encoding == 'xml') {\r
+                               t.onGetContent.add(function(ed, o) {\r
+                                       if (o.save)\r
+                                               o.content = DOM.encode(o.content);\r
+                               });\r
+                       }\r
+\r
+                       if (s.add_form_submit_trigger) {\r
+                               t.onSubmit.addToTop(function() {\r
+                                       if (t.initialized) {\r
+                                               t.save();\r
+                                               t.isNotDirty = 1;\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       if (s.add_unload_trigger) {\r
+                               t._beforeUnload = tinyMCE.onBeforeUnload.add(function() {\r
+                                       if (t.initialized && !t.destroyed && !t.isHidden())\r
+                                               t.save({format : 'raw', no_events : true});\r
+                               });\r
+                       }\r
+\r
+                       tinymce.addUnload(t.destroy, t);\r
+\r
+                       if (s.submit_patch) {\r
+                               t.onBeforeRenderUI.add(function() {\r
+                                       var n = t.getElement().form;\r
+\r
+                                       if (!n)\r
+                                               return;\r
+\r
+                                       // Already patched\r
+                                       if (n._mceOldSubmit)\r
+                                               return;\r
+\r
+                                       // Check page uses id="submit" or name="submit" for it's submit button\r
+                                       if (!n.submit.nodeType && !n.submit.length) {\r
+                                               t.formElement = n;\r
+                                               n._mceOldSubmit = n.submit;\r
+                                               n.submit = function() {\r
+                                                       // Save all instances\r
+                                                       tinymce.triggerSave();\r
+                                                       t.isNotDirty = 1;\r
+\r
+                                                       return t.formElement._mceOldSubmit(t.formElement);\r
+                                               };\r
+                                       }\r
+\r
+                                       n = null;\r
+                               });\r
+                       }\r
+\r
+                       // Load scripts\r
+                       function loadScripts() {\r
+                               if (s.language)\r
+                                       sl.add(tinymce.baseURL + '/langs/' + s.language + '.js');\r
+\r
+                               if (s.theme && s.theme.charAt(0) != '-' && !ThemeManager.urls[s.theme])\r
+                                       ThemeManager.load(s.theme, 'themes/' + s.theme + '/editor_template' + tinymce.suffix + '.js');\r
+\r
+                               each(explode(s.plugins), function(p) {\r
+                                       if (p && p.charAt(0) != '-' && !PluginManager.urls[p]) {\r
+                                               // Skip safari plugin, since it is removed as of 3.3b1\r
+                                               if (p == 'safari')\r
+                                                       return;\r
+\r
+                                               PluginManager.load(p, 'plugins/' + p + '/editor_plugin' + tinymce.suffix + '.js');\r
+                                       }\r
+                               });\r
+\r
+                               // Init when que is loaded\r
+                               sl.loadQueue(function() {\r
+                                       if (!t.removed)\r
+                                               t.init();\r
+                               });\r
+                       };\r
+\r
+                       loadScripts();\r
+               },\r
+\r
+               init : function() {\r
+                       var n, t = this, s = t.settings, w, h, e = t.getElement(), o, ti, u, bi, bc, re;\r
+\r
+                       tinymce.add(t);\r
+\r
+                       if (s.theme) {\r
+                               s.theme = s.theme.replace(/-/, '');\r
+                               o = ThemeManager.get(s.theme);\r
+                               t.theme = new o();\r
+\r
+                               if (t.theme.init && s.init_theme)\r
+                                       t.theme.init(t, ThemeManager.urls[s.theme] || tinymce.documentBaseURL.replace(/\/$/, ''));\r
+                       }\r
+\r
+                       // Create all plugins\r
+                       each(explode(s.plugins.replace(/\-/g, '')), function(p) {\r
+                               var c = PluginManager.get(p), u = PluginManager.urls[p] || tinymce.documentBaseURL.replace(/\/$/, ''), po;\r
+\r
+                               if (c) {\r
+                                       po = new c(t, u);\r
+\r
+                                       t.plugins[p] = po;\r
+\r
+                                       if (po.init)\r
+                                               po.init(t, u);\r
+                               }\r
+                       });\r
+\r
+                       // Setup popup CSS path(s)\r
+                       if (s.popup_css !== false) {\r
+                               if (s.popup_css)\r
+                                       s.popup_css = t.documentBaseURI.toAbsolute(s.popup_css);\r
+                               else\r
+                                       s.popup_css = t.baseURI.toAbsolute("themes/" + s.theme + "/skins/" + s.skin + "/dialog.css");\r
+                       }\r
+\r
+                       if (s.popup_css_add)\r
+                               s.popup_css += ',' + t.documentBaseURI.toAbsolute(s.popup_css_add);\r
+\r
+                       t.controlManager = new tinymce.ControlManager(t);\r
+\r
+                       if (s.custom_undo_redo) {\r
+                               // Add initial undo level\r
+                               t.onBeforeExecCommand.add(function(ed, cmd, ui, val, a) {\r
+                                       if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo)) {\r
+                                               if (!t.undoManager.hasUndo())\r
+                                                       t.undoManager.add();\r
+                                       }\r
+                               });\r
+\r
+                               t.onExecCommand.add(function(ed, cmd, ui, val, a) {\r
+                                       if (cmd != 'Undo' && cmd != 'Redo' && cmd != 'mceRepaint' && (!a || !a.skip_undo))\r
+                                               t.undoManager.add();\r
+                               });\r
+                       }\r
+\r
+                       t.onExecCommand.add(function(ed, c) {\r
+                               // Don't refresh the select lists until caret move\r
+                               if (!/^(FontName|FontSize)$/.test(c))\r
+                                       t.nodeChanged();\r
+                       });\r
+\r
+                       // Remove ghost selections on images and tables in Gecko\r
+                       if (isGecko) {\r
+                               function repaint(a, o) {\r
+                                       if (!o || !o.initial)\r
+                                               t.execCommand('mceRepaint');\r
+                               };\r
+\r
+                               t.onUndo.add(repaint);\r
+                               t.onRedo.add(repaint);\r
+                               t.onSetContent.add(repaint);\r
+                       }\r
+\r
+                       // Enables users to override the control factory\r
+                       t.onBeforeRenderUI.dispatch(t, t.controlManager);\r
+\r
+                       // Measure box\r
+                       if (s.render_ui) {\r
+                               w = s.width || e.style.width || e.offsetWidth;\r
+                               h = s.height || e.style.height || e.offsetHeight;\r
+                               t.orgDisplay = e.style.display;\r
+                               re = /^[0-9\.]+(|px)$/i;\r
+\r
+                               if (re.test('' + w))\r
+                                       w = Math.max(parseInt(w) + (o.deltaWidth || 0), 100);\r
+\r
+                               if (re.test('' + h))\r
+                                       h = Math.max(parseInt(h) + (o.deltaHeight || 0), 100);\r
+\r
+                               // Render UI\r
+                               o = t.theme.renderUI({\r
+                                       targetNode : e,\r
+                                       width : w,\r
+                                       height : h,\r
+                                       deltaWidth : s.delta_width,\r
+                                       deltaHeight : s.delta_height\r
+                               });\r
+\r
+                               t.editorContainer = o.editorContainer;\r
+                       }\r
+\r
+\r
+                       // User specified a document.domain value\r
+                       if (document.domain && location.hostname != document.domain)\r
+                               tinymce.relaxedDomain = document.domain;\r
+\r
+                       // Resize editor\r
+                       DOM.setStyles(o.sizeContainer || o.editorContainer, {\r
+                               width : w,\r
+                               height : h\r
+                       });\r
+\r
+                       h = (o.iframeHeight || h) + (typeof(h) == 'number' ? (o.deltaHeight || 0) : '');\r
+                       if (h < 100)\r
+                               h = 100;\r
+\r
+                       t.iframeHTML = s.doctype + '<html><head xmlns="http://www.w3.org/1999/xhtml">';\r
+\r
+                       // We only need to override paths if we have to\r
+                       // IE has a bug where it remove site absolute urls to relative ones if this is specified\r
+                       if (s.document_base_url != tinymce.documentBaseURL)\r
+                               t.iframeHTML += '<base href="' + t.documentBaseURI.getURI() + '" />';\r
+\r
+                       t.iframeHTML += '<meta http-equiv="X-UA-Compatible" content="IE=7" /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';\r
+\r
+                       if (tinymce.relaxedDomain)\r
+                               t.iframeHTML += '<script type="text/javascript">document.domain = "' + tinymce.relaxedDomain + '";</script>';\r
+\r
+                       bi = s.body_id || 'tinymce';\r
+                       if (bi.indexOf('=') != -1) {\r
+                               bi = t.getParam('body_id', '', 'hash');\r
+                               bi = bi[t.id] || bi;\r
+                       }\r
+\r
+                       bc = s.body_class || '';\r
+                       if (bc.indexOf('=') != -1) {\r
+                               bc = t.getParam('body_class', '', 'hash');\r
+                               bc = bc[t.id] || '';\r
+                       }\r
+\r
+                       t.iframeHTML += '</head><body id="' + bi + '" class="mceContentBody ' + bc + '"></body></html>';\r
+\r
+                       // Domain relaxing enabled, then set document domain\r
+                       if (tinymce.relaxedDomain) {\r
+                               // We need to write the contents here in IE since multiple writes messes up refresh button and back button\r
+                               if (isIE || (tinymce.isOpera && parseFloat(opera.version()) >= 9.5))\r
+                                       u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";var ed = window.parent.tinyMCE.get("' + t.id + '");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';\r
+                               else if (tinymce.isOpera)\r
+                                       u = 'javascript:(function(){document.open();document.domain="' + document.domain + '";document.close();ed.setupIframe();})()';                                  \r
+                       }\r
+\r
+                       // Create iframe\r
+                       n = DOM.add(o.iframeContainer, 'iframe', {\r
+                               id : t.id + "_ifr",\r
+                               src : u || 'javascript:""', // Workaround for HTTPS warning in IE6/7\r
+                               frameBorder : '0',\r
+                               style : {\r
+                                       width : '100%',\r
+                                       height : h\r
+                               }\r
+                       });\r
+\r
+                       t.contentAreaContainer = o.iframeContainer;\r
+                       DOM.get(o.editorContainer).style.display = t.orgDisplay;\r
+                       DOM.get(t.id).style.display = 'none';\r
+\r
+                       if (!isIE || !tinymce.relaxedDomain)\r
+                               t.setupIframe();\r
+\r
+                       e = n = o = null; // Cleanup\r
+               },\r
+\r
+               setupIframe : function() {\r
+                       var t = this, s = t.settings, e = DOM.get(t.id), d = t.getDoc(), h, b;\r
+\r
+                       // Setup iframe body\r
+                       if (!isIE || !tinymce.relaxedDomain) {\r
+                               d.open();\r
+                               d.write(t.iframeHTML);\r
+                               d.close();\r
+                       }\r
+\r
+                       // Design mode needs to be added here Ctrl+A will fail otherwise\r
+                       if (!isIE) {\r
+                               try {\r
+                                       if (!s.readonly)\r
+                                               d.designMode = 'On';\r
+                               } catch (ex) {\r
+                                       // Will fail on Gecko if the editor is placed in an hidden container element\r
+                                       // The design mode will be set ones the editor is focused\r
+                               }\r
+                       }\r
+\r
+                       // IE needs to use contentEditable or it will display non secure items for HTTPS\r
+                       if (isIE) {\r
+                               // It will not steal focus if we hide it while setting contentEditable\r
+                               b = t.getBody();\r
+                               DOM.hide(b);\r
+\r
+                               if (!s.readonly)\r
+                                       b.contentEditable = true;\r
+\r
+                               DOM.show(b);\r
+                       }\r
+\r
+                       t.dom = new tinymce.dom.DOMUtils(t.getDoc(), {\r
+                               keep_values : true,\r
+                               url_converter : t.convertURL,\r
+                               url_converter_scope : t,\r
+                               hex_colors : s.force_hex_style_colors,\r
+                               class_filter : s.class_filter,\r
+                               update_styles : 1,\r
+                               fix_ie_paragraphs : 1,\r
+                               valid_styles : s.valid_styles\r
+                       });\r
+\r
+                       t.schema = new tinymce.dom.Schema();\r
+\r
+                       t.serializer = new tinymce.dom.Serializer(extend(s, {\r
+                               valid_elements : s.verify_html === false ? '*[*]' : s.valid_elements,\r
+                               dom : t.dom,\r
+                               schema : t.schema\r
+                       }));\r
+\r
+                       t.selection = new tinymce.dom.Selection(t.dom, t.getWin(), t.serializer);\r
+\r
+                       t.formatter = new tinymce.Formatter(this);\r
+\r
+                       // Register default formats\r
+                       t.formatter.register({\r
+                               alignleft : [\r
+                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'left'}},\r
+                                       {selector : 'img,table', styles : {'float' : 'left'}}\r
+                               ],\r
+\r
+                               aligncenter : [\r
+                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'center'}},\r
+                                       {selector : 'img', styles : {display : 'block', marginLeft : 'auto', marginRight : 'auto'}},\r
+                                       {selector : 'table', styles : {marginLeft : 'auto', marginRight : 'auto'}}\r
+                               ],\r
+\r
+                               alignright : [\r
+                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'right'}},\r
+                                       {selector : 'img,table', styles : {'float' : 'right'}}\r
+                               ],\r
+\r
+                               alignfull : [\r
+                                       {selector : 'p,h1,h2,h3,h4,h5,h6,td,th,div,ul,ol,li', styles : {textAlign : 'justify'}}\r
+                               ],\r
+\r
+                               bold : [\r
+                                       {inline : 'strong'},\r
+                                       {inline : 'span', styles : {fontWeight : 'bold'}},\r
+                                       {inline : 'b'}\r
+                               ],\r
+\r
+                               italic : [\r
+                                       {inline : 'em'},\r
+                                       {inline : 'span', styles : {fontStyle : 'italic'}},\r
+                                       {inline : 'i'}\r
+                               ],\r
+\r
+                               underline : [\r
+                                       {inline : 'span', styles : {textDecoration : 'underline'}, exact : true},\r
+                                       {inline : 'u'}\r
+                               ],\r
+\r
+                               strikethrough : [\r
+                                       {inline : 'span', styles : {textDecoration : 'line-through'}, exact : true},\r
+                                       {inline : 'u'}\r
+                               ],\r
+\r
+                               forecolor : {inline : 'span', styles : {color : '%value'}},\r
+                               hilitecolor : {inline : 'span', styles : {backgroundColor : '%value'}},\r
+                               fontname : {inline : 'span', styles : {fontFamily : '%value'}},\r
+                               fontsize : {inline : 'span', styles : {fontSize : '%value'}},\r
+                               fontsize_class : {inline : 'span', attributes : {'class' : '%value'}},\r
+                               blockquote : {block : 'blockquote', wrapper : 1, remove : 'all'},\r
+\r
+                               removeformat : [\r
+                                       {selector : 'b,strong,em,i,font,u,strike', remove : 'all', split : true, expand : false, block_expand : true, deep : true},\r
+                                       {selector : 'span', attributes : ['style', 'class'], remove : 'empty', split : true, expand : false, deep : true},\r
+                                       {selector : '*', attributes : ['style', 'class'], split : false, expand : false, deep : true}\r
+                               ]\r
+                       });\r
+\r
+                       // Register default block formats\r
+                       each('p h1 h2 h3 h4 h5 h6 div address pre div code dt dd samp'.split(/\s/), function(name) {\r
+                               t.formatter.register(name, {block : name, remove : 'all'});\r
+                       });\r
+\r
+                       // Register user defined formats\r
+                       t.formatter.register(t.settings.formats);\r
+\r
+                       t.undoManager = new tinymce.UndoManager(t);\r
+\r
+                       // Pass through\r
+                       t.undoManager.onAdd.add(function(um, l) {\r
+                               if (!l.initial)\r
+                                       return t.onChange.dispatch(t, l, um);\r
+                       });\r
+\r
+                       t.undoManager.onUndo.add(function(um, l) {\r
+                               return t.onUndo.dispatch(t, l, um);\r
+                       });\r
+\r
+                       t.undoManager.onRedo.add(function(um, l) {\r
+                               return t.onRedo.dispatch(t, l, um);\r
+                       });\r
+\r
+                       t.forceBlocks = new tinymce.ForceBlocks(t, {\r
+                               forced_root_block : s.forced_root_block\r
+                       });\r
+\r
+                       t.editorCommands = new tinymce.EditorCommands(t);\r
+\r
+                       // Pass through\r
+                       t.serializer.onPreProcess.add(function(se, o) {\r
+                               return t.onPreProcess.dispatch(t, o, se);\r
+                       });\r
+\r
+                       t.serializer.onPostProcess.add(function(se, o) {\r
+                               return t.onPostProcess.dispatch(t, o, se);\r
+                       });\r
+\r
+                       t.onPreInit.dispatch(t);\r
+\r
+                       if (!s.gecko_spellcheck)\r
+                               t.getBody().spellcheck = 0;\r
+\r
+                       if (!s.readonly)\r
+                               t._addEvents();\r
+\r
+                       t.controlManager.onPostRender.dispatch(t, t.controlManager);\r
+                       t.onPostRender.dispatch(t);\r
+\r
+                       if (s.directionality)\r
+                               t.getBody().dir = s.directionality;\r
+\r
+                       if (s.nowrap)\r
+                               t.getBody().style.whiteSpace = "nowrap";\r
+\r
+                       if (s.custom_elements) {\r
+                               function handleCustom(ed, o) {\r
+                                       each(explode(s.custom_elements), function(v) {\r
+                                               var n;\r
+\r
+                                               if (v.indexOf('~') === 0) {\r
+                                                       v = v.substring(1);\r
+                                                       n = 'span';\r
+                                               } else\r
+                                                       n = 'div';\r
+\r
+                                               o.content = o.content.replace(new RegExp('<(' + v + ')([^>]*)>', 'g'), '<' + n + ' _mce_name="$1"$2>');\r
+                                               o.content = o.content.replace(new RegExp('</(' + v + ')>', 'g'), '</' + n + '>');\r
+                                       });\r
+                               };\r
+\r
+                               t.onBeforeSetContent.add(handleCustom);\r
+                               t.onPostProcess.add(function(ed, o) {\r
+                                       if (o.set)\r
+                                               handleCustom(ed, o);\r
+                               });\r
+                       }\r
+\r
+                       if (s.handle_node_change_callback) {\r
+                               t.onNodeChange.add(function(ed, cm, n) {\r
+                                       t.execCallback('handle_node_change_callback', t.id, n, -1, -1, true, t.selection.isCollapsed());\r
+                               });\r
+                       }\r
+\r
+                       if (s.save_callback) {\r
+                               t.onSaveContent.add(function(ed, o) {\r
+                                       var h = t.execCallback('save_callback', t.id, o.content, t.getBody());\r
+\r
+                                       if (h)\r
+                                               o.content = h;\r
+                               });\r
+                       }\r
+\r
+                       if (s.onchange_callback) {\r
+                               t.onChange.add(function(ed, l) {\r
+                                       t.execCallback('onchange_callback', t, l);\r
+                               });\r
+                       }\r
+\r
+                       if (s.convert_newlines_to_brs) {\r
+                               t.onBeforeSetContent.add(function(ed, o) {\r
+                                       if (o.initial)\r
+                                               o.content = o.content.replace(/\r?\n/g, '<br />');\r
+                               });\r
+                       }\r
+\r
+                       if (s.fix_nesting && isIE) {\r
+                               t.onBeforeSetContent.add(function(ed, o) {\r
+                                       o.content = t._fixNesting(o.content);\r
+                               });\r
+                       }\r
+\r
+                       if (s.preformatted) {\r
+                               t.onPostProcess.add(function(ed, o) {\r
+                                       o.content = o.content.replace(/^\s*<pre.*?>/, '');\r
+                                       o.content = o.content.replace(/<\/pre>\s*$/, '');\r
+\r
+                                       if (o.set)\r
+                                               o.content = '<pre class="mceItemHidden">' + o.content + '</pre>';\r
+                               });\r
+                       }\r
+\r
+                       if (s.verify_css_classes) {\r
+                               t.serializer.attribValueFilter = function(n, v) {\r
+                                       var s, cl;\r
+\r
+                                       if (n == 'class') {\r
+                                               // Build regexp for classes\r
+                                               if (!t.classesRE) {\r
+                                                       cl = t.dom.getClasses();\r
+\r
+                                                       if (cl.length > 0) {\r
+                                                               s = '';\r
+\r
+                                                               each (cl, function(o) {\r
+                                                                       s += (s ? '|' : '') + o['class'];\r
+                                                               });\r
+\r
+                                                               t.classesRE = new RegExp('(' + s + ')', 'gi');\r
+                                                       }\r
+                                               }\r
+\r
+                                               return !t.classesRE || /(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v) || t.classesRE.test(v) ? v : '';\r
+                                       }\r
+\r
+                                       return v;\r
+                               };\r
+                       }\r
+\r
+                       if (s.cleanup_callback) {\r
+                               t.onBeforeSetContent.add(function(ed, o) {\r
+                                       o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
+                               });\r
+\r
+                               t.onPreProcess.add(function(ed, o) {\r
+                                       if (o.set)\r
+                                               t.execCallback('cleanup_callback', 'insert_to_editor_dom', o.node, o);\r
+\r
+                                       if (o.get)\r
+                                               t.execCallback('cleanup_callback', 'get_from_editor_dom', o.node, o);\r
+                               });\r
+\r
+                               t.onPostProcess.add(function(ed, o) {\r
+                                       if (o.set)\r
+                                               o.content = t.execCallback('cleanup_callback', 'insert_to_editor', o.content, o);\r
+\r
+                                       if (o.get)                                              \r
+                                               o.content = t.execCallback('cleanup_callback', 'get_from_editor', o.content, o);\r
+                               });\r
+                       }\r
+\r
+                       if (s.save_callback) {\r
+                               t.onGetContent.add(function(ed, o) {\r
+                                       if (o.save)\r
+                                               o.content = t.execCallback('save_callback', t.id, o.content, t.getBody());\r
+                               });\r
+                       }\r
+\r
+                       if (s.handle_event_callback) {\r
+                               t.onEvent.add(function(ed, e, o) {\r
+                                       if (t.execCallback('handle_event_callback', e, ed, o) === false)\r
+                                               Event.cancel(e);\r
+                               });\r
+                       }\r
+\r
+                       // Add visual aids when new contents is added\r
+                       t.onSetContent.add(function() {\r
+                               t.addVisual(t.getBody());\r
+                       });\r
+\r
+                       // Remove empty contents\r
+                       if (s.padd_empty_editor) {\r
+                               t.onPostProcess.add(function(ed, o) {\r
+                                       o.content = o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/, '');\r
+                               });\r
+                       }\r
+\r
+                       if (isGecko) {\r
+                               // Fix gecko link bug, when a link is placed at the end of block elements there is\r
+                               // no way to move the caret behind the link. This fix adds a bogus br element after the link\r
+                               function fixLinks(ed, o) {\r
+                                       each(ed.dom.select('a'), function(n) {\r
+                                               var pn = n.parentNode;\r
+\r
+                                               if (ed.dom.isBlock(pn) && pn.lastChild === n)\r
+                                                       ed.dom.add(pn, 'br', {'_mce_bogus' : 1});\r
+                                       });\r
+                               };\r
+\r
+                               t.onExecCommand.add(function(ed, cmd) {\r
+                                       if (cmd === 'CreateLink')\r
+                                               fixLinks(ed);\r
+                               });\r
+\r
+                               t.onSetContent.add(t.selection.onSetContent.add(fixLinks));\r
+\r
+                               if (!s.readonly) {\r
+                                       try {\r
+                                               // Design mode must be set here once again to fix a bug where\r
+                                               // Ctrl+A/Delete/Backspace didn't work if the editor was added using mceAddControl then removed then added again\r
+                                               d.designMode = 'Off';\r
+                                               d.designMode = 'On';\r
+                                       } catch (ex) {\r
+                                               // Will fail on Gecko if the editor is placed in an hidden container element\r
+                                               // The design mode will be set ones the editor is focused\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // A small timeout was needed since firefox will remove. Bug: #1838304\r
+                       setTimeout(function () {\r
+                               if (t.removed)\r
+                                       return;\r
+\r
+                               t.load({initial : true, format : (s.cleanup_on_startup ? 'html' : 'raw')});\r
+                               t.startContent = t.getContent({format : 'raw'});\r
+                               t.initialized = true;\r
+\r
+                               t.onInit.dispatch(t);\r
+                               t.execCallback('setupcontent_callback', t.id, t.getBody(), t.getDoc());\r
+                               t.execCallback('init_instance_callback', t);\r
+                               t.focus(true);\r
+                               t.nodeChanged({initial : 1});\r
+\r
+                               // Load specified content CSS last\r
+                               if (s.content_css) {\r
+                                       tinymce.each(explode(s.content_css), function(u) {\r
+                                               t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));\r
+                                       });\r
+                               }\r
+\r
+                               // Handle auto focus\r
+                               if (s.auto_focus) {\r
+                                       setTimeout(function () {\r
+                                               var ed = tinymce.get(s.auto_focus);\r
+\r
+                                               ed.selection.select(ed.getBody(), 1);\r
+                                               ed.selection.collapse(1);\r
+                                               ed.getWin().focus();\r
+                                       }, 100);\r
+                               }\r
+                       }, 1);\r
+       \r
+                       e = null;\r
+               },\r
+\r
+\r
+               focus : function(sf) {\r
+                       var oed, t = this, ce = t.settings.content_editable, ieRng, controlElm, doc = t.getDoc();\r
+\r
+                       if (!sf) {\r
+                               // Get selected control element\r
+                               ieRng = t.selection.getRng();\r
+                               if (ieRng.item) {\r
+                                       controlElm = ieRng.item(0);\r
+                               }\r
+\r
+                               // Is not content editable\r
+                               if (!ce)\r
+                                       t.getWin().focus();\r
+\r
+                               // Restore selected control element\r
+                               // This is needed when for example an image is selected within a\r
+                               // layer a call to focus will then remove the control selection\r
+                               if (controlElm && controlElm.ownerDocument == doc) {\r
+                                       ieRng = doc.body.createControlRange();\r
+                                       ieRng.addElement(controlElm);\r
+                                       ieRng.select();\r
+                               }\r
+\r
+                       }\r
+\r
+                       if (tinymce.activeEditor != t) {\r
+                               if ((oed = tinymce.activeEditor) != null)\r
+                                       oed.onDeactivate.dispatch(oed, t);\r
+\r
+                               t.onActivate.dispatch(t, oed);\r
+                       }\r
+\r
+                       tinymce._setActive(t);\r
+               },\r
+\r
+               execCallback : function(n) {\r
+                       var t = this, f = t.settings[n], s;\r
+\r
+                       if (!f)\r
+                               return;\r
+\r
+                       // Look through lookup\r
+                       if (t.callbackLookup && (s = t.callbackLookup[n])) {\r
+                               f = s.func;\r
+                               s = s.scope;\r
+                       }\r
+\r
+                       if (is(f, 'string')) {\r
+                               s = f.replace(/\.\w+$/, '');\r
+                               s = s ? tinymce.resolve(s) : 0;\r
+                               f = tinymce.resolve(f);\r
+                               t.callbackLookup = t.callbackLookup || {};\r
+                               t.callbackLookup[n] = {func : f, scope : s};\r
+                       }\r
+\r
+                       return f.apply(s || t, Array.prototype.slice.call(arguments, 1));\r
+               },\r
+\r
+               translate : function(s) {\r
+                       var c = this.settings.language || 'en', i18n = tinymce.i18n;\r
+\r
+                       if (!s)\r
+                               return '';\r
+\r
+                       return i18n[c + '.' + s] || s.replace(/{\#([^}]+)\}/g, function(a, b) {\r
+                               return i18n[c + '.' + b] || '{#' + b + '}';\r
+                       });\r
+               },\r
+\r
+               getLang : function(n, dv) {\r
+                       return tinymce.i18n[(this.settings.language || 'en') + '.' + n] || (is(dv) ? dv : '{#' + n + '}');\r
+               },\r
+\r
+               getParam : function(n, dv, ty) {\r
+                       var tr = tinymce.trim, v = is(this.settings[n]) ? this.settings[n] : dv, o;\r
+\r
+                       if (ty === 'hash') {\r
+                               o = {};\r
+\r
+                               if (is(v, 'string')) {\r
+                                       each(v.indexOf('=') > 0 ? v.split(/[;,](?![^=;,]*(?:[;,]|$))/) : v.split(','), function(v) {\r
+                                               v = v.split('=');\r
+\r
+                                               if (v.length > 1)\r
+                                                       o[tr(v[0])] = tr(v[1]);\r
+                                               else\r
+                                                       o[tr(v[0])] = tr(v);\r
+                                       });\r
+                               } else\r
+                                       o = v;\r
+\r
+                               return o;\r
+                       }\r
+\r
+                       return v;\r
+               },\r
+\r
+               nodeChanged : function(o) {\r
+                       var t = this, s = t.selection, n = (isIE ? s.getNode() : s.getStart()) || t.getBody();\r
+\r
+                       // Fix for bug #1896577 it seems that this can not be fired while the editor is loading\r
+                       if (t.initialized) {\r
+                               o = o || {};\r
+                               n = isIE && n.ownerDocument != t.getDoc() ? t.getBody() : n; // Fix for IE initial state\r
+\r
+                               // Get parents and add them to object\r
+                               o.parents = [];\r
+                               t.dom.getParent(n, function(node) {\r
+                                       if (node.nodeName == 'BODY')\r
+                                               return true;\r
+\r
+                                       o.parents.push(node);\r
+                               });\r
+\r
+                               t.onNodeChange.dispatch(\r
+                                       t,\r
+                                       o ? o.controlManager || t.controlManager : t.controlManager,\r
+                                       n,\r
+                                       s.isCollapsed(),\r
+                                       o\r
+                               );\r
+                       }\r
+               },\r
+\r
+               addButton : function(n, s) {\r
+                       var t = this;\r
+\r
+                       t.buttons = t.buttons || {};\r
+                       t.buttons[n] = s;\r
+               },\r
+\r
+               addCommand : function(n, f, s) {\r
+                       this.execCommands[n] = {func : f, scope : s || this};\r
+               },\r
+\r
+               addQueryStateHandler : function(n, f, s) {\r
+                       this.queryStateCommands[n] = {func : f, scope : s || this};\r
+               },\r
+\r
+               addQueryValueHandler : function(n, f, s) {\r
+                       this.queryValueCommands[n] = {func : f, scope : s || this};\r
+               },\r
+\r
+               addShortcut : function(pa, desc, cmd_func, sc) {\r
+                       var t = this, c;\r
+\r
+                       if (!t.settings.custom_shortcuts)\r
+                               return false;\r
+\r
+                       t.shortcuts = t.shortcuts || {};\r
+\r
+                       if (is(cmd_func, 'string')) {\r
+                               c = cmd_func;\r
+\r
+                               cmd_func = function() {\r
+                                       t.execCommand(c, false, null);\r
+                               };\r
+                       }\r
+\r
+                       if (is(cmd_func, 'object')) {\r
+                               c = cmd_func;\r
+\r
+                               cmd_func = function() {\r
+                                       t.execCommand(c[0], c[1], c[2]);\r
+                               };\r
+                       }\r
+\r
+                       each(explode(pa), function(pa) {\r
+                               var o = {\r
+                                       func : cmd_func,\r
+                                       scope : sc || this,\r
+                                       desc : desc,\r
+                                       alt : false,\r
+                                       ctrl : false,\r
+                                       shift : false\r
+                               };\r
+\r
+                               each(explode(pa, '+'), function(v) {\r
+                                       switch (v) {\r
+                                               case 'alt':\r
+                                               case 'ctrl':\r
+                                               case 'shift':\r
+                                                       o[v] = true;\r
+                                                       break;\r
+\r
+                                               default:\r
+                                                       o.charCode = v.charCodeAt(0);\r
+                                                       o.keyCode = v.toUpperCase().charCodeAt(0);\r
+                                       }\r
+                               });\r
+\r
+                               t.shortcuts[(o.ctrl ? 'ctrl' : '') + ',' + (o.alt ? 'alt' : '') + ',' + (o.shift ? 'shift' : '') + ',' + o.keyCode] = o;\r
+                       });\r
+\r
+                       return true;\r
+               },\r
+\r
+               execCommand : function(cmd, ui, val, a) {\r
+                       var t = this, s = 0, o, st;\r
+\r
+                       if (!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd) && (!a || !a.skip_focus))\r
+                               t.focus();\r
+\r
+                       o = {};\r
+                       t.onBeforeExecCommand.dispatch(t, cmd, ui, val, o);\r
+                       if (o.terminate)\r
+                               return false;\r
+\r
+                       // Command callback\r
+                       if (t.execCallback('execcommand_callback', t.id, t.selection.getNode(), cmd, ui, val)) {\r
+                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+                               return true;\r
+                       }\r
+\r
+                       // Registred commands\r
+                       if (o = t.execCommands[cmd]) {\r
+                               st = o.func.call(o.scope, ui, val);\r
+\r
+                               // Fall through on true\r
+                               if (st !== true) {\r
+                                       t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+                                       return st;\r
+                               }\r
+                       }\r
+\r
+                       // Plugin commands\r
+                       each(t.plugins, function(p) {\r
+                               if (p.execCommand && p.execCommand(cmd, ui, val)) {\r
+                                       t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+                                       s = 1;\r
+                                       return false;\r
+                               }\r
+                       });\r
+\r
+                       if (s)\r
+                               return true;\r
+\r
+                       // Theme commands\r
+                       if (t.theme && t.theme.execCommand && t.theme.execCommand(cmd, ui, val)) {\r
+                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+                               return true;\r
+                       }\r
+\r
+                       // Execute global commands\r
+                       if (tinymce.GlobalCommands.execCommand(t, cmd, ui, val)) {\r
+                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+                               return true;\r
+                       }\r
+\r
+                       // Editor commands\r
+                       if (t.editorCommands.execCommand(cmd, ui, val)) {\r
+                               t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+                               return true;\r
+                       }\r
+\r
+                       // Browser commands\r
+                       t.getDoc().execCommand(cmd, ui, val);\r
+                       t.onExecCommand.dispatch(t, cmd, ui, val, a);\r
+               },\r
+\r
+               queryCommandState : function(cmd) {\r
+                       var t = this, o, s;\r
+\r
+                       // Is hidden then return undefined\r
+                       if (t._isHidden())\r
+                               return;\r
+\r
+                       // Registred commands\r
+                       if (o = t.queryStateCommands[cmd]) {\r
+                               s = o.func.call(o.scope);\r
+\r
+                               // Fall though on true\r
+                               if (s !== true)\r
+                                       return s;\r
+                       }\r
+\r
+                       // Registred commands\r
+                       o = t.editorCommands.queryCommandState(cmd);\r
+                       if (o !== -1)\r
+                               return o;\r
+\r
+                       // Browser commands\r
+                       try {\r
+                               return this.getDoc().queryCommandState(cmd);\r
+                       } catch (ex) {\r
+                               // Fails sometimes see bug: 1896577\r
+                       }\r
+               },\r
+\r
+               queryCommandValue : function(c) {\r
+                       var t = this, o, s;\r
+\r
+                       // Is hidden then return undefined\r
+                       if (t._isHidden())\r
+                               return;\r
+\r
+                       // Registred commands\r
+                       if (o = t.queryValueCommands[c]) {\r
+                               s = o.func.call(o.scope);\r
+\r
+                               // Fall though on true\r
+                               if (s !== true)\r
+                                       return s;\r
+                       }\r
+\r
+                       // Registred commands\r
+                       o = t.editorCommands.queryCommandValue(c);\r
+                       if (is(o))\r
+                               return o;\r
+\r
+                       // Browser commands\r
+                       try {\r
+                               return this.getDoc().queryCommandValue(c);\r
+                       } catch (ex) {\r
+                               // Fails sometimes see bug: 1896577\r
+                       }\r
+               },\r
+\r
+               show : function() {\r
+                       var t = this;\r
+\r
+                       DOM.show(t.getContainer());\r
+                       DOM.hide(t.id);\r
+                       t.load();\r
+               },\r
+\r
+               hide : function() {\r
+                       var t = this, d = t.getDoc();\r
+\r
+                       // Fixed bug where IE has a blinking cursor left from the editor\r
+                       if (isIE && d)\r
+                               d.execCommand('SelectAll');\r
+\r
+                       // We must save before we hide so Safari doesn't crash\r
+                       t.save();\r
+                       DOM.hide(t.getContainer());\r
+                       DOM.setStyle(t.id, 'display', t.orgDisplay);\r
+               },\r
+\r
+               isHidden : function() {\r
+                       return !DOM.isHidden(this.id);\r
+               },\r
+\r
+               setProgressState : function(b, ti, o) {\r
+                       this.onSetProgressState.dispatch(this, b, ti, o);\r
+\r
+                       return b;\r
+               },\r
+\r
+               load : function(o) {\r
+                       var t = this, e = t.getElement(), h;\r
+\r
+                       if (e) {\r
+                               o = o || {};\r
+                               o.load = true;\r
+\r
+                               // Double encode existing entities in the value\r
+                               h = t.setContent(is(e.value) ? e.value : e.innerHTML, o);\r
+                               o.element = e;\r
+\r
+                               if (!o.no_events)\r
+                                       t.onLoadContent.dispatch(t, o);\r
+\r
+                               o.element = e = null;\r
+\r
+                               return h;\r
+                       }\r
+               },\r
+\r
+               save : function(o) {\r
+                       var t = this, e = t.getElement(), h, f;\r
+\r
+                       if (!e || !t.initialized)\r
+                               return;\r
+\r
+                       o = o || {};\r
+                       o.save = true;\r
+\r
+                       // Add undo level will trigger onchange event\r
+                       if (!o.no_events) {\r
+                               t.undoManager.typing = 0;\r
+                               t.undoManager.add();\r
+                       }\r
+\r
+                       o.element = e;\r
+                       h = o.content = t.getContent(o);\r
+\r
+                       if (!o.no_events)\r
+                               t.onSaveContent.dispatch(t, o);\r
+\r
+                       h = o.content;\r
+\r
+                       if (!/TEXTAREA|INPUT/i.test(e.nodeName)) {\r
+                               e.innerHTML = h;\r
+\r
+                               // Update hidden form element\r
+                               if (f = DOM.getParent(t.id, 'form')) {\r
+                                       each(f.elements, function(e) {\r
+                                               if (e.name == t.id) {\r
+                                                       e.value = h;\r
+                                                       return false;\r
+                                               }\r
+                                       });\r
+                               }\r
+                       } else\r
+                               e.value = h;\r
+\r
+                       o.element = e = null;\r
+\r
+                       return h;\r
+               },\r
+\r
+               setContent : function(h, o) {\r
+                       var t = this;\r
+\r
+                       o = o || {};\r
+                       o.format = o.format || 'html';\r
+                       o.set = true;\r
+                       o.content = h;\r
+\r
+                       if (!o.no_events)\r
+                               t.onBeforeSetContent.dispatch(t, o);\r
+\r
+                       // Padd empty content in Gecko and Safari. Commands will otherwise fail on the content\r
+                       // It will also be impossible to place the caret in the editor unless there is a BR element present\r
+                       if (!tinymce.isIE && (h.length === 0 || /^\s+$/.test(h))) {\r
+                               o.content = t.dom.setHTML(t.getBody(), '<br _mce_bogus="1" />');\r
+                               o.format = 'raw';\r
+                       }\r
+\r
+                       o.content = t.dom.setHTML(t.getBody(), tinymce.trim(o.content));\r
+\r
+                       if (o.format != 'raw' && t.settings.cleanup) {\r
+                               o.getInner = true;\r
+                               o.content = t.dom.setHTML(t.getBody(), t.serializer.serialize(t.getBody(), o));\r
+                       }\r
+\r
+                       if (!o.no_events)\r
+                               t.onSetContent.dispatch(t, o);\r
+\r
+                       return o.content;\r
+               },\r
+\r
+               getContent : function(o) {\r
+                       var t = this, h;\r
+\r
+                       o = o || {};\r
+                       o.format = o.format || 'html';\r
+                       o.get = true;\r
+\r
+                       if (!o.no_events)\r
+                               t.onBeforeGetContent.dispatch(t, o);\r
+\r
+                       if (o.format != 'raw' && t.settings.cleanup) {\r
+                               o.getInner = true;\r
+                               h = t.serializer.serialize(t.getBody(), o);\r
+                       } else\r
+                               h = t.getBody().innerHTML;\r
+\r
+                       h = h.replace(/^\s*|\s*$/g, '');\r
+                       o.content = h;\r
+\r
+                       if (!o.no_events)\r
+                               t.onGetContent.dispatch(t, o);\r
+\r
+                       return o.content;\r
+               },\r
+\r
+               isDirty : function() {\r
+                       var t = this;\r
+\r
+                       return tinymce.trim(t.startContent) != tinymce.trim(t.getContent({format : 'raw', no_events : 1})) && !t.isNotDirty;\r
+               },\r
+\r
+               getContainer : function() {\r
+                       var t = this;\r
+\r
+                       if (!t.container)\r
+                               t.container = DOM.get(t.editorContainer || t.id + '_parent');\r
+\r
+                       return t.container;\r
+               },\r
+\r
+               getContentAreaContainer : function() {\r
+                       return this.contentAreaContainer;\r
+               },\r
+\r
+               getElement : function() {\r
+                       return DOM.get(this.settings.content_element || this.id);\r
+               },\r
+\r
+               getWin : function() {\r
+                       var t = this, e;\r
+\r
+                       if (!t.contentWindow) {\r
+                               e = DOM.get(t.id + "_ifr");\r
+\r
+                               if (e)\r
+                                       t.contentWindow = e.contentWindow;\r
+                       }\r
+\r
+                       return t.contentWindow;\r
+               },\r
+\r
+               getDoc : function() {\r
+                       var t = this, w;\r
+\r
+                       if (!t.contentDocument) {\r
+                               w = t.getWin();\r
+\r
+                               if (w)\r
+                                       t.contentDocument = w.document;\r
+                       }\r
+\r
+                       return t.contentDocument;\r
+               },\r
+\r
+               getBody : function() {\r
+                       return this.bodyElement || this.getDoc().body;\r
+               },\r
+\r
+               convertURL : function(u, n, e) {\r
+                       var t = this, s = t.settings;\r
+\r
+                       // Use callback instead\r
+                       if (s.urlconverter_callback)\r
+                               return t.execCallback('urlconverter_callback', u, e, true, n);\r
+\r
+                       // Don't convert link href since thats the CSS files that gets loaded into the editor also skip local file URLs\r
+                       if (!s.convert_urls || (e && e.nodeName == 'LINK') || u.indexOf('file:') === 0)\r
+                               return u;\r
+\r
+                       // Convert to relative\r
+                       if (s.relative_urls)\r
+                               return t.documentBaseURI.toRelative(u);\r
+\r
+                       // Convert to absolute\r
+                       u = t.documentBaseURI.toAbsolute(u, s.remove_script_host);\r
+\r
+                       return u;\r
+               },\r
+\r
+               addVisual : function(e) {\r
+                       var t = this, s = t.settings;\r
+\r
+                       e = e || t.getBody();\r
+\r
+                       if (!is(t.hasVisual))\r
+                               t.hasVisual = s.visual;\r
+\r
+                       each(t.dom.select('table,a', e), function(e) {\r
+                               var v;\r
+\r
+                               switch (e.nodeName) {\r
+                                       case 'TABLE':\r
+                                               v = t.dom.getAttrib(e, 'border');\r
+\r
+                                               if (!v || v == '0') {\r
+                                                       if (t.hasVisual)\r
+                                                               t.dom.addClass(e, s.visual_table_class);\r
+                                                       else\r
+                                                               t.dom.removeClass(e, s.visual_table_class);\r
+                                               }\r
+\r
+                                               return;\r
+\r
+                                       case 'A':\r
+                                               v = t.dom.getAttrib(e, 'name');\r
+\r
+                                               if (v) {\r
+                                                       if (t.hasVisual)\r
+                                                               t.dom.addClass(e, 'mceItemAnchor');\r
+                                                       else\r
+                                                               t.dom.removeClass(e, 'mceItemAnchor');\r
+                                               }\r
+\r
+                                               return;\r
+                               }\r
+                       });\r
+\r
+                       t.onVisualAid.dispatch(t, e, t.hasVisual);\r
+               },\r
+\r
+               remove : function() {\r
+                       var t = this, e = t.getContainer();\r
+\r
+                       t.removed = 1; // Cancels post remove event execution\r
+                       t.hide();\r
+\r
+                       t.execCallback('remove_instance_callback', t);\r
+                       t.onRemove.dispatch(t);\r
+\r
+                       // Clear all execCommand listeners this is required to avoid errors if the editor was removed inside another command\r
+                       t.onExecCommand.listeners = [];\r
+\r
+                       tinymce.remove(t);\r
+                       DOM.remove(e);\r
+               },\r
+\r
+               destroy : function(s) {\r
+                       var t = this;\r
+\r
+                       // One time is enough\r
+                       if (t.destroyed)\r
+                               return;\r
+\r
+                       if (!s) {\r
+                               tinymce.removeUnload(t.destroy);\r
+                               tinyMCE.onBeforeUnload.remove(t._beforeUnload);\r
+\r
+                               // Manual destroy\r
+                               if (t.theme && t.theme.destroy)\r
+                                       t.theme.destroy();\r
+\r
+                               // Destroy controls, selection and dom\r
+                               t.controlManager.destroy();\r
+                               t.selection.destroy();\r
+                               t.dom.destroy();\r
+\r
+                               // Remove all events\r
+\r
+                               // Don't clear the window or document if content editable\r
+                               // is enabled since other instances might still be present\r
+                               if (!t.settings.content_editable) {\r
+                                       Event.clear(t.getWin());\r
+                                       Event.clear(t.getDoc());\r
+                               }\r
+\r
+                               Event.clear(t.getBody());\r
+                               Event.clear(t.formElement);\r
+                       }\r
+\r
+                       if (t.formElement) {\r
+                               t.formElement.submit = t.formElement._mceOldSubmit;\r
+                               t.formElement._mceOldSubmit = null;\r
+                       }\r
+\r
+                       t.contentAreaContainer = t.formElement = t.container = t.settings.content_element = t.bodyElement = t.contentDocument = t.contentWindow = null;\r
+\r
+                       if (t.selection)\r
+                               t.selection = t.selection.win = t.selection.dom = t.selection.dom.doc = null;\r
+\r
+                       t.destroyed = 1;\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _addEvents : function() {\r
+                       // 'focus', 'blur', 'dblclick', 'beforedeactivate', submit, reset\r
+                       var t = this, i, s = t.settings, lo = {\r
+                               mouseup : 'onMouseUp',\r
+                               mousedown : 'onMouseDown',\r
+                               click : 'onClick',\r
+                               keyup : 'onKeyUp',\r
+                               keydown : 'onKeyDown',\r
+                               keypress : 'onKeyPress',\r
+                               submit : 'onSubmit',\r
+                               reset : 'onReset',\r
+                               contextmenu : 'onContextMenu',\r
+                               dblclick : 'onDblClick',\r
+                               paste : 'onPaste' // Doesn't work in all browsers yet\r
+                       };\r
+\r
+                       function eventHandler(e, o) {\r
+                               var ty = e.type;\r
+\r
+                               // Don't fire events when it's removed\r
+                               if (t.removed)\r
+                                       return;\r
+\r
+                               // Generic event handler\r
+                               if (t.onEvent.dispatch(t, e, o) !== false) {\r
+                                       // Specific event handler\r
+                                       t[lo[e.fakeType || e.type]].dispatch(t, e, o);\r
+                               }\r
+                       };\r
+\r
+                       // Add DOM events\r
+                       each(lo, function(v, k) {\r
+                               switch (k) {\r
+                                       case 'contextmenu':\r
+                                               if (tinymce.isOpera) {\r
+                                                       // Fake contextmenu on Opera\r
+                                                       t.dom.bind(t.getBody(), 'mousedown', function(e) {\r
+                                                               if (e.ctrlKey) {\r
+                                                                       e.fakeType = 'contextmenu';\r
+                                                                       eventHandler(e);\r
+                                                               }\r
+                                                       });\r
+                                               } else\r
+                                                       t.dom.bind(t.getBody(), k, eventHandler);\r
+                                               break;\r
+\r
+                                       case 'paste':\r
+                                               t.dom.bind(t.getBody(), k, function(e) {\r
+                                                       eventHandler(e);\r
+                                               });\r
+                                               break;\r
+\r
+                                       case 'submit':\r
+                                       case 'reset':\r
+                                               t.dom.bind(t.getElement().form || DOM.getParent(t.id, 'form'), k, eventHandler);\r
+                                               break;\r
+\r
+                                       default:\r
+                                               t.dom.bind(s.content_editable ? t.getBody() : t.getDoc(), k, eventHandler);\r
+                               }\r
+                       });\r
+\r
+                       t.dom.bind(s.content_editable ? t.getBody() : (isGecko ? t.getDoc() : t.getWin()), 'focus', function(e) {\r
+                               t.focus(true);\r
+                       });\r
+\r
+\r
+                       // Fixes bug where a specified document_base_uri could result in broken images\r
+                       // This will also fix drag drop of images in Gecko\r
+                       if (tinymce.isGecko) {\r
+                               // Convert all images to absolute URLs\r
+/*                             t.onSetContent.add(function(ed, o) {\r
+                                       each(ed.dom.select('img'), function(e) {\r
+                                               var v;\r
+\r
+                                               if (v = e.getAttribute('_mce_src'))\r
+                                                       e.src = t.documentBaseURI.toAbsolute(v);\r
+                                       })\r
+                               });*/\r
+\r
+                               t.dom.bind(t.getDoc(), 'DOMNodeInserted', function(e) {\r
+                                       var v;\r
+\r
+                                       e = e.target;\r
+\r
+                                       if (e.nodeType === 1 && e.nodeName === 'IMG' && (v = e.getAttribute('_mce_src')))\r
+                                               e.src = t.documentBaseURI.toAbsolute(v);\r
+                               });\r
+                       }\r
+\r
+                       // Set various midas options in Gecko\r
+                       if (isGecko) {\r
+                               function setOpts() {\r
+                                       var t = this, d = t.getDoc(), s = t.settings;\r
+\r
+                                       if (isGecko && !s.readonly) {\r
+                                               if (t._isHidden()) {\r
+                                                       try {\r
+                                                               if (!s.content_editable)\r
+                                                                       d.designMode = 'On';\r
+                                                       } catch (ex) {\r
+                                                               // Fails if it's hidden\r
+                                                       }\r
+                                               }\r
+\r
+                                               try {\r
+                                                       // Try new Gecko method\r
+                                                       d.execCommand("styleWithCSS", 0, false);\r
+                                               } catch (ex) {\r
+                                                       // Use old method\r
+                                                       if (!t._isHidden())\r
+                                                               try {d.execCommand("useCSS", 0, true);} catch (ex) {}\r
+                                               }\r
+\r
+                                               if (!s.table_inline_editing)\r
+                                                       try {d.execCommand('enableInlineTableEditing', false, false);} catch (ex) {}\r
+\r
+                                               if (!s.object_resizing)\r
+                                                       try {d.execCommand('enableObjectResizing', false, false);} catch (ex) {}\r
+                                       }\r
+                               };\r
+\r
+                               t.onBeforeExecCommand.add(setOpts);\r
+                               t.onMouseDown.add(setOpts);\r
+                       }\r
+\r
+                       // Workaround for bug, http://bugs.webkit.org/show_bug.cgi?id=12250\r
+                       // WebKit can't even do simple things like selecting an image\r
+                       // This also fixes so it's possible to select mceItemAnchors\r
+                       if (tinymce.isWebKit) {\r
+                               t.onClick.add(function(ed, e) {\r
+                                       e = e.target;\r
+\r
+                                       // Needs tobe the setBaseAndExtend or it will fail to select floated images\r
+                                       if (e.nodeName == 'IMG' || (e.nodeName == 'A' && t.dom.hasClass(e, 'mceItemAnchor')))\r
+                                               t.selection.getSel().setBaseAndExtent(e, 0, e, 1);\r
+                               });\r
+                       }\r
+\r
+                       // Add node change handlers\r
+                       t.onMouseUp.add(t.nodeChanged);\r
+                       //t.onClick.add(t.nodeChanged);\r
+                       t.onKeyUp.add(function(ed, e) {\r
+                               var c = e.keyCode;\r
+\r
+                               if ((c >= 33 && c <= 36) || (c >= 37 && c <= 40) || c == 13 || c == 45 || c == 46 || c == 8 || (tinymce.isMac && (c == 91 || c == 93)) || e.ctrlKey)\r
+                                       t.nodeChanged();\r
+                       });\r
+\r
+                       // Add reset handler\r
+                       t.onReset.add(function() {\r
+                               t.setContent(t.startContent, {format : 'raw'});\r
+                       });\r
+\r
+                       // Add shortcuts\r
+                       if (s.custom_shortcuts) {\r
+                               if (s.custom_undo_redo_keyboard_shortcuts) {\r
+                                       t.addShortcut('ctrl+z', t.getLang('undo_desc'), 'Undo');\r
+                                       t.addShortcut('ctrl+y', t.getLang('redo_desc'), 'Redo');\r
+                               }\r
+\r
+                               // Add default shortcuts for gecko\r
+                               t.addShortcut('ctrl+b', t.getLang('bold_desc'), 'Bold');\r
+                               t.addShortcut('ctrl+i', t.getLang('italic_desc'), 'Italic');\r
+                               t.addShortcut('ctrl+u', t.getLang('underline_desc'), 'Underline');\r
+\r
+                               // BlockFormat shortcuts keys\r
+                               for (i=1; i<=6; i++)\r
+                                       t.addShortcut('ctrl+' + i, '', ['FormatBlock', false, 'h' + i]);\r
+\r
+                               t.addShortcut('ctrl+7', '', ['FormatBlock', false, '<p>']);\r
+                               t.addShortcut('ctrl+8', '', ['FormatBlock', false, '<div>']);\r
+                               t.addShortcut('ctrl+9', '', ['FormatBlock', false, '<address>']);\r
+\r
+                               function find(e) {\r
+                                       var v = null;\r
+\r
+                                       if (!e.altKey && !e.ctrlKey && !e.metaKey)\r
+                                               return v;\r
+\r
+                                       each(t.shortcuts, function(o) {\r
+                                               if (tinymce.isMac && o.ctrl != e.metaKey)\r
+                                                       return;\r
+                                               else if (!tinymce.isMac && o.ctrl != e.ctrlKey)\r
+                                                       return;\r
+\r
+                                               if (o.alt != e.altKey)\r
+                                                       return;\r
+\r
+                                               if (o.shift != e.shiftKey)\r
+                                                       return;\r
+\r
+                                               if (e.keyCode == o.keyCode || (e.charCode && e.charCode == o.charCode)) {\r
+                                                       v = o;\r
+                                                       return false;\r
+                                               }\r
+                                       });\r
+\r
+                                       return v;\r
+                               };\r
+\r
+                               t.onKeyUp.add(function(ed, e) {\r
+                                       var o = find(e);\r
+\r
+                                       if (o)\r
+                                               return Event.cancel(e);\r
+                               });\r
+\r
+                               t.onKeyPress.add(function(ed, e) {\r
+                                       var o = find(e);\r
+\r
+                                       if (o)\r
+                                               return Event.cancel(e);\r
+                               });\r
+\r
+                               t.onKeyDown.add(function(ed, e) {\r
+                                       var o = find(e);\r
+\r
+                                       if (o) {\r
+                                               o.func.call(o.scope);\r
+                                               return Event.cancel(e);\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       if (tinymce.isIE) {\r
+                               // Fix so resize will only update the width and height attributes not the styles of an image\r
+                               // It will also block mceItemNoResize items\r
+                               t.dom.bind(t.getDoc(), 'controlselect', function(e) {\r
+                                       var re = t.resizeInfo, cb;\r
+\r
+                                       e = e.target;\r
+\r
+                                       // Don't do this action for non image elements\r
+                                       if (e.nodeName !== 'IMG')\r
+                                               return;\r
+\r
+                                       if (re)\r
+                                               t.dom.unbind(re.node, re.ev, re.cb);\r
+\r
+                                       if (!t.dom.hasClass(e, 'mceItemNoResize')) {\r
+                                               ev = 'resizeend';\r
+                                               cb = t.dom.bind(e, ev, function(e) {\r
+                                                       var v;\r
+\r
+                                                       e = e.target;\r
+\r
+                                                       if (v = t.dom.getStyle(e, 'width')) {\r
+                                                               t.dom.setAttrib(e, 'width', v.replace(/[^0-9%]+/g, ''));\r
+                                                               t.dom.setStyle(e, 'width', '');\r
+                                                       }\r
+\r
+                                                       if (v = t.dom.getStyle(e, 'height')) {\r
+                                                               t.dom.setAttrib(e, 'height', v.replace(/[^0-9%]+/g, ''));\r
+                                                               t.dom.setStyle(e, 'height', '');\r
+                                                       }\r
+                                               });\r
+                                       } else {\r
+                                               ev = 'resizestart';\r
+                                               cb = t.dom.bind(e, 'resizestart', Event.cancel, Event);\r
+                                       }\r
+\r
+                                       re = t.resizeInfo = {\r
+                                               node : e,\r
+                                               ev : ev,\r
+                                               cb : cb\r
+                                       };\r
+                               });\r
+\r
+                               t.onKeyDown.add(function(ed, e) {\r
+                                       switch (e.keyCode) {\r
+                                               case 8:\r
+                                                       // Fix IE control + backspace browser bug\r
+                                                       if (t.selection.getRng().item) {\r
+                                                               ed.dom.remove(t.selection.getRng().item(0));\r
+                                                               return Event.cancel(e);\r
+                                                       }\r
+                                       }\r
+                               });\r
+\r
+                               /*if (t.dom.boxModel) {\r
+                                       t.getBody().style.height = '100%';\r
+\r
+                                       Event.add(t.getWin(), 'resize', function(e) {\r
+                                               var docElm = t.getDoc().documentElement;\r
+\r
+                                               docElm.style.height = (docElm.offsetHeight - 10) + 'px';\r
+                                       });\r
+                               }*/\r
+                       }\r
+\r
+                       if (tinymce.isOpera) {\r
+                               t.onClick.add(function(ed, e) {\r
+                                       Event.prevent(e);\r
+                               });\r
+                       }\r
+\r
+                       // Add custom undo/redo handlers\r
+                       if (s.custom_undo_redo) {\r
+                               function addUndo() {\r
+                                       t.undoManager.typing = 0;\r
+                                       t.undoManager.add();\r
+                               };\r
+\r
+                               t.dom.bind(t.getDoc(), 'focusout', function(e) {\r
+                                       if (!t.removed && t.undoManager.typing)\r
+                                               addUndo();\r
+                               });\r
+\r
+                               t.onKeyUp.add(function(ed, e) {\r
+                                       if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45 || e.ctrlKey)\r
+                                               addUndo();\r
+                               });\r
+\r
+                               t.onKeyDown.add(function(ed, e) {\r
+                                       var rng, parent, bookmark;\r
+\r
+                                       // IE has a really odd bug where the DOM might include an node that doesn't have\r
+                                       // a proper structure. If you try to access nodeValue it would throw an illegal value exception.\r
+                                       // This seems to only happen when you delete contents and it seems to be avoidable if you refresh the element\r
+                                       // after you delete contents from it. See: #3008923\r
+                                       if (isIE && e.keyCode == 46) {\r
+                                               rng = t.selection.getRng();\r
+\r
+                                               if (rng.parentElement) {\r
+                                                       parent = rng.parentElement();\r
+\r
+                                                       // Select next word when ctrl key is used in combo with delete\r
+                                                       if (e.ctrlKey) {\r
+                                                               rng.moveEnd('word', 1);\r
+                                                               rng.select();\r
+                                                       }\r
+\r
+                                                       // Delete contents\r
+                                                       t.selection.getSel().clear();\r
+\r
+                                                       // Check if we are within the same parent\r
+                                                       if (rng.parentElement() == parent) {\r
+                                                               bookmark = t.selection.getBookmark();\r
+\r
+                                                               try {\r
+                                                                       // Update the HTML and hopefully it will remove the artifacts\r
+                                                                       parent.innerHTML = parent.innerHTML;\r
+                                                               } catch (ex) {\r
+                                                                       // And since it's IE it can sometimes produce an unknown runtime error\r
+                                                               }\r
+\r
+                                                               // Restore the caret position\r
+                                                               t.selection.moveToBookmark(bookmark);\r
+                                                       }\r
+\r
+                                                       // Block the default delete behavior since it might be broken\r
+                                                       e.preventDefault();\r
+                                                       return;\r
+                                               }\r
+                                       }\r
+\r
+                                       // Is caracter positon keys\r
+                                       if ((e.keyCode >= 33 && e.keyCode <= 36) || (e.keyCode >= 37 && e.keyCode <= 40) || e.keyCode == 13 || e.keyCode == 45) {\r
+                                               if (t.undoManager.typing)\r
+                                                       addUndo();\r
+\r
+                                               return;\r
+                                       }\r
+\r
+                                       if (!t.undoManager.typing) {\r
+                                               t.undoManager.add();\r
+                                               t.undoManager.typing = 1;\r
+                                       }\r
+                               });\r
+\r
+                               t.onMouseDown.add(function() {\r
+                                       if (t.undoManager.typing)\r
+                                               addUndo();\r
+                               });\r
+                       }\r
+               },\r
+\r
+               _isHidden : function() {\r
+                       var s;\r
+\r
+                       if (!isGecko)\r
+                               return 0;\r
+\r
+                       // Weird, wheres that cursor selection?\r
+                       s = this.selection.getSel();\r
+                       return (!s || !s.rangeCount || s.rangeCount == 0);\r
+               },\r
+\r
+               // Fix for bug #1867292\r
+               _fixNesting : function(s) {\r
+                       var d = [], i;\r
+\r
+                       s = s.replace(/<(\/)?([^\s>]+)[^>]*?>/g, function(a, b, c) {\r
+                               var e;\r
+\r
+                               // Handle end element\r
+                               if (b === '/') {\r
+                                       if (!d.length)\r
+                                               return '';\r
+\r
+                                       if (c !== d[d.length - 1].tag) {\r
+                                               for (i=d.length - 1; i>=0; i--) {\r
+                                                       if (d[i].tag === c) {\r
+                                                               d[i].close = 1;\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+\r
+                                               return '';\r
+                                       } else {\r
+                                               d.pop();\r
+\r
+                                               if (d.length && d[d.length - 1].close) {\r
+                                                       a = a + '</' + d[d.length - 1].tag + '>';\r
+                                                       d.pop();\r
+                                               }\r
+                                       }\r
+                               } else {\r
+                                       // Ignore these\r
+                                       if (/^(br|hr|input|meta|img|link|param)$/i.test(c))\r
+                                               return a;\r
+\r
+                                       // Ignore closed ones\r
+                                       if (/\/>$/.test(a))\r
+                                               return a;\r
+\r
+                                       d.push({tag : c}); // Push start element\r
+                               }\r
+\r
+                               return a;\r
+                       });\r
+\r
+                       // End all open tags\r
+                       for (i=d.length - 1; i>=0; i--)\r
+                               s += '</' + d[i].tag + '>';\r
+\r
+                       return s;\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       // Added for compression purposes\r
+       var each = tinymce.each, undefined, TRUE = true, FALSE = false;\r
+\r
+       tinymce.EditorCommands = function(editor) {\r
+               var dom = editor.dom,\r
+                       selection = editor.selection,\r
+                       commands = {state: {}, exec : {}, value : {}},\r
+                       settings = editor.settings,\r
+                       bookmark;\r
+\r
+               function execCommand(command, ui, value) {\r
+                       var func;\r
+\r
+                       command = command.toLowerCase();\r
+                       if (func = commands.exec[command]) {\r
+                               func(command, ui, value);\r
+                               return TRUE;\r
+                       }\r
+\r
+                       return FALSE;\r
+               };\r
+\r
+               function queryCommandState(command) {\r
+                       var func;\r
+\r
+                       command = command.toLowerCase();\r
+                       if (func = commands.state[command])\r
+                               return func(command);\r
+\r
+                       return -1;\r
+               };\r
+\r
+               function queryCommandValue(command) {\r
+                       var func;\r
+\r
+                       command = command.toLowerCase();\r
+                       if (func = commands.value[command])\r
+                               return func(command);\r
+\r
+                       return FALSE;\r
+               };\r
+\r
+               function addCommands(command_list, type) {\r
+                       type = type || 'exec';\r
+\r
+                       each(command_list, function(callback, command) {\r
+                               each(command.toLowerCase().split(','), function(command) {\r
+                                       commands[type][command] = callback;\r
+                               });\r
+                       });\r
+               };\r
+\r
+               // Expose public methods\r
+               tinymce.extend(this, {\r
+                       execCommand : execCommand,\r
+                       queryCommandState : queryCommandState,\r
+                       queryCommandValue : queryCommandValue,\r
+                       addCommands : addCommands\r
+               });\r
+\r
+               // Private methods\r
+\r
+               function execNativeCommand(command, ui, value) {\r
+                       if (ui === undefined)\r
+                               ui = FALSE;\r
+\r
+                       if (value === undefined)\r
+                               value = null;\r
+\r
+                       return editor.getDoc().execCommand(command, ui, value);\r
+               };\r
+\r
+               function isFormatMatch(name) {\r
+                       return editor.formatter.match(name);\r
+               };\r
+\r
+               function toggleFormat(name, value) {\r
+                       editor.formatter.toggle(name, value ? {value : value} : undefined);\r
+               };\r
+\r
+               function storeSelection(type) {\r
+                       bookmark = selection.getBookmark(type);\r
+               };\r
+\r
+               function restoreSelection() {\r
+                       selection.moveToBookmark(bookmark);\r
+               };\r
+\r
+               // Add execCommand overrides\r
+               addCommands({\r
+                       // Ignore these, added for compatibility\r
+                       'mceResetDesignMode,mceBeginUndoLevel' : function() {},\r
+\r
+                       // Add undo manager logic\r
+                       'mceEndUndoLevel,mceAddUndoLevel' : function() {\r
+                               editor.undoManager.add();\r
+                       },\r
+\r
+                       'Cut,Copy,Paste' : function(command) {\r
+                               var doc = editor.getDoc(), failed;\r
+\r
+                               // Try executing the native command\r
+                               try {\r
+                                       execNativeCommand(command);\r
+                               } catch (ex) {\r
+                                       // Command failed\r
+                                       failed = TRUE;\r
+                               }\r
+\r
+                               // Present alert message about clipboard access not being available\r
+                               if (failed || !doc.queryCommandSupported(command)) {\r
+                                       if (tinymce.isGecko) {\r
+                                               editor.windowManager.confirm(editor.getLang('clipboard_msg'), function(state) {\r
+                                                       if (state)\r
+                                                               open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', '_blank');\r
+                                               });\r
+                                       } else\r
+                                               editor.windowManager.alert(editor.getLang('clipboard_no_support'));\r
+                               }\r
+                       },\r
+\r
+                       // Override unlink command\r
+                       unlink : function(command) {\r
+                               if (selection.isCollapsed())\r
+                                       selection.select(selection.getNode());\r
+\r
+                               execNativeCommand(command);\r
+                               selection.collapse(FALSE);\r
+                       },\r
+\r
+                       // Override justify commands to use the text formatter engine\r
+                       'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {\r
+                               var align = command.substring(7);\r
+\r
+                               // Remove all other alignments first\r
+                               each('left,center,right,full'.split(','), function(name) {\r
+                                       if (align != name)\r
+                                               editor.formatter.remove('align' + name);\r
+                               });\r
+\r
+                               toggleFormat('align' + align);\r
+                       },\r
+\r
+                       // Override list commands to fix WebKit bug\r
+                       'InsertUnorderedList,InsertOrderedList' : function(command) {\r
+                               var listElm, listParent;\r
+\r
+                               execNativeCommand(command);\r
+\r
+                               // WebKit produces lists within block elements so we need to split them\r
+                               // we will replace the native list creation logic to custom logic later on\r
+                               // TODO: Remove this when the list creation logic is removed\r
+                               listElm = dom.getParent(selection.getNode(), 'ol,ul');\r
+                               if (listElm) {\r
+                                       listParent = listElm.parentNode;\r
+\r
+                                       // If list is within a text block then split that block\r
+                                       if (/^(H[1-6]|P|ADDRESS|PRE)$/.test(listParent.nodeName)) {\r
+                                               storeSelection();\r
+                                               dom.split(listParent, listElm);\r
+                                               restoreSelection();\r
+                                       }\r
+                               }\r
+                       },\r
+\r
+                       // Override commands to use the text formatter engine\r
+                       'Bold,Italic,Underline,Strikethrough' : function(command) {\r
+                               toggleFormat(command);\r
+                       },\r
+\r
+                       // Override commands to use the text formatter engine\r
+                       'ForeColor,HiliteColor,FontName' : function(command, ui, value) {\r
+                               toggleFormat(command, value);\r
+                       },\r
+\r
+                       FontSize : function(command, ui, value) {\r
+                               var fontClasses, fontSizes;\r
+\r
+                               // Convert font size 1-7 to styles\r
+                               if (value >= 1 && value <= 7) {\r
+                                       fontSizes = tinymce.explode(settings.font_size_style_values);\r
+                                       fontClasses = tinymce.explode(settings.font_size_classes);\r
+\r
+                                       if (fontClasses)\r
+                                               value = fontClasses[value - 1] || value;\r
+                                       else\r
+                                               value = fontSizes[value - 1] || value;\r
+                               }\r
+\r
+                               toggleFormat(command, value);\r
+                       },\r
+\r
+                       RemoveFormat : function(command) {\r
+                               editor.formatter.remove(command);\r
+                       },\r
+\r
+                       mceBlockQuote : function(command) {\r
+                               toggleFormat('blockquote');\r
+                       },\r
+\r
+                       FormatBlock : function(command, ui, value) {\r
+                               return toggleFormat(value || 'p');\r
+                       },\r
+\r
+                       mceCleanup : function() {\r
+                               var bookmark = selection.getBookmark();\r
+\r
+                               editor.setContent(editor.getContent({cleanup : TRUE}), {cleanup : TRUE});\r
+\r
+                               selection.moveToBookmark(bookmark);\r
+                       },\r
+\r
+                       mceRemoveNode : function(command, ui, value) {\r
+                               var node = value || selection.getNode();\r
+\r
+                               // Make sure that the body node isn't removed\r
+                               if (node != editor.getBody()) {\r
+                                       storeSelection();\r
+                                       editor.dom.remove(node, TRUE);\r
+                                       restoreSelection();\r
+                               }\r
+                       },\r
+\r
+                       mceSelectNodeDepth : function(command, ui, value) {\r
+                               var counter = 0;\r
+\r
+                               dom.getParent(selection.getNode(), function(node) {\r
+                                       if (node.nodeType == 1 && counter++ == value) {\r
+                                               selection.select(node);\r
+                                               return FALSE;\r
+                                       }\r
+                               }, editor.getBody());\r
+                       },\r
+\r
+                       mceSelectNode : function(command, ui, value) {\r
+                               selection.select(value);\r
+                       },\r
+\r
+                       mceInsertContent : function(command, ui, value) {\r
+                               selection.setContent(value);\r
+                       },\r
+\r
+                       mceInsertRawHTML : function(command, ui, value) {\r
+                               selection.setContent('tiny_mce_marker');\r
+                               editor.setContent(editor.getContent().replace(/tiny_mce_marker/g, value));\r
+                       },\r
+\r
+                       mceSetContent : function(command, ui, value) {\r
+                               editor.setContent(value);\r
+                       },\r
+\r
+                       'Indent,Outdent' : function(command) {\r
+                               var intentValue, indentUnit, value;\r
+\r
+                               // Setup indent level\r
+                               intentValue = settings.indentation;\r
+                               indentUnit = /[a-z%]+$/i.exec(intentValue);\r
+                               intentValue = parseInt(intentValue);\r
+\r
+                               if (!queryCommandState('InsertUnorderedList') && !queryCommandState('InsertOrderedList')) {\r
+                                       each(selection.getSelectedBlocks(), function(element) {\r
+                                               if (command == 'outdent') {\r
+                                                       value = Math.max(0, parseInt(element.style.paddingLeft || 0) - intentValue);\r
+                                                       dom.setStyle(element, 'paddingLeft', value ? value + indentUnit : '');\r
+                                               } else\r
+                                                       dom.setStyle(element, 'paddingLeft', (parseInt(element.style.paddingLeft || 0) + intentValue) + indentUnit);\r
+                                       });\r
+                               } else\r
+                                       execNativeCommand(command);\r
+                       },\r
+\r
+                       mceRepaint : function() {\r
+                               var bookmark;\r
+\r
+                               if (tinymce.isGecko) {\r
+                                       try {\r
+                                               storeSelection(TRUE);\r
+\r
+                                               if (selection.getSel())\r
+                                                       selection.getSel().selectAllChildren(editor.getBody());\r
+\r
+                                               selection.collapse(TRUE);\r
+                                               restoreSelection();\r
+                                       } catch (ex) {\r
+                                               // Ignore\r
+                                       }\r
+                               }\r
+                       },\r
+\r
+                       mceToggleFormat : function(command, ui, value) {\r
+                               editor.formatter.toggle(value);\r
+                       },\r
+\r
+                       InsertHorizontalRule : function() {\r
+                               selection.setContent('<hr />');\r
+                       },\r
+\r
+                       mceToggleVisualAid : function() {\r
+                               editor.hasVisual = !editor.hasVisual;\r
+                               editor.addVisual();\r
+                       },\r
+\r
+                       mceReplaceContent : function(command, ui, value) {\r
+                               selection.setContent(value.replace(/\{\$selection\}/g, selection.getContent({format : 'text'})));\r
+                       },\r
+\r
+                       mceInsertLink : function(command, ui, value) {\r
+                               var link = dom.getParent(selection.getNode(), 'a');\r
+\r
+                               if (tinymce.is(value, 'string'))\r
+                                       value = {href : value};\r
+\r
+                               if (!link) {\r
+                                       execNativeCommand('CreateLink', FALSE, 'javascript:mctmp(0);');\r
+                                       each(dom.select('a[href=javascript:mctmp(0);]'), function(link) {\r
+                                               dom.setAttribs(link, value);\r
+                                       });\r
+                               } else {\r
+                                       if (value.href)\r
+                                               dom.setAttribs(link, value);\r
+                                       else\r
+                                               editor.dom.remove(link, TRUE);\r
+                               }\r
+                       },\r
+                       \r
+                       selectAll : function() {\r
+                               var root = dom.getRoot(), rng = dom.createRng();\r
+\r
+                               rng.setStart(root, 0);\r
+                               rng.setEnd(root, root.childNodes.length);\r
+\r
+                               editor.selection.setRng(rng);\r
+                       }\r
+               });\r
+\r
+               // Add queryCommandState overrides\r
+               addCommands({\r
+                       // Override justify commands\r
+                       'JustifyLeft,JustifyCenter,JustifyRight,JustifyFull' : function(command) {\r
+                               return isFormatMatch('align' + command.substring(7));\r
+                       },\r
+\r
+                       'Bold,Italic,Underline,Strikethrough' : function(command) {\r
+                               return isFormatMatch(command);\r
+                       },\r
+\r
+                       mceBlockQuote : function() {\r
+                               return isFormatMatch('blockquote');\r
+                       },\r
+\r
+                       Outdent : function() {\r
+                               var node;\r
+\r
+                               if (settings.inline_styles) {\r
+                                       if ((node = dom.getParent(selection.getStart(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)\r
+                                               return TRUE;\r
+\r
+                                       if ((node = dom.getParent(selection.getEnd(), dom.isBlock)) && parseInt(node.style.paddingLeft) > 0)\r
+                                               return TRUE;\r
+                               }\r
+\r
+                               return queryCommandState('InsertUnorderedList') || queryCommandState('InsertOrderedList') || (!settings.inline_styles && !!dom.getParent(selection.getNode(), 'BLOCKQUOTE'));\r
+                       },\r
+\r
+                       'InsertUnorderedList,InsertOrderedList' : function(command) {\r
+                               return dom.getParent(selection.getNode(), command == 'insertunorderedlist' ? 'UL' : 'OL');\r
+                       }\r
+               }, 'state');\r
+\r
+               // Add queryCommandValue overrides\r
+               addCommands({\r
+                       'FontSize,FontName' : function(command) {\r
+                               var value = 0, parent;\r
+\r
+                               if (parent = dom.getParent(selection.getNode(), 'span')) {\r
+                                       if (command == 'fontsize')\r
+                                               value = parent.style.fontSize;\r
+                                       else\r
+                                               value = parent.style.fontFamily.replace(/, /g, ',').replace(/[\'\"]/g, '').toLowerCase();\r
+                               }\r
+\r
+                               return value;\r
+                       }\r
+               }, 'value');\r
+\r
+               // Add undo manager logic\r
+               if (settings.custom_undo_redo) {\r
+                       addCommands({\r
+                               Undo : function() {\r
+                                       editor.undoManager.undo();\r
+                               },\r
+\r
+                               Redo : function() {\r
+                                       editor.undoManager.redo();\r
+                               }\r
+                       });\r
+               }\r
+       };\r
+})(tinymce);\r
+(function(tinymce) {\r
+       var Dispatcher = tinymce.util.Dispatcher;\r
+\r
+       tinymce.UndoManager = function(editor) {\r
+               var self, index = 0, data = [];\r
+\r
+               function getContent() {\r
+                       return tinymce.trim(editor.getContent({format : 'raw', no_events : 1}));\r
+               };\r
+\r
+               return self = {\r
+                       typing : 0,\r
+\r
+                       onAdd : new Dispatcher(self),\r
+                       onUndo : new Dispatcher(self),\r
+                       onRedo : new Dispatcher(self),\r
+\r
+                       add : function(level) {\r
+                               var i, settings = editor.settings, lastLevel;\r
+\r
+                               level = level || {};\r
+                               level.content = getContent();\r
+\r
+                               // Add undo level if needed\r
+                               lastLevel = data[index];\r
+                               if (lastLevel && lastLevel.content == level.content) {\r
+                                       if (index > 0 || data.length == 1)\r
+                                               return null;\r
+                               }\r
+\r
+                               // Time to compress\r
+                               if (settings.custom_undo_redo_levels) {\r
+                                       if (data.length > settings.custom_undo_redo_levels) {\r
+                                               for (i = 0; i < data.length - 1; i++)\r
+                                                       data[i] = data[i + 1];\r
+\r
+                                               data.length--;\r
+                                               index = data.length;\r
+                                       }\r
+                               }\r
+\r
+                               // Get a non intrusive normalized bookmark\r
+                               level.bookmark = editor.selection.getBookmark(2, true);\r
+\r
+                               // Crop array if needed\r
+                               if (index < data.length - 1) {\r
+                                       // Treat first level as initial\r
+                                       if (index == 0)\r
+                                               data = [];\r
+                                       else\r
+                                               data.length = index + 1;\r
+                               }\r
+\r
+                               data.push(level);\r
+                               index = data.length - 1;\r
+\r
+                               self.onAdd.dispatch(self, level);\r
+                               editor.isNotDirty = 0;\r
+\r
+                               return level;\r
+                       },\r
+\r
+                       undo : function() {\r
+                               var level, i;\r
+\r
+                               if (self.typing) {\r
+                                       self.add();\r
+                                       self.typing = 0;\r
+                               }\r
+\r
+                               if (index > 0) {\r
+                                       level = data[--index];\r
+\r
+                                       editor.setContent(level.content, {format : 'raw'});\r
+                                       editor.selection.moveToBookmark(level.bookmark);\r
+\r
+                                       self.onUndo.dispatch(self, level);\r
+                               }\r
+\r
+                               return level;\r
+                       },\r
+\r
+                       redo : function() {\r
+                               var level;\r
+\r
+                               if (index < data.length - 1) {\r
+                                       level = data[++index];\r
+\r
+                                       editor.setContent(level.content, {format : 'raw'});\r
+                                       editor.selection.moveToBookmark(level.bookmark);\r
+\r
+                                       self.onRedo.dispatch(self, level);\r
+                               }\r
+\r
+                               return level;\r
+                       },\r
+\r
+                       clear : function() {\r
+                               data = [];\r
+                               index = self.typing = 0;\r
+                       },\r
+\r
+                       hasUndo : function() {\r
+                               return index > 0 || self.typing;\r
+                       },\r
+\r
+                       hasRedo : function() {\r
+                               return index < data.length - 1;\r
+                       }\r
+               };\r
+       };\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       // Shorten names\r
+       var Event = tinymce.dom.Event,\r
+               isIE = tinymce.isIE,\r
+               isGecko = tinymce.isGecko,\r
+               isOpera = tinymce.isOpera,\r
+               each = tinymce.each,\r
+               extend = tinymce.extend,\r
+               TRUE = true,\r
+               FALSE = false;\r
+\r
+       function cloneFormats(node) {\r
+               var clone, temp, inner;\r
+\r
+               do {\r
+                       if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(node.nodeName)) {\r
+                               if (clone) {\r
+                                       temp = node.cloneNode(false);\r
+                                       temp.appendChild(clone);\r
+                                       clone = temp;\r
+                               } else {\r
+                                       clone = inner = node.cloneNode(false);\r
+                               }\r
+\r
+                               clone.removeAttribute('id');\r
+                       }\r
+               } while (node = node.parentNode);\r
+\r
+               if (clone)\r
+                       return {wrapper : clone, inner : inner};\r
+       };\r
+\r
+       // Checks if the selection/caret is at the end of the specified block element\r
+       function isAtEnd(rng, par) {\r
+               var rng2 = par.ownerDocument.createRange();\r
+\r
+               rng2.setStart(rng.endContainer, rng.endOffset);\r
+               rng2.setEndAfter(par);\r
+\r
+               // Get number of characters to the right of the cursor if it's zero then we are at the end and need to merge the next block element\r
+               return rng2.cloneContents().textContent.length == 0;\r
+       };\r
+\r
+       function isEmpty(n) {\r
+               n = n.innerHTML;\r
+\r
+               n = n.replace(/<(img|hr|table|input|select|textarea)[ \>]/gi, '-'); // Keep these convert them to - chars\r
+               n = n.replace(/<[^>]+>/g, ''); // Remove all tags\r
+\r
+               return n.replace(/[ \u00a0\t\r\n]+/g, '') == '';\r
+       };\r
+\r
+       function splitList(selection, dom, li) {\r
+               var listBlock, block;\r
+\r
+               if (isEmpty(li)) {\r
+                       listBlock = dom.getParent(li, 'ul,ol');\r
+\r
+                       if (!dom.getParent(listBlock.parentNode, 'ul,ol')) {\r
+                               dom.split(listBlock, li);\r
+                               block = dom.create('p', 0, '<br _mce_bogus="1" />');\r
+                               dom.replace(block, li);\r
+                               selection.select(block, 1);\r
+                       }\r
+\r
+                       return FALSE;\r
+               }\r
+\r
+               return TRUE;\r
+       };\r
+\r
+       tinymce.create('tinymce.ForceBlocks', {\r
+               ForceBlocks : function(ed) {\r
+                       var t = this, s = ed.settings, elm;\r
+\r
+                       t.editor = ed;\r
+                       t.dom = ed.dom;\r
+                       elm = (s.forced_root_block || 'p').toLowerCase();\r
+                       s.element = elm.toUpperCase();\r
+\r
+                       ed.onPreInit.add(t.setup, t);\r
+\r
+                       t.reOpera = new RegExp('(\\u00a0|&#160;|&nbsp;)<\/' + elm + '>', 'gi');\r
+                       t.rePadd = new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g, elm), 'gi');\r
+                       t.reNbsp2BR1 = new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g, elm), 'gi');\r
+                       t.reNbsp2BR2 = new RegExp('<%p()([^>]+)>(&nbsp;|&#160;)<\\\/%p>|<%p>(&nbsp;|&#160;)<\\\/%p>'.replace(/%p/g, elm), 'gi');\r
+                       t.reBR2Nbsp = new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g, elm), 'gi');\r
+\r
+                       function padd(ed, o) {\r
+                               if (isOpera)\r
+                                       o.content = o.content.replace(t.reOpera, '</' + elm + '>');\r
+\r
+                               o.content = o.content.replace(t.rePadd, '<' + elm + '$1$2$3$4$5$6>\u00a0</' + elm + '>');\r
+\r
+                               if (!isIE && !isOpera && o.set) {\r
+                                       // Use &nbsp; instead of BR in padded paragraphs\r
+                                       o.content = o.content.replace(t.reNbsp2BR1, '<' + elm + '$1$2><br /></' + elm + '>');\r
+                                       o.content = o.content.replace(t.reNbsp2BR2, '<' + elm + '$1$2><br /></' + elm + '>');\r
+                               } else\r
+                                       o.content = o.content.replace(t.reBR2Nbsp, '<' + elm + '$1$2>\u00a0</' + elm + '>');\r
+                       };\r
+\r
+                       ed.onBeforeSetContent.add(padd);\r
+                       ed.onPostProcess.add(padd);\r
+\r
+                       if (s.forced_root_block) {\r
+                               ed.onInit.add(t.forceRoots, t);\r
+                               ed.onSetContent.add(t.forceRoots, t);\r
+                               ed.onBeforeGetContent.add(t.forceRoots, t);\r
+                       }\r
+               },\r
+\r
+               setup : function() {\r
+                       var t = this, ed = t.editor, s = ed.settings, dom = ed.dom, selection = ed.selection;\r
+\r
+                       // Force root blocks when typing and when getting output\r
+                       if (s.forced_root_block) {\r
+                               ed.onBeforeExecCommand.add(t.forceRoots, t);\r
+                               ed.onKeyUp.add(t.forceRoots, t);\r
+                               ed.onPreProcess.add(t.forceRoots, t);\r
+                       }\r
+\r
+                       if (s.force_br_newlines) {\r
+                               // Force IE to produce BRs on enter\r
+                               if (isIE) {\r
+                                       ed.onKeyPress.add(function(ed, e) {\r
+                                               var n;\r
+\r
+                                               if (e.keyCode == 13 && selection.getNode().nodeName != 'LI') {\r
+                                                       selection.setContent('<br id="__" /> ', {format : 'raw'});\r
+                                                       n = dom.get('__');\r
+                                                       n.removeAttribute('id');\r
+                                                       selection.select(n);\r
+                                                       selection.collapse();\r
+                                                       return Event.cancel(e);\r
+                                               }\r
+                                       });\r
+                               }\r
+                       }\r
+\r
+                       if (s.force_p_newlines) {\r
+                               if (!isIE) {\r
+                                       ed.onKeyPress.add(function(ed, e) {\r
+                                               if (e.keyCode == 13 && !e.shiftKey && !t.insertPara(e))\r
+                                                       Event.cancel(e);\r
+                                       });\r
+                               } else {\r
+                                       // Ungly hack to for IE to preserve the formatting when you press\r
+                                       // enter at the end of a block element with formatted contents\r
+                                       // This logic overrides the browsers default logic with\r
+                                       // custom logic that enables us to control the output\r
+                                       tinymce.addUnload(function() {\r
+                                               t._previousFormats = 0; // Fix IE leak\r
+                                       });\r
+\r
+                                       ed.onKeyPress.add(function(ed, e) {\r
+                                               t._previousFormats = 0;\r
+\r
+                                               // Clone the current formats, this will later be applied to the new block contents\r
+                                               if (e.keyCode == 13 && !e.shiftKey && ed.selection.isCollapsed() && s.keep_styles)\r
+                                                       t._previousFormats = cloneFormats(ed.selection.getStart());\r
+                                       });\r
+\r
+                                       ed.onKeyUp.add(function(ed, e) {\r
+                                               // Let IE break the element and the wrap the new caret location in the previous formats\r
+                                               if (e.keyCode == 13 && !e.shiftKey) {\r
+                                                       var parent = ed.selection.getStart(), fmt = t._previousFormats;\r
+\r
+                                                       // Parent is an empty block\r
+                                                       if (!parent.hasChildNodes()) {\r
+                                                               parent = dom.getParent(parent, dom.isBlock);\r
+\r
+                                                               if (parent) {\r
+                                                                       parent.innerHTML = '';\r
+       \r
+                                                                       if (t._previousFormats) {\r
+                                                                               parent.appendChild(fmt.wrapper);\r
+                                                                               fmt.inner.innerHTML = '\uFEFF';\r
+                                                                       } else\r
+                                                                               parent.innerHTML = '\uFEFF';\r
+\r
+                                                                       selection.select(parent, 1);\r
+                                                                       ed.getDoc().execCommand('Delete', false, null);\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                               }\r
+\r
+                               if (isGecko) {\r
+                                       ed.onKeyDown.add(function(ed, e) {\r
+                                               if ((e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey)\r
+                                                       t.backspaceDelete(e, e.keyCode == 8);\r
+                                       });\r
+                               }\r
+                       }\r
+\r
+                       // Workaround for missing shift+enter support, http://bugs.webkit.org/show_bug.cgi?id=16973\r
+                       if (tinymce.isWebKit) {\r
+                               function insertBr(ed) {\r
+                                       var rng = selection.getRng(), br, div = dom.create('div', null, ' '), divYPos, vpHeight = dom.getViewPort(ed.getWin()).h;\r
+\r
+                                       // Insert BR element\r
+                                       rng.insertNode(br = dom.create('br'));\r
+\r
+                                       // Place caret after BR\r
+                                       rng.setStartAfter(br);\r
+                                       rng.setEndAfter(br);\r
+                                       selection.setRng(rng);\r
+\r
+                                       // Could not place caret after BR then insert an nbsp entity and move the caret\r
+                                       if (selection.getSel().focusNode == br.previousSibling) {\r
+                                               selection.select(dom.insertAfter(dom.doc.createTextNode('\u00a0'), br));\r
+                                               selection.collapse(TRUE);\r
+                                       }\r
+\r
+                                       // Create a temporary DIV after the BR and get the position as it\r
+                                       // seems like getPos() returns 0 for text nodes and BR elements.\r
+                                       dom.insertAfter(div, br);\r
+                                       divYPos = dom.getPos(div).y;\r
+                                       dom.remove(div);\r
+\r
+                                       // Scroll to new position, scrollIntoView can't be used due to bug: http://bugs.webkit.org/show_bug.cgi?id=16117\r
+                                       if (divYPos > vpHeight) // It is not necessary to scroll if the DIV is inside the view port.\r
+                                               ed.getWin().scrollTo(0, divYPos);\r
+                               };\r
+\r
+                               ed.onKeyPress.add(function(ed, e) {\r
+                                       if (e.keyCode == 13 && (e.shiftKey || (s.force_br_newlines && !dom.getParent(selection.getNode(), 'h1,h2,h3,h4,h5,h6,ol,ul')))) {\r
+                                               insertBr(ed);\r
+                                               Event.cancel(e);\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       // Padd empty inline elements within block elements\r
+                       // For example: <p><strong><em></em></strong></p> becomes <p><strong><em>&nbsp;</em></strong></p>\r
+                       ed.onPreProcess.add(function(ed, o) {\r
+                               each(dom.select('p,h1,h2,h3,h4,h5,h6,div', o.node), function(p) {\r
+                                       if (isEmpty(p)) {\r
+                                               each(dom.select('span,em,strong,b,i', o.node), function(n) {\r
+                                                       if (!n.hasChildNodes()) {\r
+                                                               n.appendChild(ed.getDoc().createTextNode('\u00a0'));\r
+                                                               return FALSE; // Break the loop one padding is enough\r
+                                                       }\r
+                                               });\r
+                                       }\r
+                               });\r
+                       });\r
+\r
+                       // IE specific fixes\r
+                       if (isIE) {\r
+                               // Replaces IE:s auto generated paragraphs with the specified element name\r
+                               if (s.element != 'P') {\r
+                                       ed.onKeyPress.add(function(ed, e) {\r
+                                               t.lastElm = selection.getNode().nodeName;\r
+                                       });\r
+\r
+                                       ed.onKeyUp.add(function(ed, e) {\r
+                                               var bl, n = selection.getNode(), b = ed.getBody();\r
+\r
+                                               if (b.childNodes.length === 1 && n.nodeName == 'P') {\r
+                                                       n = dom.rename(n, s.element);\r
+                                                       selection.select(n);\r
+                                                       selection.collapse();\r
+                                                       ed.nodeChanged();\r
+                                               } else if (e.keyCode == 13 && !e.shiftKey && t.lastElm != 'P') {\r
+                                                       bl = dom.getParent(n, 'p');\r
+\r
+                                                       if (bl) {\r
+                                                               dom.rename(bl, s.element);\r
+                                                               ed.nodeChanged();\r
+                                                       }\r
+                                               }\r
+                                       });\r
+                               }\r
+                       }\r
+               },\r
+\r
+               find : function(n, t, s) {\r
+                       var ed = this.editor, w = ed.getDoc().createTreeWalker(n, 4, null, FALSE), c = -1;\r
+\r
+                       while (n = w.nextNode()) {\r
+                               c++;\r
+\r
+                               // Index by node\r
+                               if (t == 0 && n == s)\r
+                                       return c;\r
+\r
+                               // Node by index\r
+                               if (t == 1 && c == s)\r
+                                       return n;\r
+                       }\r
+\r
+                       return -1;\r
+               },\r
+\r
+               forceRoots : function(ed, e) {\r
+                       var t = this, ed = t.editor, b = ed.getBody(), d = ed.getDoc(), se = ed.selection, s = se.getSel(), r = se.getRng(), si = -2, ei, so, eo, tr, c = -0xFFFFFF;\r
+                       var nx, bl, bp, sp, le, nl = b.childNodes, i, n, eid;\r
+\r
+                       // Fix for bug #1863847\r
+                       //if (e && e.keyCode == 13)\r
+                       //      return TRUE;\r
+\r
+                       // Wrap non blocks into blocks\r
+                       for (i = nl.length - 1; i >= 0; i--) {\r
+                               nx = nl[i];\r
+\r
+                               // Ignore internal elements\r
+                               if (nx.nodeType === 1 && nx.getAttribute('_mce_type')) {\r
+                                       bl = null;\r
+                                       continue;\r
+                               }\r
+\r
+                               // Is text or non block element\r
+                               if (nx.nodeType === 3 || (!t.dom.isBlock(nx) && nx.nodeType !== 8 && !/^(script|mce:script|style|mce:style)$/i.test(nx.nodeName))) {\r
+                                       if (!bl) {\r
+                                               // Create new block but ignore whitespace\r
+                                               if (nx.nodeType != 3 || /[^\s]/g.test(nx.nodeValue)) {\r
+                                                       // Store selection\r
+                                                       if (si == -2 && r) {\r
+                                                               if (!isIE) {\r
+                                                                       // If selection is element then mark it\r
+                                                                       if (r.startContainer.nodeType == 1 && (n = r.startContainer.childNodes[r.startOffset]) && n.nodeType == 1) {\r
+                                                                               // Save the id of the selected element\r
+                                                                               eid = n.getAttribute("id");\r
+                                                                               n.setAttribute("id", "__mce");\r
+                                                                       } else {\r
+                                                                               // If element is inside body, might not be the case in contentEdiable mode\r
+                                                                               if (ed.dom.getParent(r.startContainer, function(e) {return e === b;})) {\r
+                                                                                       so = r.startOffset;\r
+                                                                                       eo = r.endOffset;\r
+                                                                                       si = t.find(b, 0, r.startContainer);\r
+                                                                                       ei = t.find(b, 0, r.endContainer);\r
+                                                                               }\r
+                                                                       }\r
+                                                               } else {\r
+                                                                       // Force control range into text range\r
+                                                                       if (r.item) {\r
+                                                                               tr = d.body.createTextRange();\r
+                                                                               tr.moveToElementText(r.item(0));\r
+                                                                               r = tr;\r
+                                                                       }\r
+\r
+                                                                       tr = d.body.createTextRange();\r
+                                                                       tr.moveToElementText(b);\r
+                                                                       tr.collapse(1);\r
+                                                                       bp = tr.move('character', c) * -1;\r
+\r
+                                                                       tr = r.duplicate();\r
+                                                                       tr.collapse(1);\r
+                                                                       sp = tr.move('character', c) * -1;\r
+\r
+                                                                       tr = r.duplicate();\r
+                                                                       tr.collapse(0);\r
+                                                                       le = (tr.move('character', c) * -1) - sp;\r
+\r
+                                                                       si = sp - bp;\r
+                                                                       ei = le;\r
+                                                               }\r
+                                                       }\r
+\r
+                                                       // Uses replaceChild instead of cloneNode since it removes selected attribute from option elements on IE\r
+                                                       // See: http://support.microsoft.com/kb/829907\r
+                                                       bl = ed.dom.create(ed.settings.forced_root_block);\r
+                                                       nx.parentNode.replaceChild(bl, nx);\r
+                                                       bl.appendChild(nx);\r
+                                               }\r
+                                       } else {\r
+                                               if (bl.hasChildNodes())\r
+                                                       bl.insertBefore(nx, bl.firstChild);\r
+                                               else\r
+                                                       bl.appendChild(nx);\r
+                                       }\r
+                               } else\r
+                                       bl = null; // Time to create new block\r
+                       }\r
+\r
+                       // Restore selection\r
+                       if (si != -2) {\r
+                               if (!isIE) {\r
+                                       bl = b.getElementsByTagName(ed.settings.element)[0];\r
+                                       r = d.createRange();\r
+\r
+                                       // Select last location or generated block\r
+                                       if (si != -1)\r
+                                               r.setStart(t.find(b, 1, si), so);\r
+                                       else\r
+                                               r.setStart(bl, 0);\r
+\r
+                                       // Select last location or generated block\r
+                                       if (ei != -1)\r
+                                               r.setEnd(t.find(b, 1, ei), eo);\r
+                                       else\r
+                                               r.setEnd(bl, 0);\r
+\r
+                                       if (s) {\r
+                                               s.removeAllRanges();\r
+                                               s.addRange(r);\r
+                                       }\r
+                               } else {\r
+                                       try {\r
+                                               r = s.createRange();\r
+                                               r.moveToElementText(b);\r
+                                               r.collapse(1);\r
+                                               r.moveStart('character', si);\r
+                                               r.moveEnd('character', ei);\r
+                                               r.select();\r
+                                       } catch (ex) {\r
+                                               // Ignore\r
+                                       }\r
+                               }\r
+                       } else if (!isIE && (n = ed.dom.get('__mce'))) {\r
+                               // Restore the id of the selected element\r
+                               if (eid)\r
+                                       n.setAttribute('id', eid);\r
+                               else\r
+                                       n.removeAttribute('id');\r
+\r
+                               // Move caret before selected element\r
+                               r = d.createRange();\r
+                               r.setStartBefore(n);\r
+                               r.setEndBefore(n);\r
+                               se.setRng(r);\r
+                       }\r
+               },\r
+\r
+               getParentBlock : function(n) {\r
+                       var d = this.dom;\r
+\r
+                       return d.getParent(n, d.isBlock);\r
+               },\r
+\r
+               insertPara : function(e) {\r
+                       var t = this, ed = t.editor, dom = ed.dom, d = ed.getDoc(), se = ed.settings, s = ed.selection.getSel(), r = s.getRangeAt(0), b = d.body;\r
+                       var rb, ra, dir, sn, so, en, eo, sb, eb, bn, bef, aft, sc, ec, n, vp = dom.getViewPort(ed.getWin()), y, ch, car;\r
+\r
+                       // If root blocks are forced then use Operas default behavior since it's really good\r
+// Removed due to bug: #1853816\r
+//                     if (se.forced_root_block && isOpera)\r
+//                             return TRUE;\r
+\r
+                       // Setup before range\r
+                       rb = d.createRange();\r
+\r
+                       // If is before the first block element and in body, then move it into first block element\r
+                       rb.setStart(s.anchorNode, s.anchorOffset);\r
+                       rb.collapse(TRUE);\r
+\r
+                       // Setup after range\r
+                       ra = d.createRange();\r
+\r
+                       // If is before the first block element and in body, then move it into first block element\r
+                       ra.setStart(s.focusNode, s.focusOffset);\r
+                       ra.collapse(TRUE);\r
+\r
+                       // Setup start/end points\r
+                       dir = rb.compareBoundaryPoints(rb.START_TO_END, ra) < 0;\r
+                       sn = dir ? s.anchorNode : s.focusNode;\r
+                       so = dir ? s.anchorOffset : s.focusOffset;\r
+                       en = dir ? s.focusNode : s.anchorNode;\r
+                       eo = dir ? s.focusOffset : s.anchorOffset;\r
+\r
+                       // If selection is in empty table cell\r
+                       if (sn === en && /^(TD|TH)$/.test(sn.nodeName)) {\r
+                               if (sn.firstChild.nodeName == 'BR')\r
+                                       dom.remove(sn.firstChild); // Remove BR\r
+\r
+                               // Create two new block elements\r
+                               if (sn.childNodes.length == 0) {\r
+                                       ed.dom.add(sn, se.element, null, '<br />');\r
+                                       aft = ed.dom.add(sn, se.element, null, '<br />');\r
+                               } else {\r
+                                       n = sn.innerHTML;\r
+                                       sn.innerHTML = '';\r
+                                       ed.dom.add(sn, se.element, null, n);\r
+                                       aft = ed.dom.add(sn, se.element, null, '<br />');\r
+                               }\r
+\r
+                               // Move caret into the last one\r
+                               r = d.createRange();\r
+                               r.selectNodeContents(aft);\r
+                               r.collapse(1);\r
+                               ed.selection.setRng(r);\r
+\r
+                               return FALSE;\r
+                       }\r
+\r
+                       // If the caret is in an invalid location in FF we need to move it into the first block\r
+                       if (sn == b && en == b && b.firstChild && ed.dom.isBlock(b.firstChild)) {\r
+                               sn = en = sn.firstChild;\r
+                               so = eo = 0;\r
+                               rb = d.createRange();\r
+                               rb.setStart(sn, 0);\r
+                               ra = d.createRange();\r
+                               ra.setStart(en, 0);\r
+                       }\r
+\r
+                       // Never use body as start or end node\r
+                       sn = sn.nodeName == "HTML" ? d.body : sn; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
+                       sn = sn.nodeName == "BODY" ? sn.firstChild : sn;\r
+                       en = en.nodeName == "HTML" ? d.body : en; // Fix for Opera bug: https://bugs.opera.com/show_bug.cgi?id=273224&comments=yes\r
+                       en = en.nodeName == "BODY" ? en.firstChild : en;\r
+\r
+                       // Get start and end blocks\r
+                       sb = t.getParentBlock(sn);\r
+                       eb = t.getParentBlock(en);\r
+                       bn = sb ? sb.nodeName : se.element; // Get block name to create\r
+\r
+                       // Return inside list use default browser behavior\r
+                       if (n = t.dom.getParent(sb, 'li,pre')) {\r
+                               if (n.nodeName == 'LI')\r
+                                       return splitList(ed.selection, t.dom, n);\r
+\r
+                               return TRUE;\r
+                       }\r
+\r
+                       // If caption or absolute layers then always generate new blocks within\r
+                       if (sb && (sb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {\r
+                               bn = se.element;\r
+                               sb = null;\r
+                       }\r
+\r
+                       // If caption or absolute layers then always generate new blocks within\r
+                       if (eb && (eb.nodeName == 'CAPTION' || /absolute|relative|fixed/gi.test(dom.getStyle(sb, 'position', 1)))) {\r
+                               bn = se.element;\r
+                               eb = null;\r
+                       }\r
+\r
+                       // Use P instead\r
+                       if (/(TD|TABLE|TH|CAPTION)/.test(bn) || (sb && bn == "DIV" && /left|right/gi.test(dom.getStyle(sb, 'float', 1)))) {\r
+                               bn = se.element;\r
+                               sb = eb = null;\r
+                       }\r
+\r
+                       // Setup new before and after blocks\r
+                       bef = (sb && sb.nodeName == bn) ? sb.cloneNode(0) : ed.dom.create(bn);\r
+                       aft = (eb && eb.nodeName == bn) ? eb.cloneNode(0) : ed.dom.create(bn);\r
+\r
+                       // Remove id from after clone\r
+                       aft.removeAttribute('id');\r
+\r
+                       // Is header and cursor is at the end, then force paragraph under\r
+                       if (/^(H[1-6])$/.test(bn) && isAtEnd(r, sb))\r
+                               aft = ed.dom.create(se.element);\r
+\r
+                       // Find start chop node\r
+                       n = sc = sn;\r
+                       do {\r
+                               if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
+                                       break;\r
+\r
+                               sc = n;\r
+                       } while ((n = n.previousSibling ? n.previousSibling : n.parentNode));\r
+\r
+                       // Find end chop node\r
+                       n = ec = en;\r
+                       do {\r
+                               if (n == b || n.nodeType == 9 || t.dom.isBlock(n) || /(TD|TABLE|TH|CAPTION)/.test(n.nodeName))\r
+                                       break;\r
+\r
+                               ec = n;\r
+                       } while ((n = n.nextSibling ? n.nextSibling : n.parentNode));\r
+\r
+                       // Place first chop part into before block element\r
+                       if (sc.nodeName == bn)\r
+                               rb.setStart(sc, 0);\r
+                       else\r
+                               rb.setStartBefore(sc);\r
+\r
+                       rb.setEnd(sn, so);\r
+                       bef.appendChild(rb.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
+\r
+                       // Place secnd chop part within new block element\r
+                       try {\r
+                               ra.setEndAfter(ec);\r
+                       } catch(ex) {\r
+                               //console.debug(s.focusNode, s.focusOffset);\r
+                       }\r
+\r
+                       ra.setStart(en, eo);\r
+                       aft.appendChild(ra.cloneContents() || d.createTextNode('')); // Empty text node needed for Safari\r
+\r
+                       // Create range around everything\r
+                       r = d.createRange();\r
+                       if (!sc.previousSibling && sc.parentNode.nodeName == bn) {\r
+                               r.setStartBefore(sc.parentNode);\r
+                       } else {\r
+                               if (rb.startContainer.nodeName == bn && rb.startOffset == 0)\r
+                                       r.setStartBefore(rb.startContainer);\r
+                               else\r
+                                       r.setStart(rb.startContainer, rb.startOffset);\r
+                       }\r
+\r
+                       if (!ec.nextSibling && ec.parentNode.nodeName == bn)\r
+                               r.setEndAfter(ec.parentNode);\r
+                       else\r
+                               r.setEnd(ra.endContainer, ra.endOffset);\r
+\r
+                       // Delete and replace it with new block elements\r
+                       r.deleteContents();\r
+\r
+                       if (isOpera)\r
+                               ed.getWin().scrollTo(0, vp.y);\r
+\r
+                       // Never wrap blocks in blocks\r
+                       if (bef.firstChild && bef.firstChild.nodeName == bn)\r
+                               bef.innerHTML = bef.firstChild.innerHTML;\r
+\r
+                       if (aft.firstChild && aft.firstChild.nodeName == bn)\r
+                               aft.innerHTML = aft.firstChild.innerHTML;\r
+\r
+                       // Padd empty blocks\r
+                       if (isEmpty(bef))\r
+                               bef.innerHTML = '<br />';\r
+\r
+                       function appendStyles(e, en) {\r
+                               var nl = [], nn, n, i;\r
+\r
+                               e.innerHTML = '';\r
+\r
+                               // Make clones of style elements\r
+                               if (se.keep_styles) {\r
+                                       n = en;\r
+                                       do {\r
+                                               // We only want style specific elements\r
+                                               if (/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)) {\r
+                                                       nn = n.cloneNode(FALSE);\r
+                                                       dom.setAttrib(nn, 'id', ''); // Remove ID since it needs to be unique\r
+                                                       nl.push(nn);\r
+                                               }\r
+                                       } while (n = n.parentNode);\r
+                               }\r
+\r
+                               // Append style elements to aft\r
+                               if (nl.length > 0) {\r
+                                       for (i = nl.length - 1, nn = e; i >= 0; i--)\r
+                                               nn = nn.appendChild(nl[i]);\r
+\r
+                                       // Padd most inner style element\r
+                                       nl[0].innerHTML = isOpera ? '&nbsp;' : '<br />'; // Extra space for Opera so that the caret can move there\r
+                                       return nl[0]; // Move caret to most inner element\r
+                               } else\r
+                                       e.innerHTML = isOpera ? '&nbsp;' : '<br />'; // Extra space for Opera so that the caret can move there\r
+                       };\r
+\r
+                       // Fill empty afterblook with current style\r
+                       if (isEmpty(aft))\r
+                               car = appendStyles(aft, en);\r
+\r
+                       // Opera needs this one backwards for older versions\r
+                       if (isOpera && parseFloat(opera.version()) < 9.5) {\r
+                               r.insertNode(bef);\r
+                               r.insertNode(aft);\r
+                       } else {\r
+                               r.insertNode(aft);\r
+                               r.insertNode(bef);\r
+                       }\r
+\r
+                       // Normalize\r
+                       aft.normalize();\r
+                       bef.normalize();\r
+\r
+                       function first(n) {\r
+                               return d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE).nextNode() || n;\r
+                       };\r
+\r
+                       // Move cursor and scroll into view\r
+                       r = d.createRange();\r
+                       r.selectNodeContents(isGecko ? first(car || aft) : car || aft);\r
+                       r.collapse(1);\r
+                       s.removeAllRanges();\r
+                       s.addRange(r);\r
+\r
+                       // scrollIntoView seems to scroll the parent window in most browsers now including FF 3.0b4 so it's time to stop using it and do it our selfs\r
+                       y = ed.dom.getPos(aft).y;\r
+                       ch = aft.clientHeight;\r
+\r
+                       // Is element within viewport\r
+                       if (y < vp.y || y + ch > vp.y + vp.h) {\r
+                               ed.getWin().scrollTo(0, y < vp.y ? y : y - vp.h + 25); // Needs to be hardcoded to roughly one line of text if a huge text block is broken into two blocks\r
+                               //console.debug('SCROLL!', 'vp.y: ' + vp.y, 'y' + y, 'vp.h' + vp.h, 'clientHeight' + aft.clientHeight, 'yyy: ' + (y < vp.y ? y : y - vp.h + aft.clientHeight));\r
+                       }\r
+\r
+                       return FALSE;\r
+               },\r
+\r
+               backspaceDelete : function(e, bs) {\r
+                       var t = this, ed = t.editor, b = ed.getBody(), dom = ed.dom, n, se = ed.selection, r = se.getRng(), sc = r.startContainer, n, w, tn, walker;\r
+\r
+                       // Delete when caret is behind a element doesn't work correctly on Gecko see #3011651\r
+                       if (!bs && r.collapsed && sc.nodeType == 1 && r.startOffset == sc.childNodes.length) {\r
+                               walker = new tinymce.dom.TreeWalker(sc.lastChild, sc);\r
+\r
+                               // Walk the dom backwards until we find a text node\r
+                               for (n = sc.lastChild; n; n = walker.prev()) {\r
+                                       if (n.nodeType == 3) {\r
+                                               r.setStart(n, n.nodeValue.length);\r
+                                               r.collapse(true);\r
+                                               se.setRng(r);\r
+                                               return;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // The caret sometimes gets stuck in Gecko if you delete empty paragraphs\r
+                       // This workaround removes the element by hand and moves the caret to the previous element\r
+                       if (sc && ed.dom.isBlock(sc) && !/^(TD|TH)$/.test(sc.nodeName) && bs) {\r
+                               if (sc.childNodes.length == 0 || (sc.childNodes.length == 1 && sc.firstChild.nodeName == 'BR')) {\r
+                                       // Find previous block element\r
+                                       n = sc;\r
+                                       while ((n = n.previousSibling) && !ed.dom.isBlock(n)) ;\r
+\r
+                                       if (n) {\r
+                                               if (sc != b.firstChild) {\r
+                                                       // Find last text node\r
+                                                       w = ed.dom.doc.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, FALSE);\r
+                                                       while (tn = w.nextNode())\r
+                                                               n = tn;\r
+\r
+                                                       // Place caret at the end of last text node\r
+                                                       r = ed.getDoc().createRange();\r
+                                                       r.setStart(n, n.nodeValue ? n.nodeValue.length : 0);\r
+                                                       r.setEnd(n, n.nodeValue ? n.nodeValue.length : 0);\r
+                                                       se.setRng(r);\r
+\r
+                                                       // Remove the target container\r
+                                                       ed.dom.remove(sc);\r
+                                               }\r
+\r
+                                               return Event.cancel(e);\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       // Shorten names\r
+       var DOM = tinymce.DOM, Event = tinymce.dom.Event, each = tinymce.each, extend = tinymce.extend;\r
+\r
+       tinymce.create('tinymce.ControlManager', {\r
+               ControlManager : function(ed, s) {\r
+                       var t = this, i;\r
+\r
+                       s = s || {};\r
+                       t.editor = ed;\r
+                       t.controls = {};\r
+                       t.onAdd = new tinymce.util.Dispatcher(t);\r
+                       t.onPostRender = new tinymce.util.Dispatcher(t);\r
+                       t.prefix = s.prefix || ed.id + '_';\r
+                       t._cls = {};\r
+\r
+                       t.onPostRender.add(function() {\r
+                               each(t.controls, function(c) {\r
+                                       c.postRender();\r
+                               });\r
+                       });\r
+               },\r
+\r
+               get : function(id) {\r
+                       return this.controls[this.prefix + id] || this.controls[id];\r
+               },\r
+\r
+               setActive : function(id, s) {\r
+                       var c = null;\r
+\r
+                       if (c = this.get(id))\r
+                               c.setActive(s);\r
+\r
+                       return c;\r
+               },\r
+\r
+               setDisabled : function(id, s) {\r
+                       var c = null;\r
+\r
+                       if (c = this.get(id))\r
+                               c.setDisabled(s);\r
+\r
+                       return c;\r
+               },\r
+\r
+               add : function(c) {\r
+                       var t = this;\r
+\r
+                       if (c) {\r
+                               t.controls[c.id] = c;\r
+                               t.onAdd.dispatch(c, t);\r
+                       }\r
+\r
+                       return c;\r
+               },\r
+\r
+               createControl : function(n) {\r
+                       var c, t = this, ed = t.editor;\r
+\r
+                       each(ed.plugins, function(p) {\r
+                               if (p.createControl) {\r
+                                       c = p.createControl(n, t);\r
+\r
+                                       if (c)\r
+                                               return false;\r
+                               }\r
+                       });\r
+\r
+                       switch (n) {\r
+                               case "|":\r
+                               case "separator":\r
+                                       return t.createSeparator();\r
+                       }\r
+\r
+                       if (!c && ed.buttons && (c = ed.buttons[n]))\r
+                               return t.createButton(n, c);\r
+\r
+                       return t.add(c);\r
+               },\r
+\r
+               createDropMenu : function(id, s, cc) {\r
+                       var t = this, ed = t.editor, c, bm, v, cls;\r
+\r
+                       s = extend({\r
+                               'class' : 'mceDropDown',\r
+                               constrain : ed.settings.constrain_menus\r
+                       }, s);\r
+\r
+                       s['class'] = s['class'] + ' ' + ed.getParam('skin') + 'Skin';\r
+                       if (v = ed.getParam('skin_variant'))\r
+                               s['class'] += ' ' + ed.getParam('skin') + 'Skin' + v.substring(0, 1).toUpperCase() + v.substring(1);\r
+\r
+                       id = t.prefix + id;\r
+                       cls = cc || t._cls.dropmenu || tinymce.ui.DropMenu;\r
+                       c = t.controls[id] = new cls(id, s);\r
+                       c.onAddItem.add(function(c, o) {\r
+                               var s = o.settings;\r
+\r
+                               s.title = ed.getLang(s.title, s.title);\r
+\r
+                               if (!s.onclick) {\r
+                                       s.onclick = function(v) {\r
+                                               if (s.cmd)\r
+                                                       ed.execCommand(s.cmd, s.ui || false, s.value);\r
+                                       };\r
+                               }\r
+                       });\r
+\r
+                       ed.onRemove.add(function() {\r
+                               c.destroy();\r
+                       });\r
+\r
+                       // Fix for bug #1897785, #1898007\r
+                       if (tinymce.isIE) {\r
+                               c.onShowMenu.add(function() {\r
+                                       // IE 8 needs focus in order to store away a range with the current collapsed caret location\r
+                                       ed.focus();\r
+\r
+                                       bm = ed.selection.getBookmark(1);\r
+                               });\r
+\r
+                               c.onHideMenu.add(function() {\r
+                                       if (bm) {\r
+                                               ed.selection.moveToBookmark(bm);\r
+                                               bm = 0;\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       return t.add(c);\r
+               },\r
+\r
+               createListBox : function(id, s, cc) {\r
+                       var t = this, ed = t.editor, cmd, c, cls;\r
+\r
+                       if (t.get(id))\r
+                               return null;\r
+\r
+                       s.title = ed.translate(s.title);\r
+                       s.scope = s.scope || ed;\r
+\r
+                       if (!s.onselect) {\r
+                               s.onselect = function(v) {\r
+                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+                               };\r
+                       }\r
+\r
+                       s = extend({\r
+                               title : s.title,\r
+                               'class' : 'mce_' + id,\r
+                               scope : s.scope,\r
+                               control_manager : t\r
+                       }, s);\r
+\r
+                       id = t.prefix + id;\r
+\r
+                       if (ed.settings.use_native_selects)\r
+                               c = new tinymce.ui.NativeListBox(id, s);\r
+                       else {\r
+                               cls = cc || t._cls.listbox || tinymce.ui.ListBox;\r
+                               c = new cls(id, s);\r
+                       }\r
+\r
+                       t.controls[id] = c;\r
+\r
+                       // Fix focus problem in Safari\r
+                       if (tinymce.isWebKit) {\r
+                               c.onPostRender.add(function(c, n) {\r
+                                       // Store bookmark on mousedown\r
+                                       Event.add(n, 'mousedown', function() {\r
+                                               ed.bookmark = ed.selection.getBookmark(1);\r
+                                       });\r
+\r
+                                       // Restore on focus, since it might be lost\r
+                                       Event.add(n, 'focus', function() {\r
+                                               ed.selection.moveToBookmark(ed.bookmark);\r
+                                               ed.bookmark = null;\r
+                                       });\r
+                               });\r
+                       }\r
+\r
+                       if (c.hideMenu)\r
+                               ed.onMouseDown.add(c.hideMenu, c);\r
+\r
+                       return t.add(c);\r
+               },\r
+\r
+               createButton : function(id, s, cc) {\r
+                       var t = this, ed = t.editor, o, c, cls;\r
+\r
+                       if (t.get(id))\r
+                               return null;\r
+\r
+                       s.title = ed.translate(s.title);\r
+                       s.label = ed.translate(s.label);\r
+                       s.scope = s.scope || ed;\r
+\r
+                       if (!s.onclick && !s.menu_button) {\r
+                               s.onclick = function() {\r
+                                       ed.execCommand(s.cmd, s.ui || false, s.value);\r
+                               };\r
+                       }\r
+\r
+                       s = extend({\r
+                               title : s.title,\r
+                               'class' : 'mce_' + id,\r
+                               unavailable_prefix : ed.getLang('unavailable', ''),\r
+                               scope : s.scope,\r
+                               control_manager : t\r
+                       }, s);\r
+\r
+                       id = t.prefix + id;\r
+\r
+                       if (s.menu_button) {\r
+                               cls = cc || t._cls.menubutton || tinymce.ui.MenuButton;\r
+                               c = new cls(id, s);\r
+                               ed.onMouseDown.add(c.hideMenu, c);\r
+                       } else {\r
+                               cls = t._cls.button || tinymce.ui.Button;\r
+                               c = new cls(id, s);\r
+                       }\r
+\r
+                       return t.add(c);\r
+               },\r
+\r
+               createMenuButton : function(id, s, cc) {\r
+                       s = s || {};\r
+                       s.menu_button = 1;\r
+\r
+                       return this.createButton(id, s, cc);\r
+               },\r
+\r
+               createSplitButton : function(id, s, cc) {\r
+                       var t = this, ed = t.editor, cmd, c, cls;\r
+\r
+                       if (t.get(id))\r
+                               return null;\r
+\r
+                       s.title = ed.translate(s.title);\r
+                       s.scope = s.scope || ed;\r
+\r
+                       if (!s.onclick) {\r
+                               s.onclick = function(v) {\r
+                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+                               };\r
+                       }\r
+\r
+                       if (!s.onselect) {\r
+                               s.onselect = function(v) {\r
+                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+                               };\r
+                       }\r
+\r
+                       s = extend({\r
+                               title : s.title,\r
+                               'class' : 'mce_' + id,\r
+                               scope : s.scope,\r
+                               control_manager : t\r
+                       }, s);\r
+\r
+                       id = t.prefix + id;\r
+                       cls = cc || t._cls.splitbutton || tinymce.ui.SplitButton;\r
+                       c = t.add(new cls(id, s));\r
+                       ed.onMouseDown.add(c.hideMenu, c);\r
+\r
+                       return c;\r
+               },\r
+\r
+               createColorSplitButton : function(id, s, cc) {\r
+                       var t = this, ed = t.editor, cmd, c, cls, bm;\r
+\r
+                       if (t.get(id))\r
+                               return null;\r
+\r
+                       s.title = ed.translate(s.title);\r
+                       s.scope = s.scope || ed;\r
+\r
+                       if (!s.onclick) {\r
+                               s.onclick = function(v) {\r
+                                       if (tinymce.isIE)\r
+                                               bm = ed.selection.getBookmark(1);\r
+\r
+                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+                               };\r
+                       }\r
+\r
+                       if (!s.onselect) {\r
+                               s.onselect = function(v) {\r
+                                       ed.execCommand(s.cmd, s.ui || false, v || s.value);\r
+                               };\r
+                       }\r
+\r
+                       s = extend({\r
+                               title : s.title,\r
+                               'class' : 'mce_' + id,\r
+                               'menu_class' : ed.getParam('skin') + 'Skin',\r
+                               scope : s.scope,\r
+                               more_colors_title : ed.getLang('more_colors')\r
+                       }, s);\r
+\r
+                       id = t.prefix + id;\r
+                       cls = cc || t._cls.colorsplitbutton || tinymce.ui.ColorSplitButton;\r
+                       c = new cls(id, s);\r
+                       ed.onMouseDown.add(c.hideMenu, c);\r
+\r
+                       // Remove the menu element when the editor is removed\r
+                       ed.onRemove.add(function() {\r
+                               c.destroy();\r
+                       });\r
+\r
+                       // Fix for bug #1897785, #1898007\r
+                       if (tinymce.isIE) {\r
+                               c.onShowMenu.add(function() {\r
+                                       // IE 8 needs focus in order to store away a range with the current collapsed caret location\r
+                                       ed.focus();\r
+                                       bm = ed.selection.getBookmark(1);\r
+                               });\r
+\r
+                               c.onHideMenu.add(function() {\r
+                                       if (bm) {\r
+                                               ed.selection.moveToBookmark(bm);\r
+                                               bm = 0;\r
+                                       }\r
+                               });\r
+                       }\r
+\r
+                       return t.add(c);\r
+               },\r
+\r
+               createToolbar : function(id, s, cc) {\r
+                       var c, t = this, cls;\r
+\r
+                       id = t.prefix + id;\r
+                       cls = cc || t._cls.toolbar || tinymce.ui.Toolbar;\r
+                       c = new cls(id, s);\r
+\r
+                       if (t.get(id))\r
+                               return null;\r
+\r
+                       return t.add(c);\r
+               },\r
+\r
+               createSeparator : function(cc) {\r
+                       var cls = cc || this._cls.separator || tinymce.ui.Separator;\r
+\r
+                       return new cls();\r
+               },\r
+\r
+               setControlType : function(n, c) {\r
+                       return this._cls[n.toLowerCase()] = c;\r
+               },\r
+       \r
+               destroy : function() {\r
+                       each(this.controls, function(c) {\r
+                               c.destroy();\r
+                       });\r
+\r
+                       this.controls = null;\r
+               }\r
+       });\r
+})(tinymce);\r
+\r
+(function(tinymce) {\r
+       var Dispatcher = tinymce.util.Dispatcher, each = tinymce.each, isIE = tinymce.isIE, isOpera = tinymce.isOpera;\r
+\r
+       tinymce.create('tinymce.WindowManager', {\r
+               WindowManager : function(ed) {\r
+                       var t = this;\r
+\r
+                       t.editor = ed;\r
+                       t.onOpen = new Dispatcher(t);\r
+                       t.onClose = new Dispatcher(t);\r
+                       t.params = {};\r
+                       t.features = {};\r
+               },\r
+\r
+               open : function(s, p) {\r
+                       var t = this, f = '', x, y, mo = t.editor.settings.dialog_type == 'modal', w, sw, sh, vp = tinymce.DOM.getViewPort(), u;\r
+\r
+                       // Default some options\r
+                       s = s || {};\r
+                       p = p || {};\r
+                       sw = isOpera ? vp.w : screen.width; // Opera uses windows inside the Opera window\r
+                       sh = isOpera ? vp.h : screen.height;\r
+                       s.name = s.name || 'mc_' + new Date().getTime();\r
+                       s.width = parseInt(s.width || 320);\r
+                       s.height = parseInt(s.height || 240);\r
+                       s.resizable = true;\r
+                       s.left = s.left || parseInt(sw / 2.0) - (s.width / 2.0);\r
+                       s.top = s.top || parseInt(sh / 2.0) - (s.height / 2.0);\r
+                       p.inline = false;\r
+                       p.mce_width = s.width;\r
+                       p.mce_height = s.height;\r
+                       p.mce_auto_focus = s.auto_focus;\r
+\r
+                       if (mo) {\r
+                               if (isIE) {\r
+                                       s.center = true;\r
+                                       s.help = false;\r
+                                       s.dialogWidth = s.width + 'px';\r
+                                       s.dialogHeight = s.height + 'px';\r
+                                       s.scroll = s.scrollbars || false;\r
+                               }\r
+                       }\r
+\r
+                       // Build features string\r
+                       each(s, function(v, k) {\r
+                               if (tinymce.is(v, 'boolean'))\r
+                                       v = v ? 'yes' : 'no';\r
+\r
+                               if (!/^(name|url)$/.test(k)) {\r
+                                       if (isIE && mo)\r
+                                               f += (f ? ';' : '') + k + ':' + v;\r
+                                       else\r
+                                               f += (f ? ',' : '') + k + '=' + v;\r
+                               }\r
+                       });\r
+\r
+                       t.features = s;\r
+                       t.params = p;\r
+                       t.onOpen.dispatch(t, s, p);\r
+\r
+                       u = s.url || s.file;\r
+                       u = tinymce._addVer(u);\r
+\r
+                       try {\r
+                               if (isIE && mo) {\r
+                                       w = 1;\r
+                                       window.showModalDialog(u, window, f);\r
+                               } else\r
+                                       w = window.open(u, s.name, f);\r
+                       } catch (ex) {\r
+                               // Ignore\r
+                       }\r
+\r
+                       if (!w)\r
+                               alert(t.editor.getLang('popup_blocked'));\r
+               },\r
+\r
+               close : function(w) {\r
+                       w.close();\r
+                       this.onClose.dispatch(this);\r
+               },\r
+\r
+               createInstance : function(cl, a, b, c, d, e) {\r
+                       var f = tinymce.resolve(cl);\r
+\r
+                       return new f(a, b, c, d, e);\r
+               },\r
+\r
+               confirm : function(t, cb, s, w) {\r
+                       w = w || window;\r
+\r
+                       cb.call(s || this, w.confirm(this._decode(this.editor.getLang(t, t))));\r
+               },\r
+\r
+               alert : function(tx, cb, s, w) {\r
+                       var t = this;\r
+\r
+                       w = w || window;\r
+                       w.alert(t._decode(t.editor.getLang(tx, tx)));\r
+\r
+                       if (cb)\r
+                               cb.call(s || t);\r
+               },\r
+\r
+               resizeBy : function(dw, dh, win) {\r
+                       win.resizeBy(dw, dh);\r
+               },\r
+\r
+               // Internal functions\r
+\r
+               _decode : function(s) {\r
+                       return tinymce.DOM.decode(s).replace(/\\n/g, '\n');\r
+               }\r
+       });\r
+}(tinymce));\r
+(function(tinymce) {\r
+       function CommandManager() {\r
+               var execCommands = {}, queryStateCommands = {}, queryValueCommands = {};\r
+\r
+               function add(collection, cmd, func, scope) {\r
+                       if (typeof(cmd) == 'string')\r
+                               cmd = [cmd];\r
+\r
+                       tinymce.each(cmd, function(cmd) {\r
+                               collection[cmd.toLowerCase()] = {func : func, scope : scope};\r
+                       });\r
+               };\r
+\r
+               tinymce.extend(this, {\r
+                       add : function(cmd, func, scope) {\r
+                               add(execCommands, cmd, func, scope);\r
+                       },\r
+\r
+                       addQueryStateHandler : function(cmd, func, scope) {\r
+                               add(queryStateCommands, cmd, func, scope);\r
+                       },\r
+\r
+                       addQueryValueHandler : function(cmd, func, scope) {\r
+                               add(queryValueCommands, cmd, func, scope);\r
+                       },\r
+\r
+                       execCommand : function(scope, cmd, ui, value, args) {\r
+                               if (cmd = execCommands[cmd.toLowerCase()]) {\r
+                                       if (cmd.func.call(scope || cmd.scope, ui, value, args) !== false)\r
+                                               return true;\r
+                               }\r
+                       },\r
+\r
+                       queryCommandValue : function() {\r
+                               if (cmd = queryValueCommands[cmd.toLowerCase()])\r
+                                       return cmd.func.call(scope || cmd.scope, ui, value, args);\r
+                       },\r
+\r
+                       queryCommandState : function() {\r
+                               if (cmd = queryStateCommands[cmd.toLowerCase()])\r
+                                       return cmd.func.call(scope || cmd.scope, ui, value, args);\r
+                       }\r
+               });\r
+       };\r
+\r
+       tinymce.GlobalCommands = new CommandManager();\r
+})(tinymce);\r
+(function(tinymce) {\r
+       tinymce.Formatter = function(ed) {\r
+               var formats = {},\r
+                       each = tinymce.each,\r
+                       dom = ed.dom,\r
+                       selection = ed.selection,\r
+                       TreeWalker = tinymce.dom.TreeWalker,\r
+                       rangeUtils = new tinymce.dom.RangeUtils(dom),\r
+                       isValid = ed.schema.isValid,\r
+                       isBlock = dom.isBlock,\r
+                       forcedRootBlock = ed.settings.forced_root_block,\r
+                       nodeIndex = dom.nodeIndex,\r
+                       INVISIBLE_CHAR = '\uFEFF',\r
+                       MCE_ATTR_RE = /^(src|href|style)$/,\r
+                       FALSE = false,\r
+                       TRUE = true,\r
+                       undefined,\r
+                       pendingFormats = {apply : [], remove : []};\r
+\r
+               function isArray(obj) {\r
+                       return obj instanceof Array;\r
+               };\r
+\r
+               function getParents(node, selector) {\r
+                       return dom.getParents(node, selector, dom.getRoot());\r
+               };\r
+\r
+               function isCaretNode(node) {\r
+                       return node.nodeType === 1 && (node.face === 'mceinline' || node.style.fontFamily === 'mceinline');\r
+               };\r
+\r
+               // Public functions\r
+\r
+               function get(name) {\r
+                       return name ? formats[name] : formats;\r
+               };\r
+\r
+               function register(name, format) {\r
+                       if (name) {\r
+                               if (typeof(name) !== 'string') {\r
+                                       each(name, function(format, name) {\r
+                                               register(name, format);\r
+                                       });\r
+                               } else {\r
+                                       // Force format into array and add it to internal collection\r
+                                       format = format.length ? format : [format];\r
+\r
+                                       each(format, function(format) {\r
+                                               // Set deep to false by default on selector formats this to avoid removing\r
+                                               // alignment on images inside paragraphs when alignment is changed on paragraphs\r
+                                               if (format.deep === undefined)\r
+                                                       format.deep = !format.selector;\r
+\r
+                                               // Default to true\r
+                                               if (format.split === undefined)\r
+                                                       format.split = !format.selector || format.inline;\r
+\r
+                                               // Default to true\r
+                                               if (format.remove === undefined && format.selector && !format.inline)\r
+                                                       format.remove = 'none';\r
+\r
+                                               // Mark format as a mixed format inline + block level\r
+                                               if (format.selector && format.inline) {\r
+                                                       format.mixed = true;\r
+                                                       format.block_expand = true;\r
+                                               }\r
+\r
+                                               // Split classes if needed\r
+                                               if (typeof(format.classes) === 'string')\r
+                                                       format.classes = format.classes.split(/\s+/);\r
+                                       });\r
+\r
+                                       formats[name] = format;\r
+                               }\r
+                       }\r
+               };\r
+\r
+               function apply(name, vars, node) {\r
+                       var formatList = get(name), format = formatList[0], bookmark, rng, i;\r
+\r
+                       function moveStart(rng) {\r
+                               var container = rng.startContainer,\r
+                                       offset = rng.startOffset,\r
+                                       walker, node;\r
+\r
+                               // Move startContainer/startOffset in to a suitable node\r
+                               if (container.nodeType == 1 || container.nodeValue === "") {\r
+                                       container = container.nodeType == 1 ? container.childNodes[offset] : container;\r
+\r
+                                       // Might fail if the offset is behind the last element in it's container\r
+                                       if (container) {\r
+                                               walker = new TreeWalker(container, container.parentNode);\r
+                                               for (node = walker.current(); node; node = walker.next()) {\r
+                                                       if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {\r
+                                                               rng.setStart(node, 0);\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               return rng;\r
+                       };\r
+\r
+                       function setElementFormat(elm, fmt) {\r
+                               fmt = fmt || format;\r
+\r
+                               if (elm) {\r
+                                       each(fmt.styles, function(value, name) {\r
+                                               dom.setStyle(elm, name, replaceVars(value, vars));\r
+                                       });\r
+\r
+                                       each(fmt.attributes, function(value, name) {\r
+                                               dom.setAttrib(elm, name, replaceVars(value, vars));\r
+                                       });\r
+\r
+                                       each(fmt.classes, function(value) {\r
+                                               value = replaceVars(value, vars);\r
+\r
+                                               if (!dom.hasClass(elm, value))\r
+                                                       dom.addClass(elm, value);\r
+                                       });\r
+                               }\r
+                       };\r
+\r
+                       function applyRngStyle(rng) {\r
+                               var newWrappers = [], wrapName, wrapElm;\r
+\r
+                               // Setup wrapper element\r
+                               wrapName = format.inline || format.block;\r
+                               wrapElm = dom.create(wrapName);\r
+                               setElementFormat(wrapElm);\r
+\r
+                               rangeUtils.walk(rng, function(nodes) {\r
+                                       var currentWrapElm;\r
+\r
+                                       function process(node) {\r
+                                               var nodeName = node.nodeName.toLowerCase(), parentName = node.parentNode.nodeName.toLowerCase(), found;\r
+\r
+                                               // Stop wrapping on br elements\r
+                                               if (isEq(nodeName, 'br')) {\r
+                                                       currentWrapElm = 0;\r
+\r
+                                                       // Remove any br elements when we wrap things\r
+                                                       if (format.block)\r
+                                                               dom.remove(node);\r
+\r
+                                                       return;\r
+                                               }\r
+\r
+                                               // If node is wrapper type\r
+                                               if (format.wrapper && matchNode(node, name, vars)) {\r
+                                                       currentWrapElm = 0;\r
+                                                       return;\r
+                                               }\r
+\r
+                                               // Can we rename the block\r
+                                               if (format.block && !format.wrapper && isTextBlock(nodeName)) {\r
+                                                       node = dom.rename(node, wrapName);\r
+                                                       setElementFormat(node);\r
+                                                       newWrappers.push(node);\r
+                                                       currentWrapElm = 0;\r
+                                                       return;\r
+                                               }\r
+\r
+                                               // Handle selector patterns\r
+                                               if (format.selector) {\r
+                                                       // Look for matching formats\r
+                                                       each(formatList, function(format) {\r
+                                                               if (dom.is(node, format.selector) && !isCaretNode(node)) {\r
+                                                                       setElementFormat(node, format);\r
+                                                                       found = true;\r
+                                                               }\r
+                                                       });\r
+\r
+                                                       // Continue processing if a selector match wasn't found and a inline element is defined\r
+                                                       if (!format.inline || found) {\r
+                                                               currentWrapElm = 0;\r
+                                                               return;\r
+                                                       }\r
+                                               }\r
+\r
+                                               // Is it valid to wrap this item\r
+                                               if (isValid(wrapName, nodeName) && isValid(parentName, wrapName)) {\r
+                                                       // Start wrapping\r
+                                                       if (!currentWrapElm) {\r
+                                                               // Wrap the node\r
+                                                               currentWrapElm = wrapElm.cloneNode(FALSE);\r
+                                                               node.parentNode.insertBefore(currentWrapElm, node);\r
+                                                               newWrappers.push(currentWrapElm);\r
+                                                       }\r
+\r
+                                                       currentWrapElm.appendChild(node);\r
+                                               } else {\r
+                                                       // Start a new wrapper for possible children\r
+                                                       currentWrapElm = 0;\r
+\r
+                                                       each(tinymce.grep(node.childNodes), process);\r
+\r
+                                                       // End the last wrapper\r
+                                                       currentWrapElm = 0;\r
+                                               }\r
+                                       };\r
+\r
+                                       // Process siblings from range\r
+                                       each(nodes, process);\r
+                               });\r
+\r
+                               // Cleanup\r
+                               each(newWrappers, function(node) {\r
+                                       var childCount;\r
+\r
+                                       function getChildCount(node) {\r
+                                               var count = 0;\r
+\r
+                                               each(node.childNodes, function(node) {\r
+                                                       if (!isWhiteSpaceNode(node) && !isBookmarkNode(node))\r
+                                                               count++;\r
+                                               });\r
+\r
+                                               return count;\r
+                                       };\r
+\r
+                                       function mergeStyles(node) {\r
+                                               var child, clone;\r
+\r
+                                               each(node.childNodes, function(node) {\r
+                                                       if (node.nodeType == 1 && !isBookmarkNode(node) && !isCaretNode(node)) {\r
+                                                               child = node;\r
+                                                               return FALSE; // break loop\r
+                                                       }\r
+                                               });\r
+\r
+                                               // If child was found and of the same type as the current node\r
+                                               if (child && matchName(child, format)) {\r
+                                                       clone = child.cloneNode(FALSE);\r
+                                                       setElementFormat(clone);\r
+\r
+                                                       dom.replace(clone, node, TRUE);\r
+                                                       dom.remove(child, 1);\r
+                                               }\r
+\r
+                                               return clone || node;\r
+                                       };\r
+\r
+                                       childCount = getChildCount(node);\r
+\r
+                                       // Remove empty nodes\r
+                                       if (childCount === 0) {\r
+                                               dom.remove(node, 1);\r
+                                               return;\r
+                                       }\r
+\r
+                                       if (format.inline || format.wrapper) {\r
+                                               // Merges the current node with it's children of similar type to reduce the number of elements\r
+                                               if (!format.exact && childCount === 1)\r
+                                                       node = mergeStyles(node);\r
+\r
+                                               // Remove/merge children\r
+                                               each(formatList, function(format) {\r
+                                                       // Merge all children of similar type will move styles from child to parent\r
+                                                       // this: <span style="color:red"><b><span style="color:red; font-size:10px">text</span></b></span>\r
+                                                       // will become: <span style="color:red"><b><span style="font-size:10px">text</span></b></span>\r
+                                                       each(dom.select(format.inline, node), function(child) {\r
+                                                               removeFormat(format, vars, child, format.exact ? child : null);\r
+                                                       });\r
+                                               });\r
+\r
+                                               // Remove child if direct parent is of same type\r
+                                               if (matchNode(node.parentNode, name, vars)) {\r
+                                                       dom.remove(node, 1);\r
+                                                       node = 0;\r
+                                                       return TRUE;\r
+                                               }\r
+\r
+                                               // Look for parent with similar style format\r
+                                               if (format.merge_with_parents) {\r
+                                                       dom.getParent(node.parentNode, function(parent) {\r
+                                                               if (matchNode(parent, name, vars)) {\r
+                                                                       dom.remove(node, 1);\r
+                                                                       node = 0;\r
+                                                                       return TRUE;\r
+                                                               }\r
+                                                       });\r
+                                               }\r
+\r
+                                               // Merge next and previous siblings if they are similar <b>text</b><b>text</b> becomes <b>texttext</b>\r
+                                               if (node) {\r
+                                                       node = mergeSiblings(getNonWhiteSpaceSibling(node), node);\r
+                                                       node = mergeSiblings(node, getNonWhiteSpaceSibling(node, TRUE));\r
+                                               }\r
+                                       }\r
+                               });\r
+                       };\r
+\r
+                       if (format) {\r
+                               if (node) {\r
+                                       rng = dom.createRng();\r
+\r
+                                       rng.setStartBefore(node);\r
+                                       rng.setEndAfter(node);\r
+\r
+                                       applyRngStyle(expandRng(rng, formatList));\r
+                               } else {\r
+                                       if (!selection.isCollapsed() || !format.inline) {\r
+                                               // Apply formatting to selection\r
+                                               bookmark = selection.getBookmark();\r
+                                               applyRngStyle(expandRng(selection.getRng(TRUE), formatList));\r
+\r
+                                               selection.moveToBookmark(bookmark);\r
+                                               selection.setRng(moveStart(selection.getRng(TRUE)));\r
+                                               ed.nodeChanged();\r
+                                       } else\r
+                                               performCaretAction('apply', name, vars);\r
+                               }\r
+                       }\r
+               };\r
+\r
+               function remove(name, vars, node) {\r
+                       var formatList = get(name), format = formatList[0], bookmark, i, rng;\r
+\r
+                       function moveStart(rng) {\r
+                               var container = rng.startContainer,\r
+                                       offset = rng.startOffset,\r
+                                       walker, node, nodes, tmpNode;\r
+\r
+                               // Convert text node into index if possible\r
+                               if (container.nodeType == 3 && offset >= container.nodeValue.length - 1) {\r
+                                       container = container.parentNode;\r
+                                       offset = nodeIndex(container) + 1;\r
+                               }\r
+\r
+                               // Move startContainer/startOffset in to a suitable node\r
+                               if (container.nodeType == 1) {\r
+                                       nodes = container.childNodes;\r
+                                       container = nodes[Math.min(offset, nodes.length - 1)];\r
+                                       walker = new TreeWalker(container);\r
+\r
+                                       // If offset is at end of the parent node walk to the next one\r
+                                       if (offset > nodes.length - 1)\r
+                                               walker.next();\r
+\r
+                                       for (node = walker.current(); node; node = walker.next()) {\r
+                                               if (node.nodeType == 3 && !isWhiteSpaceNode(node)) {\r
+                                                       // IE has a "neat" feature where it moves the start node into the closest element\r
+                                                       // we can avoid this by inserting an element before it and then remove it after we set the selection\r
+                                                       tmpNode = dom.create('a', null, INVISIBLE_CHAR);\r
+                                                       node.parentNode.insertBefore(tmpNode, node);\r
+\r
+                                                       // Set selection and remove tmpNode\r
+                                                       rng.setStart(node, 0);\r
+                                                       selection.setRng(rng);\r
+                                                       dom.remove(tmpNode);\r
+\r
+                                                       return;\r
+                                               }\r
+                                       }\r
+                               }\r
+                       };\r
+\r
+                       // Merges the styles for each node\r
+                       function process(node) {\r
+                               var children, i, l;\r
+\r
+                               // Grab the children first since the nodelist might be changed\r
+                               children = tinymce.grep(node.childNodes);\r
+\r
+                               // Process current node\r
+                               for (i = 0, l = formatList.length; i < l; i++) {\r
+                                       if (removeFormat(formatList[i], vars, node, node))\r
+                                               break;\r
+                               }\r
+\r
+                               // Process the children\r
+                               if (format.deep) {\r
+                                       for (i = 0, l = children.length; i < l; i++)\r
+                                               process(children[i]);\r
+                               }\r
+                       };\r
+\r
+                       function findFormatRoot(container) {\r
+                               var formatRoot;\r
+\r
+                               // Find format root\r
+                               each(getParents(container.parentNode).reverse(), function(parent) {\r
+                                       var format;\r
+\r
+                                       // Find format root element\r
+                                       if (!formatRoot && parent.id != '_start' && parent.id != '_end') {\r
+                                               // Is the node matching the format we are looking for\r
+                                               format = matchNode(parent, name, vars);\r
+                                               if (format && format.split !== false)\r
+                                                       formatRoot = parent;\r
+                                       }\r
+                               });\r
+\r
+                               return formatRoot;\r
+                       };\r
+\r
+                       function wrapAndSplit(format_root, container, target, split) {\r
+                               var parent, clone, lastClone, firstClone, i, formatRootParent;\r
+\r
+                               // Format root found then clone formats and split it\r
+                               if (format_root) {\r
+                                       formatRootParent = format_root.parentNode;\r
+\r
+                                       for (parent = container.parentNode; parent && parent != formatRootParent; parent = parent.parentNode) {\r
+                                               clone = parent.cloneNode(FALSE);\r
+\r
+                                               for (i = 0; i < formatList.length; i++) {\r
+                                                       if (removeFormat(formatList[i], vars, clone, clone)) {\r
+                                                               clone = 0;\r
+                                                               break;\r
+                                                       }\r
+                                               }\r
+\r
+                                               // Build wrapper node\r
+                                               if (clone) {\r
+                                                       if (lastClone)\r
+                                                               clone.appendChild(lastClone);\r
+\r
+                                                       if (!firstClone)\r
+                                                               firstClone = clone;\r
+\r
+                                                       lastClone = clone;\r
+                                               }\r
+                                       }\r
+\r
+                                       // Never split block elements if the format is mixed\r
+                                       if (split && (!format.mixed || !isBlock(format_root)))\r
+                                               container = dom.split(format_root, container);\r
+\r
+                                       // Wrap container in cloned formats\r
+                                       if (lastClone) {\r
+                                               target.parentNode.insertBefore(lastClone, target);\r
+                                               firstClone.appendChild(target);\r
+                                       }\r
+                               }\r
+\r
+                               return container;\r
+                       };\r
+\r
+                       function splitToFormatRoot(container) {\r
+                               return wrapAndSplit(findFormatRoot(container), container, container, true);\r
+                       };\r
+\r
+                       function unwrap(start) {\r
+                               var node = dom.get(start ? '_start' : '_end'),\r
+                                       out = node[start ? 'firstChild' : 'lastChild'];\r
+\r
+                               // If the end is placed within the start the result will be removed\r
+                               // So this checks if the out node is a bookmark node if it is it\r
+                               // checks for another more suitable node\r
+                               if (isBookmarkNode(out))\r
+                                       out = out[start ? 'firstChild' : 'lastChild'];\r
+\r
+                               dom.remove(node, true);\r
+\r
+                               return out;\r
+                       };\r
+\r
+                       function removeRngStyle(rng) {\r
+                               var startContainer, endContainer;\r
+\r
+                               rng = expandRng(rng, formatList, TRUE);\r
+\r
+                               if (format.split) {\r
+                                       startContainer = getContainer(rng, TRUE);\r
+                                       endContainer = getContainer(rng);\r
+\r
+                                       if (startContainer != endContainer) {\r
+                                               // Wrap start/end nodes in span element since these might be cloned/moved\r
+                                               startContainer = wrap(startContainer, 'span', {id : '_start', _mce_type : 'bookmark'});\r
+                                               endContainer = wrap(endContainer, 'span', {id : '_end', _mce_type : 'bookmark'});\r
+\r
+                                               // Split start/end\r
+                                               splitToFormatRoot(startContainer);\r
+                                               splitToFormatRoot(endContainer);\r
+\r
+                                               // Unwrap start/end to get real elements again\r
+                                               startContainer = unwrap(TRUE);\r
+                                               endContainer = unwrap();\r
+                                       } else\r
+                                               startContainer = endContainer = splitToFormatRoot(startContainer);\r
+\r
+                                       // Update range positions since they might have changed after the split operations\r
+                                       rng.startContainer = startContainer.parentNode;\r
+                                       rng.startOffset = nodeIndex(startContainer);\r
+                                       rng.endContainer = endContainer.parentNode;\r
+                                       rng.endOffset = nodeIndex(endContainer) + 1;\r
+                               }\r
+\r
+                               // Remove items between start/end\r
+                               rangeUtils.walk(rng, function(nodes) {\r
+                                       each(nodes, function(node) {\r
+                                               process(node);\r
+                                       });\r
+                               });\r
+                       };\r
+\r
+                       // Handle node\r
+                       if (node) {\r
+                               rng = dom.createRng();\r
+                               rng.setStartBefore(node);\r
+                               rng.setEndAfter(node);\r
+                               removeRngStyle(rng);\r
+                               return;\r
+                       }\r
+\r
+                       if (!selection.isCollapsed() || !format.inline) {\r
+                               bookmark = selection.getBookmark();\r
+                               removeRngStyle(selection.getRng(TRUE));\r
+                               selection.moveToBookmark(bookmark);\r
+\r
+                               // Check if start element still has formatting then we are at: "<b>text|</b>text" and need to move the start into the next text node\r
+                               if (match(name, vars, selection.getStart())) {\r
+                                       moveStart(selection.getRng(true));\r
+                               }\r
+\r
+                               ed.nodeChanged();\r
+                       } else\r
+                               performCaretAction('remove', name, vars);\r
+               };\r
+\r
+               function toggle(name, vars, node) {\r
+                       if (match(name, vars, node))\r
+                               remove(name, vars, node);\r
+                       else\r
+                               apply(name, vars, node);\r
+               };\r
+\r
+               function matchNode(node, name, vars, similar) {\r
+                       var formatList = get(name), format, i, classes;\r
+\r
+                       function matchItems(node, format, item_name) {\r
+                               var key, value, items = format[item_name], i;\r
+\r
+                               // Check all items\r
+                               if (items) {\r
+                                       // Non indexed object\r
+                                       if (items.length === undefined) {\r
+                                               for (key in items) {\r
+                                                       if (items.hasOwnProperty(key)) {\r
+                                                               if (item_name === 'attributes')\r
+                                                                       value = dom.getAttrib(node, key);\r
+                                                               else\r
+                                                                       value = getStyle(node, key);\r
+\r
+                                                               if (similar && !value && !format.exact)\r
+                                                                       return;\r
+\r
+                                                               if ((!similar || format.exact) && !isEq(value, replaceVars(items[key], vars)))\r
+                                                                       return;\r
+                                                       }\r
+                                               }\r
+                                       } else {\r
+                                               // Only one match needed for indexed arrays\r
+                                               for (i = 0; i < items.length; i++) {\r
+                                                       if (item_name === 'attributes' ? dom.getAttrib(node, items[i]) : getStyle(node, items[i]))\r
+                                                               return format;\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               return format;\r
+                       };\r
+\r
+                       if (formatList && node) {\r
+                               // Check each format in list\r
+                               for (i = 0; i < formatList.length; i++) {\r
+                                       format = formatList[i];\r
+\r
+                                       // Name name, attributes, styles and classes\r
+                                       if (matchName(node, format) && matchItems(node, format, 'attributes') && matchItems(node, format, 'styles')) {\r
+                                               // Match classes\r
+                                               if (classes = format.classes) {\r
+                                                       for (i = 0; i < classes.length; i++) {\r
+                                                               if (!dom.hasClass(node, classes[i]))\r
+                                                                       return;\r
+                                                       }\r
+                                               }\r
+\r
+                                               return format;\r
+                                       }\r
+                               }\r
+                       }\r
+               };\r
+\r
+               function match(name, vars, node) {\r
+                       var startNode, i;\r
+\r
+                       function matchParents(node) {\r
+                               // Find first node with similar format settings\r
+                               node = dom.getParent(node, function(node) {\r
+                                       return !!matchNode(node, name, vars, true);\r
+                               });\r
+\r
+                               // Do an exact check on the similar format element\r
+                               return matchNode(node, name, vars);\r
+                       };\r
+\r
+                       // Check specified node\r
+                       if (node)\r
+                               return matchParents(node);\r
+\r
+                       // Check pending formats\r
+                       if (selection.isCollapsed()) {\r
+                               for (i = pendingFormats.apply.length - 1; i >= 0; i--) {\r
+                                       if (pendingFormats.apply[i].name == name)\r
+                                               return true;\r
+                               }\r
+\r
+                               for (i = pendingFormats.remove.length - 1; i >= 0; i--) {\r
+                                       if (pendingFormats.remove[i].name == name)\r
+                                               return false;\r
+                               }\r
+\r
+                               return matchParents(selection.getNode());\r
+                       }\r
+\r
+                       // Check selected node\r
+                       node = selection.getNode();\r
+                       if (matchParents(node))\r
+                               return TRUE;\r
+\r
+                       // Check start node if it's different\r
+                       startNode = selection.getStart();\r
+                       if (startNode != node) {\r
+                               if (matchParents(startNode))\r
+                                       return TRUE;\r
+                       }\r
+\r
+                       return FALSE;\r
+               };\r
+\r
+               function matchAll(names, vars) {\r
+                       var startElement, matchedFormatNames = [], checkedMap = {}, i, ni, name;\r
+\r
+                       // If the selection is collapsed then check pending formats\r
+                       if (selection.isCollapsed()) {\r
+                               for (ni = 0; ni < names.length; ni++) {\r
+                                       // If the name is to be removed, then stop it from being added\r
+                                       for (i = pendingFormats.remove.length - 1; i >= 0; i--) {\r
+                                               name = names[ni];\r
+\r
+                                               if (pendingFormats.remove[i].name == name) {\r
+                                                       checkedMap[name] = true;\r
+                                                       break;\r
+                                               }\r
+                                       }\r
+                               }\r
+\r
+                               // If the format is to be applied\r
+                               for (i = pendingFormats.apply.length - 1; i >= 0; i--) {\r
+                                       for (ni = 0; ni < names.length; ni++) {\r
+                                               name = names[ni];\r
+\r
+                                               if (!checkedMap[name] && pendingFormats.apply[i].name == name) {\r
+                                                       checkedMap[name] = true;\r
+                                                       matchedFormatNames.push(name);\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // Check start of selection for formats\r
+                       startElement = selection.getStart();\r
+                       dom.getParent(startElement, function(node) {\r
+                               var i, name;\r
+\r
+                               for (i = 0; i < names.length; i++) {\r
+                                       name = names[i];\r
+\r
+                                       if (!checkedMap[name] && matchNode(node, name, vars)) {\r
+                                               checkedMap[name] = true;\r
+                                               matchedFormatNames.push(name);\r
+                                       }\r
+                               }\r
+                       });\r
+\r
+                       return matchedFormatNames;\r
+               };\r
+\r
+               function canApply(name) {\r
+                       var formatList = get(name), startNode, parents, i, x, selector;\r
+\r
+                       if (formatList) {\r
+                               startNode = selection.getStart();\r
+                               parents = getParents(startNode);\r
+\r
+                               for (x = formatList.length - 1; x >= 0; x--) {\r
+                                       selector = formatList[x].selector;\r
+\r
+                                       // Format is not selector based, then always return TRUE\r
+                                       if (!selector)\r
+                                               return TRUE;\r
+\r
+                                       for (i = parents.length - 1; i >= 0; i--) {\r
+                                               if (dom.is(parents[i], selector))\r
+                                                       return TRUE;\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       return FALSE;\r
+               };\r
+\r
+               // Expose to public\r
+               tinymce.extend(this, {\r
+                       get : get,\r
+                       register : register,\r
+                       apply : apply,\r
+                       remove : remove,\r
+                       toggle : toggle,\r
+                       match : match,\r
+                       matchAll : matchAll,\r
+                       matchNode : matchNode,\r
+                       canApply : canApply\r
+               });\r
+\r
+               // Private functions\r
+\r
+               function matchName(node, format) {\r
+                       // Check for inline match\r
+                       if (isEq(node, format.inline))\r
+                               return TRUE;\r
+\r
+                       // Check for block match\r
+                       if (isEq(node, format.block))\r
+                               return TRUE;\r
+\r
+                       // Check for selector match\r
+                       if (format.selector)\r
+                               return dom.is(node, format.selector);\r
+               };\r
+\r
+               function isEq(str1, str2) {\r
+                       str1 = str1 || '';\r
+                       str2 = str2 || '';\r
+\r
+                       str1 = '' + (str1.nodeName || str1);\r
+                       str2 = '' + (str2.nodeName || str2);\r
+\r
+                       return str1.toLowerCase() == str2.toLowerCase();\r
+               };\r
+\r
+               function getStyle(node, name) {\r
+                       var styleVal = dom.getStyle(node, name);\r
+\r
+                       // Force the format to hex\r
+                       if (name == 'color' || name == 'backgroundColor')\r
+                               styleVal = dom.toHex(styleVal);\r
+\r
+                       // Opera will return bold as 700\r
+                       if (name == 'fontWeight' && styleVal == 700)\r
+                               styleVal = 'bold';\r
+\r
+                       return '' + styleVal;\r
+               };\r
+\r
+               function replaceVars(value, vars) {\r
+                       if (typeof(value) != "string")\r
+                               value = value(vars);\r
+                       else if (vars) {\r
+                               value = value.replace(/%(\w+)/g, function(str, name) {\r
+                                       return vars[name] || str;\r
+                               });\r
+                       }\r
+\r
+                       return value;\r
+               };\r
+\r
+               function isWhiteSpaceNode(node) {\r
+                       return node && node.nodeType === 3 && /^([\s\r\n]+|)$/.test(node.nodeValue);\r
+               };\r
+\r
+               function wrap(node, name, attrs) {\r
+                       var wrapper = dom.create(name, attrs);\r
+\r
+                       node.parentNode.insertBefore(wrapper, node);\r
+                       wrapper.appendChild(node);\r
+\r
+                       return wrapper;\r
+               };\r
+\r
+               function expandRng(rng, format, remove) {\r
+                       var startContainer = rng.startContainer,\r
+                               startOffset = rng.startOffset,\r
+                               endContainer = rng.endContainer,\r
+                               endOffset = rng.endOffset, sibling, lastIdx;\r
+\r
+                       // This function walks up the tree if there is no siblings before/after the node\r
+                       function findParentContainer(container, child_name, sibling_name, root) {\r
+                               var parent, child;\r
+\r
+                               root = root || dom.getRoot();\r
+\r
+                               for (;;) {\r
+                                       // Check if we can move up are we at root level or body level\r
+                                       parent = container.parentNode;\r
+\r
+                                       // Stop expanding on block elements or root depending on format\r
+                                       if (parent == root || (!format[0].block_expand && isBlock(parent)))\r
+                                               return container;\r
+\r
+                                       for (sibling = parent[child_name]; sibling && sibling != container; sibling = sibling[sibling_name]) {\r
+                                               if (sibling.nodeType == 1 && !isBookmarkNode(sibling))\r
+                                                       return container;\r
+\r
+                                               if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling))\r
+                                                       return container;\r
+                                       }\r
+\r
+                                       container = container.parentNode;\r
+                               }\r
+\r
+                               return container;\r
+                       };\r
+\r
+                       // If index based start position then resolve it\r
+                       if (startContainer.nodeType == 1 && startContainer.hasChildNodes()) {\r
+                               lastIdx = startContainer.childNodes.length - 1;\r
+                               startContainer = startContainer.childNodes[startOffset > lastIdx ? lastIdx : startOffset];\r
+\r
+                               if (startContainer.nodeType == 3)\r
+                                       startOffset = 0;\r
+                       }\r
+\r
+                       // If index based end position then resolve it\r
+                       if (endContainer.nodeType == 1 && endContainer.hasChildNodes()) {\r
+                               lastIdx = endContainer.childNodes.length - 1;\r
+                               endContainer = endContainer.childNodes[endOffset > lastIdx ? lastIdx : endOffset - 1];\r
+\r
+                               if (endContainer.nodeType == 3)\r
+                                       endOffset = endContainer.nodeValue.length;\r
+                       }\r
+\r
+                       // Exclude bookmark nodes if possible\r
+                       if (isBookmarkNode(startContainer.parentNode))\r
+                               startContainer = startContainer.parentNode;\r
+\r
+                       if (isBookmarkNode(startContainer))\r
+                               startContainer = startContainer.nextSibling || startContainer;\r
+\r
+                       if (isBookmarkNode(endContainer.parentNode))\r
+                               endContainer = endContainer.parentNode;\r
+\r
+                       if (isBookmarkNode(endContainer))\r
+                               endContainer = endContainer.previousSibling || endContainer;\r
+\r
+                       // Move start/end point up the tree if the leaves are sharp and if we are in different containers\r
+                       // Example * becomes !: !<p><b><i>*text</i><i>text*</i></b></p>!\r
+                       // This will reduce the number of wrapper elements that needs to be created\r
+                       // Move start point up the tree\r
+                       if (format[0].inline || format[0].block_expand) {\r
+                               startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling');\r
+                               endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling');\r
+                       }\r
+\r
+                       // Expand start/end container to matching selector\r
+                       if (format[0].selector && format[0].expand !== FALSE && !format[0].inline) {\r
+                               function findSelectorEndPoint(container, sibling_name) {\r
+                                       var parents, i, y;\r
+\r
+                                       if (container.nodeType == 3 && container.nodeValue.length == 0 && container[sibling_name])\r
+                                               container = container[sibling_name];\r
+\r
+                                       parents = getParents(container);\r
+                                       for (i = 0; i < parents.length; i++) {\r
+                                               for (y = 0; y < format.length; y++) {\r
+                                                       if (dom.is(parents[i], format[y].selector))\r
+                                                               return parents[i];\r
+                                               }\r
+                                       }\r
+\r
+                                       return container;\r
+                               };\r
+\r
+                               // Find new startContainer/endContainer if there is better one\r
+                               startContainer = findSelectorEndPoint(startContainer, 'previousSibling');\r
+                               endContainer = findSelectorEndPoint(endContainer, 'nextSibling');\r
+                       }\r
+\r
+                       // Expand start/end container to matching block element or text node\r
+                       if (format[0].block || format[0].selector) {\r
+                               function findBlockEndPoint(container, sibling_name, sibling_name2) {\r
+                                       var node;\r
+\r
+                                       // Expand to block of similar type\r
+                                       if (!format[0].wrapper)\r
+                                               node = dom.getParent(container, format[0].block);\r
+\r
+                                       // Expand to first wrappable block element or any block element\r
+                                       if (!node)\r
+                                               node = dom.getParent(container.nodeType == 3 ? container.parentNode : container, isBlock);\r
+\r
+                                       // Exclude inner lists from wrapping\r
+                                       if (node && format[0].wrapper)\r
+                                               node = getParents(node, 'ul,ol').reverse()[0] || node;\r
+\r
+                                       // Didn't find a block element look for first/last wrappable element\r
+                                       if (!node) {\r
+                                               node = container;\r
+\r
+                                               while (node[sibling_name] && !isBlock(node[sibling_name])) {\r
+                                                       node = node[sibling_name];\r
+\r
+                                                       // Break on BR but include it will be removed later on\r
+                                                       // we can't remove it now since we need to check if it can be wrapped\r
+                                                       if (isEq(node, 'br'))\r
+                                                               break;\r
+                                               }\r
+                                       }\r
+\r
+                                       return node || container;\r
+                               };\r
+\r
+                               // Find new startContainer/endContainer if there is better one\r
+                               startContainer = findBlockEndPoint(startContainer, 'previousSibling');\r
+                               endContainer = findBlockEndPoint(endContainer, 'nextSibling');\r
+\r
+                               // Non block element then try to expand up the leaf\r
+                               if (format[0].block) {\r
+                                       if (!isBlock(startContainer))\r
+                                               startContainer = findParentContainer(startContainer, 'firstChild', 'nextSibling');\r
+\r
+                                       if (!isBlock(endContainer))\r
+                                               endContainer = findParentContainer(endContainer, 'lastChild', 'previousSibling');\r
+                               }\r
+                       }\r
+\r
+                       // Setup index for startContainer\r
+                       if (startContainer.nodeType == 1) {\r
+                               startOffset = nodeIndex(startContainer);\r
+                               startContainer = startContainer.parentNode;\r
+                       }\r
+\r
+                       // Setup index for endContainer\r
+                       if (endContainer.nodeType == 1) {\r
+                               endOffset = nodeIndex(endContainer) + 1;\r
+                               endContainer = endContainer.parentNode;\r
+                       }\r
+\r
+                       // Return new range like object\r
+                       return {\r
+                               startContainer : startContainer,\r
+                               startOffset : startOffset,\r
+                               endContainer : endContainer,\r
+                               endOffset : endOffset\r
+                       };\r
+               }\r
+\r
+               function removeFormat(format, vars, node, compare_node) {\r
+                       var i, attrs, stylesModified;\r
+\r
+                       // Check if node matches format\r
+                       if (!matchName(node, format))\r
+                               return FALSE;\r
+\r
+                       // Should we compare with format attribs and styles\r
+                       if (format.remove != 'all') {\r
+                               // Remove styles\r
+                               each(format.styles, function(value, name) {\r
+                                       value = replaceVars(value, vars);\r
+\r
+                                       // Indexed array\r
+                                       if (typeof(name) === 'number') {\r
+                                               name = value;\r
+                                               compare_node = 0;\r
+                                       }\r
+\r
+                                       if (!compare_node || isEq(getStyle(compare_node, name), value))\r
+                                               dom.setStyle(node, name, '');\r
+\r
+                                       stylesModified = 1;\r
+                               });\r
+\r
+                               // Remove style attribute if it's empty\r
+                               if (stylesModified && dom.getAttrib(node, 'style') == '') {\r
+                                       node.removeAttribute('style');\r
+                                       node.removeAttribute('_mce_style');\r
+                               }\r
+\r
+                               // Remove attributes\r
+                               each(format.attributes, function(value, name) {\r
+                                       var valueOut;\r
+\r
+                                       value = replaceVars(value, vars);\r
+\r
+                                       // Indexed array\r
+                                       if (typeof(name) === 'number') {\r
+                                               name = value;\r
+                                               compare_node = 0;\r
+                                       }\r
+\r
+                                       if (!compare_node || isEq(dom.getAttrib(compare_node, name), value)) {\r
+                                               // Keep internal classes\r
+                                               if (name == 'class') {\r
+                                                       value = dom.getAttrib(node, name);\r
+                                                       if (value) {\r
+                                                               // Build new class value where everything is removed except the internal prefixed classes\r
+                                                               valueOut = '';\r
+                                                               each(value.split(/\s+/), function(cls) {\r
+                                                                       if (/mce\w+/.test(cls))\r
+                                                                               valueOut += (valueOut ? ' ' : '') + cls;\r
+                                                               });\r
+\r
+                                                               // We got some internal classes left\r
+                                                               if (valueOut) {\r
+                                                                       dom.setAttrib(node, name, valueOut);\r
+                                                                       return;\r
+                                                               }\r
+                                                       }\r
+                                               }\r
+\r
+                                               // IE6 has a bug where the attribute doesn't get removed correctly\r
+                                               if (name == "class")\r
+                                                       node.removeAttribute('className');\r
+\r
+                                               // Remove mce prefixed attributes\r
+                                               if (MCE_ATTR_RE.test(name))\r
+                                                       node.removeAttribute('_mce_' + name);\r
+\r
+                                               node.removeAttribute(name);\r
+                                       }\r
+                               });\r
+\r
+                               // Remove classes\r
+                               each(format.classes, function(value) {\r
+                                       value = replaceVars(value, vars);\r
+\r
+                                       if (!compare_node || dom.hasClass(compare_node, value))\r
+                                               dom.removeClass(node, value);\r
+                               });\r
+\r
+                               // Check for non internal attributes\r
+                               attrs = dom.getAttribs(node);\r
+                               for (i = 0; i < attrs.length; i++) {\r
+                                       if (attrs[i].nodeName.indexOf('_') !== 0)\r
+                                               return FALSE;\r
+                               }\r
+                       }\r
+\r
+                       // Remove the inline child if it's empty for example <b> or <span>\r
+                       if (format.remove != 'none') {\r
+                               removeNode(node, format);\r
+                               return TRUE;\r
+                       }\r
+               };\r
+\r
+               function removeNode(node, format) {\r
+                       var parentNode = node.parentNode, rootBlockElm;\r
+\r
+                       if (format.block) {\r
+                               if (!forcedRootBlock) {\r
+                                       function find(node, next, inc) {\r
+                                               node = getNonWhiteSpaceSibling(node, next, inc);\r
+\r
+                                               return !node || (node.nodeName == 'BR' || isBlock(node));\r
+                                       };\r
+\r
+                                       // Append BR elements if needed before we remove the block\r
+                                       if (isBlock(node) && !isBlock(parentNode)) {\r
+                                               if (!find(node, FALSE) && !find(node.firstChild, TRUE, 1))\r
+                                                       node.insertBefore(dom.create('br'), node.firstChild);\r
+\r
+                                               if (!find(node, TRUE) && !find(node.lastChild, FALSE, 1))\r
+                                                       node.appendChild(dom.create('br'));\r
+                                       }\r
+                               } else {\r
+                                       // Wrap the block in a forcedRootBlock if we are at the root of document\r
+                                       if (parentNode == dom.getRoot()) {\r
+                                               if (!format.list_block || !isEq(node, format.list_block)) {\r
+                                                       each(tinymce.grep(node.childNodes), function(node) {\r
+                                                               if (isValid(forcedRootBlock, node.nodeName.toLowerCase())) {\r
+                                                                       if (!rootBlockElm)\r
+                                                                               rootBlockElm = wrap(node, forcedRootBlock);\r
+                                                                       else\r
+                                                                               rootBlockElm.appendChild(node);\r
+                                                               } else\r
+                                                                       rootBlockElm = 0;\r
+                                                       });\r
+                                               }\r
+                                       }\r
+                               }\r
+                       }\r
+\r
+                       // Never remove nodes that isn't the specified inline element if a selector is specified too\r
+                       if (format.selector && format.inline && !isEq(format.inline, node))\r
+                               return;\r
+\r
+                       dom.remove(node, 1);\r
+               };\r
+\r
+               function getNonWhiteSpaceSibling(node, next, inc) {\r
+                       if (node) {\r
+                               next = next ? 'nextSibling' : 'previousSibling';\r
+\r
+                               for (node = inc ? node : node[next]; node; node = node[next]) {\r
+                                       if (node.nodeType == 1 || !isWhiteSpaceNode(node))\r
+                                               return node;\r
+                               }\r
+                       }\r
+               };\r
+\r
+               function isBookmarkNode(node) {\r
+                       return node && node.nodeType == 1 && node.getAttribute('_mce_type') == 'bookmark';\r
+               };\r
+\r
+               function mergeSiblings(prev, next) {\r
+                       var marker, sibling, tmpSibling;\r
+\r
+                       function compareElements(node1, node2) {\r
+                               // Not the same name\r
+                               if (node1.nodeName != node2.nodeName)\r
+                                       return FALSE;\r
+\r
+                               function getAttribs(node) {\r
+                                       var attribs = {};\r
+\r
+                                       each(dom.getAttribs(node), function(attr) {\r
+                                               var name = attr.nodeName.toLowerCase();\r
+\r
+                                               // Don't compare internal attributes or style\r
+                                               if (name.indexOf('_') !== 0 && name !== 'style')\r
+                                                       attribs[name] = dom.getAttrib(node, name);\r
+                                       });\r
+\r
+                                       return attribs;\r
+                               };\r
+\r
+                               function compareObjects(obj1, obj2) {\r
+                                       var value, name;\r
+\r
+                                       for (name in obj1) {\r
+                                               // Obj1 has item obj2 doesn't have\r
+                                               if (obj1.hasOwnProperty(name)) {\r
+                                                       value = obj2[name];\r
+\r
+                                                       // Obj2 doesn't have obj1 item\r
+                                                       if (value === undefined)\r
+                                                               return FALSE;\r
+\r
+                                                       // Obj2 item has a different value\r
+                                                       if (obj1[name] != value)\r
+                                                               return FALSE;\r
+\r
+                                                       // Delete similar value\r
+                                                       delete obj2[name];\r
+                                               }\r
+                                       }\r
+\r
+                                       // Check if obj 2 has something obj 1 doesn't have\r
+                                       for (name in obj2) {\r
+                                               // Obj2 has item obj1 doesn't have\r
+                                               if (obj2.hasOwnProperty(name))\r
+                                                       return FALSE;\r
+                                       }\r
+\r
+                                       return TRUE;\r
+                               };\r
+\r
+                               // Attribs are not the same\r
+                               if (!compareObjects(getAttribs(node1), getAttribs(node2)))\r
+                                       return FALSE;\r
+\r
+                               // Styles are not the same\r
+                               if (!compareObjects(dom.parseStyle(dom.getAttrib(node1, 'style')), dom.parseStyle(dom.getAttrib(node2, 'style'))))\r
+                                       return FALSE;\r
+\r
+                               return TRUE;\r
+                       };\r
+\r
+                       // Check if next/prev exists and that they are elements\r
+                       if (prev && next) {\r
+                               function findElementSibling(node, sibling_name) {\r
+                                       for (sibling = node; sibling; sibling = sibling[sibling_name]) {\r
+                                               if (sibling.nodeType == 3 && !isWhiteSpaceNode(sibling))\r
+                                                       return node;\r
+\r
+                                               if (sibling.nodeType == 1 && !isBookmarkNode(sibling))\r
+                                                       return sibling;\r
+                                       }\r
+\r
+                                       return node;\r
+                               };\r
+\r
+                               // If previous sibling is empty then jump over it\r
+                               prev = findElementSibling(prev, 'previousSibling');\r
+                               next = findElementSibling(next, 'nextSibling');\r
+\r
+                               // Compare next and previous nodes\r
+                               if (compareElements(prev, next)) {\r
+                                       // Append nodes between\r
+                                       for (sibling = prev.nextSibling; sibling && sibling != next;) {\r
+                                               tmpSibling = sibling;\r
+                                               sibling = sibling.nextSibling;\r
+                                               prev.appendChild(tmpSibling);\r
+                                       }\r
+\r
+                                       // Remove next node\r
+                                       dom.remove(next);\r
+\r
+                                       // Move children into prev node\r
+                                       each(tinymce.grep(next.childNodes), function(node) {\r
+                                               prev.appendChild(node);\r
+                                       });\r
+\r
+                                       return prev;\r
+                               }\r
+                       }\r
+\r
+                       return next;\r
+               };\r
+\r
+               function isTextBlock(name) {\r
+                       return /^(h[1-6]|p|div|pre|address|dl|dt|dd)$/.test(name);\r
+               };\r
+\r
+               function getContainer(rng, start) {\r
+                       var container, offset, lastIdx;\r
+\r
+                       container = rng[start ? 'startContainer' : 'endContainer'];\r
+                       offset = rng[start ? 'startOffset' : 'endOffset'];\r
+\r
+                       if (container.nodeType == 1) {\r
+                               lastIdx = container.childNodes.length - 1;\r
+\r
+                               if (!start && offset)\r
+                                       offset--;\r
+\r
+                               container = container.childNodes[offset > lastIdx ? lastIdx : offset];\r
+                       }\r
+\r
+                       return container;\r
+               };\r
+\r
+               function performCaretAction(type, name, vars) {\r
+                       var i, currentPendingFormats = pendingFormats[type],\r
+                               otherPendingFormats = pendingFormats[type == 'apply' ? 'remove' : 'apply'];\r
+\r
+                       function hasPending() {\r
+                               return pendingFormats.apply.length || pendingFormats.remove.length;\r
+                       };\r
+\r
+                       function resetPending() {\r
+                               pendingFormats.apply = [];\r
+                               pendingFormats.remove = [];\r
+                       };\r
+\r
+                       function perform(caret_node) {\r
+                               // Apply pending formats\r
+                               each(pendingFormats.apply.reverse(), function(item) {\r
+                                       apply(item.name, item.vars, caret_node);\r
+                               });\r
+\r
+                               // Remove pending formats\r
+                               each(pendingFormats.remove.reverse(), function(item) {\r
+                                       remove(item.name, item.vars, caret_node);\r
+                               });\r
+\r
+                               dom.remove(caret_node, 1);\r
+                               resetPending();\r
+                       };\r
+\r
+                       // Check if it already exists then ignore it\r
+                       for (i = currentPendingFormats.length - 1; i >= 0; i--) {\r
+                               if (currentPendingFormats[i].name == name)\r
+                                       return;\r
+                       }\r
+\r
+                       currentPendingFormats.push({name : name, vars : vars});\r
+\r
+                       // Check if it's in the other type, then remove it\r
+                       for (i = otherPendingFormats.length - 1; i >= 0; i--) {\r
+                               if (otherPendingFormats[i].name == name)\r
+                                       otherPendingFormats.splice(i, 1);\r
+                       }\r
+\r
+                       // Pending apply or remove formats\r
+                       if (hasPending()) {\r
+                               ed.getDoc().execCommand('FontName', false, 'mceinline');\r
+                               pendingFormats.lastRng = selection.getRng();\r
+\r
+                               // IE will convert the current word\r
+                               each(dom.select('font,span'), function(node) {\r
+                                       var bookmark;\r
+\r
+                                       if (isCaretNode(node)) {\r
+                                               bookmark = selection.getBookmark();\r
+                                               perform(node);\r
+                                               selection.moveToBookmark(bookmark);\r
+                                               ed.nodeChanged();\r
+                                       }\r
+                               });\r
+\r
+                               // Only register listeners once if we need to\r
+                               if (!pendingFormats.isListening && hasPending()) {\r
+                                       pendingFormats.isListening = true;\r
+\r
+                                       each('onKeyDown,onKeyUp,onKeyPress,onMouseUp'.split(','), function(event) {\r
+                                               ed[event].addToTop(function(ed, e) {\r
+                                                       // Do we have pending formats and is the selection moved has moved\r
+                                                       if (hasPending() && !tinymce.dom.RangeUtils.compareRanges(pendingFormats.lastRng, selection.getRng())) {\r
+                                                               each(dom.select('font,span'), function(node) {\r
+                                                                       var textNode, rng;\r
+\r
+                                                                       // Look for marker\r
+                                                                       if (isCaretNode(node)) {\r
+                                                                               textNode = node.firstChild;\r
+\r
+                                                                               if (textNode) {\r
+                                                                                       perform(node);\r
+\r
+                                                                                       rng = dom.createRng();\r
+                                                                                       rng.setStart(textNode, textNode.nodeValue.length);\r
+                                                                                       rng.setEnd(textNode, textNode.nodeValue.length);\r
+                                                                                       selection.setRng(rng);\r
+                                                                                       ed.nodeChanged();\r
+                                                                               } else\r
+                                                                                       dom.remove(node);\r
+                                                                       }\r
+                                                               });\r
+\r
+                                                               // Always unbind and clear pending styles on keyup\r
+                                                               if (e.type == 'keyup' || e.type == 'mouseup')\r
+                                                                       resetPending();\r
+                                                       }\r
+                                               });\r
+                                       });\r
+                               }\r
+                       }\r
+               };\r
+       };\r
+})(tinymce);\r
+\r
+tinymce.onAddEditor.add(function(tinymce, ed) {\r
+       var filters, fontSizes, dom, settings = ed.settings;\r
+\r
+       if (settings.inline_styles) {\r
+               fontSizes = tinymce.explode(settings.font_size_style_values);\r
+\r
+               function replaceWithSpan(node, styles) {\r
+                       dom.replace(dom.create('span', {\r
+                               style : styles\r
+                       }), node, 1);\r
+               };\r
+\r
+               filters = {\r
+                       font : function(dom, node) {\r
+                               replaceWithSpan(node, {\r
+                                       backgroundColor : node.style.backgroundColor,\r
+                                       color : node.color,\r
+                                       fontFamily : node.face,\r
+                                       fontSize : fontSizes[parseInt(node.size) - 1]\r
+                               });\r
+                       },\r
+\r
+                       u : function(dom, node) {\r
+                               replaceWithSpan(node, {\r
+                                       textDecoration : 'underline'\r
+                               });\r
+                       },\r
+\r
+                       strike : function(dom, node) {\r
+                               replaceWithSpan(node, {\r
+                                       textDecoration : 'line-through'\r
+                               });\r
+                       }\r
+               };\r
+\r
+               function convert(editor, params) {\r
+                       dom = editor.dom;\r
+\r
+                       if (settings.convert_fonts_to_spans) {\r
+                               tinymce.each(dom.select('font,u,strike', params.node), function(node) {\r
+                                       filters[node.nodeName.toLowerCase()](ed.dom, node);\r
+                               });\r
+                       }\r
+               };\r
+\r
+               ed.onPreProcess.add(convert);\r
+\r
+               ed.onInit.add(function() {\r
+                       ed.selection.onSetContent.add(convert);\r
+               });\r
+       }\r
+});\r
+\r
diff --git a/plugins/TinyMCE/js/utils/editable_selects.js b/plugins/TinyMCE/js/utils/editable_selects.js
new file mode 100644 (file)
index 0000000..fd943c0
--- /dev/null
@@ -0,0 +1,70 @@
+/**\r
+ * editable_selects.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+var TinyMCE_EditableSelects = {\r
+       editSelectElm : null,\r
+\r
+       init : function() {\r
+               var nl = document.getElementsByTagName("select"), i, d = document, o;\r
+\r
+               for (i=0; i<nl.length; i++) {\r
+                       if (nl[i].className.indexOf('mceEditableSelect') != -1) {\r
+                               o = new Option('(value)', '__mce_add_custom__');\r
+\r
+                               o.className = 'mceAddSelectValue';\r
+\r
+                               nl[i].options[nl[i].options.length] = o;\r
+                               nl[i].onchange = TinyMCE_EditableSelects.onChangeEditableSelect;\r
+                       }\r
+               }\r
+       },\r
+\r
+       onChangeEditableSelect : function(e) {\r
+               var d = document, ne, se = window.event ? window.event.srcElement : e.target;\r
+\r
+               if (se.options[se.selectedIndex].value == '__mce_add_custom__') {\r
+                       ne = d.createElement("input");\r
+                       ne.id = se.id + "_custom";\r
+                       ne.name = se.name + "_custom";\r
+                       ne.type = "text";\r
+\r
+                       ne.style.width = se.offsetWidth + 'px';\r
+                       se.parentNode.insertBefore(ne, se);\r
+                       se.style.display = 'none';\r
+                       ne.focus();\r
+                       ne.onblur = TinyMCE_EditableSelects.onBlurEditableSelectInput;\r
+                       ne.onkeydown = TinyMCE_EditableSelects.onKeyDown;\r
+                       TinyMCE_EditableSelects.editSelectElm = se;\r
+               }\r
+       },\r
+\r
+       onBlurEditableSelectInput : function() {\r
+               var se = TinyMCE_EditableSelects.editSelectElm;\r
+\r
+               if (se) {\r
+                       if (se.previousSibling.value != '') {\r
+                               addSelectValue(document.forms[0], se.id, se.previousSibling.value, se.previousSibling.value);\r
+                               selectByValue(document.forms[0], se.id, se.previousSibling.value);\r
+                       } else\r
+                               selectByValue(document.forms[0], se.id, '');\r
+\r
+                       se.style.display = 'inline';\r
+                       se.parentNode.removeChild(se.previousSibling);\r
+                       TinyMCE_EditableSelects.editSelectElm = null;\r
+               }\r
+       },\r
+\r
+       onKeyDown : function(e) {\r
+               e = e || window.event;\r
+\r
+               if (e.keyCode == 13)\r
+                       TinyMCE_EditableSelects.onBlurEditableSelectInput();\r
+       }\r
+};\r
diff --git a/plugins/TinyMCE/js/utils/form_utils.js b/plugins/TinyMCE/js/utils/form_utils.js
new file mode 100644 (file)
index 0000000..2617a26
--- /dev/null
@@ -0,0 +1,200 @@
+/**\r
+ * form_utils.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+var themeBaseURL = tinyMCEPopup.editor.baseURI.toAbsolute('themes/' + tinyMCEPopup.getParam("theme"));\r
+\r
+function getColorPickerHTML(id, target_form_element) {\r
+       var h = "";\r
+\r
+       h += '<a id="' + id + '_link" href="javascript:;" onclick="tinyMCEPopup.pickColor(event,\'' + target_form_element +'\');" onmousedown="return false;" class="pickcolor">';\r
+       h += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';\r
+\r
+       return h;\r
+}\r
+\r
+function updateColor(img_id, form_element_id) {\r
+       document.getElementById(img_id).style.backgroundColor = document.forms[0].elements[form_element_id].value;\r
+}\r
+\r
+function setBrowserDisabled(id, state) {\r
+       var img = document.getElementById(id);\r
+       var lnk = document.getElementById(id + "_link");\r
+\r
+       if (lnk) {\r
+               if (state) {\r
+                       lnk.setAttribute("realhref", lnk.getAttribute("href"));\r
+                       lnk.removeAttribute("href");\r
+                       tinyMCEPopup.dom.addClass(img, 'disabled');\r
+               } else {\r
+                       if (lnk.getAttribute("realhref"))\r
+                               lnk.setAttribute("href", lnk.getAttribute("realhref"));\r
+\r
+                       tinyMCEPopup.dom.removeClass(img, 'disabled');\r
+               }\r
+       }\r
+}\r
+\r
+function getBrowserHTML(id, target_form_element, type, prefix) {\r
+       var option = prefix + "_" + type + "_browser_callback", cb, html;\r
+\r
+       cb = tinyMCEPopup.getParam(option, tinyMCEPopup.getParam("file_browser_callback"));\r
+\r
+       if (!cb)\r
+               return "";\r
+\r
+       html = "";\r
+       html += '<a id="' + id + '_link" href="javascript:openBrowser(\'' + id + '\',\'' + target_form_element + '\', \'' + type + '\',\'' + option + '\');" onmousedown="return false;" class="browse">';\r
+       html += '<span id="' + id + '" title="' + tinyMCEPopup.getLang('browse') + '">&nbsp;</span></a>';\r
+\r
+       return html;\r
+}\r
+\r
+function openBrowser(img_id, target_form_element, type, option) {\r
+       var img = document.getElementById(img_id);\r
+\r
+       if (img.className != "mceButtonDisabled")\r
+               tinyMCEPopup.openBrowser(target_form_element, type, option);\r
+}\r
+\r
+function selectByValue(form_obj, field_name, value, add_custom, ignore_case) {\r
+       if (!form_obj || !form_obj.elements[field_name])\r
+               return;\r
+\r
+       var sel = form_obj.elements[field_name];\r
+\r
+       var found = false;\r
+       for (var i=0; i<sel.options.length; i++) {\r
+               var option = sel.options[i];\r
+\r
+               if (option.value == value || (ignore_case && option.value.toLowerCase() == value.toLowerCase())) {\r
+                       option.selected = true;\r
+                       found = true;\r
+               } else\r
+                       option.selected = false;\r
+       }\r
+\r
+       if (!found && add_custom && value != '') {\r
+               var option = new Option(value, value);\r
+               option.selected = true;\r
+               sel.options[sel.options.length] = option;\r
+               sel.selectedIndex = sel.options.length - 1;\r
+       }\r
+\r
+       return found;\r
+}\r
+\r
+function getSelectValue(form_obj, field_name) {\r
+       var elm = form_obj.elements[field_name];\r
+\r
+       if (elm == null || elm.options == null || elm.selectedIndex === -1)\r
+               return "";\r
+\r
+       return elm.options[elm.selectedIndex].value;\r
+}\r
+\r
+function addSelectValue(form_obj, field_name, name, value) {\r
+       var s = form_obj.elements[field_name];\r
+       var o = new Option(name, value);\r
+       s.options[s.options.length] = o;\r
+}\r
+\r
+function addClassesToList(list_id, specific_option) {\r
+       // Setup class droplist\r
+       var styleSelectElm = document.getElementById(list_id);\r
+       var styles = tinyMCEPopup.getParam('theme_advanced_styles', false);\r
+       styles = tinyMCEPopup.getParam(specific_option, styles);\r
+\r
+       if (styles) {\r
+               var stylesAr = styles.split(';');\r
+\r
+               for (var i=0; i<stylesAr.length; i++) {\r
+                       if (stylesAr != "") {\r
+                               var key, value;\r
+\r
+                               key = stylesAr[i].split('=')[0];\r
+                               value = stylesAr[i].split('=')[1];\r
+\r
+                               styleSelectElm.options[styleSelectElm.length] = new Option(key, value);\r
+                       }\r
+               }\r
+       } else {\r
+               tinymce.each(tinyMCEPopup.editor.dom.getClasses(), function(o) {\r
+                       styleSelectElm.options[styleSelectElm.length] = new Option(o.title || o['class'], o['class']);\r
+               });\r
+       }\r
+}\r
+\r
+function isVisible(element_id) {\r
+       var elm = document.getElementById(element_id);\r
+\r
+       return elm && elm.style.display != "none";\r
+}\r
+\r
+function convertRGBToHex(col) {\r
+       var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");\r
+\r
+       var rgb = col.replace(re, "$1,$2,$3").split(',');\r
+       if (rgb.length == 3) {\r
+               r = parseInt(rgb[0]).toString(16);\r
+               g = parseInt(rgb[1]).toString(16);\r
+               b = parseInt(rgb[2]).toString(16);\r
+\r
+               r = r.length == 1 ? '0' + r : r;\r
+               g = g.length == 1 ? '0' + g : g;\r
+               b = b.length == 1 ? '0' + b : b;\r
+\r
+               return "#" + r + g + b;\r
+       }\r
+\r
+       return col;\r
+}\r
+\r
+function convertHexToRGB(col) {\r
+       if (col.indexOf('#') != -1) {\r
+               col = col.replace(new RegExp('[^0-9A-F]', 'gi'), '');\r
+\r
+               r = parseInt(col.substring(0, 2), 16);\r
+               g = parseInt(col.substring(2, 4), 16);\r
+               b = parseInt(col.substring(4, 6), 16);\r
+\r
+               return "rgb(" + r + "," + g + "," + b + ")";\r
+       }\r
+\r
+       return col;\r
+}\r
+\r
+function trimSize(size) {\r
+       return size.replace(/([0-9\.]+)px|(%|in|cm|mm|em|ex|pt|pc)/, '$1$2');\r
+}\r
+\r
+function getCSSSize(size) {\r
+       size = trimSize(size);\r
+\r
+       if (size == "")\r
+               return "";\r
+\r
+       // Add px\r
+       if (/^[0-9]+$/.test(size))\r
+               size += 'px';\r
+\r
+       return size;\r
+}\r
+\r
+function getStyle(elm, attrib, style) {\r
+       var val = tinyMCEPopup.dom.getAttrib(elm, attrib);\r
+\r
+       if (val != '')\r
+               return '' + val;\r
+\r
+       if (typeof(style) == 'undefined')\r
+               style = attrib;\r
+\r
+       return tinyMCEPopup.dom.getStyle(elm, style);\r
+}\r
diff --git a/plugins/TinyMCE/js/utils/mctabs.js b/plugins/TinyMCE/js/utils/mctabs.js
new file mode 100644 (file)
index 0000000..825d4c1
--- /dev/null
@@ -0,0 +1,77 @@
+/**\r
+ * mctabs.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+function MCTabs() {\r
+       this.settings = [];\r
+};\r
+\r
+MCTabs.prototype.init = function(settings) {\r
+       this.settings = settings;\r
+};\r
+\r
+MCTabs.prototype.getParam = function(name, default_value) {\r
+       var value = null;\r
+\r
+       value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name];\r
+\r
+       // Fix bool values\r
+       if (value == "true" || value == "false")\r
+               return (value == "true");\r
+\r
+       return value;\r
+};\r
+\r
+MCTabs.prototype.displayTab = function(tab_id, panel_id) {\r
+       var panelElm, panelContainerElm, tabElm, tabContainerElm, selectionClass, nodes, i;\r
+\r
+       panelElm= document.getElementById(panel_id);\r
+       panelContainerElm = panelElm ? panelElm.parentNode : null;\r
+       tabElm = document.getElementById(tab_id);\r
+       tabContainerElm = tabElm ? tabElm.parentNode : null;\r
+       selectionClass = this.getParam('selection_class', 'current');\r
+\r
+       if (tabElm && tabContainerElm) {\r
+               nodes = tabContainerElm.childNodes;\r
+\r
+               // Hide all other tabs\r
+               for (i = 0; i < nodes.length; i++) {\r
+                       if (nodes[i].nodeName == "LI")\r
+                               nodes[i].className = '';\r
+               }\r
+\r
+               // Show selected tab\r
+               tabElm.className = 'current';\r
+       }\r
+\r
+       if (panelElm && panelContainerElm) {\r
+               nodes = panelContainerElm.childNodes;\r
+\r
+               // Hide all other panels\r
+               for (i = 0; i < nodes.length; i++) {\r
+                       if (nodes[i].nodeName == "DIV")\r
+                               nodes[i].className = 'panel';\r
+               }\r
+\r
+               // Show selected panel\r
+               panelElm.className = 'current';\r
+       }\r
+};\r
+\r
+MCTabs.prototype.getAnchor = function() {\r
+       var pos, url = document.location.href;\r
+\r
+       if ((pos = url.lastIndexOf('#')) != -1)\r
+               return url.substring(pos + 1);\r
+\r
+       return "";\r
+};\r
+\r
+// Global instance\r
+var mcTabs = new MCTabs();\r
diff --git a/plugins/TinyMCE/js/utils/validate.js b/plugins/TinyMCE/js/utils/validate.js
new file mode 100644 (file)
index 0000000..a6fcf97
--- /dev/null
@@ -0,0 +1,220 @@
+/**\r
+ * validate.js\r
+ *\r
+ * Copyright 2009, Moxiecode Systems AB\r
+ * Released under LGPL License.\r
+ *\r
+ * License: http://tinymce.moxiecode.com/license\r
+ * Contributing: http://tinymce.moxiecode.com/contributing\r
+ */\r
+\r
+/**\r
+       // String validation:\r
+\r
+       if (!Validator.isEmail('myemail'))\r
+               alert('Invalid email.');\r
+\r
+       // Form validation:\r
+\r
+       var f = document.forms['myform'];\r
+\r
+       if (!Validator.isEmail(f.myemail))\r
+               alert('Invalid email.');\r
+*/\r
+\r
+var Validator = {\r
+       isEmail : function(s) {\r
+               return this.test(s, '^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$');\r
+       },\r
+\r
+       isAbsUrl : function(s) {\r
+               return this.test(s, '^(news|telnet|nttp|file|http|ftp|https)://[-A-Za-z0-9\\.]+\\/?.*$');\r
+       },\r
+\r
+       isSize : function(s) {\r
+               return this.test(s, '^[0-9]+(%|in|cm|mm|em|ex|pt|pc|px)?$');\r
+       },\r
+\r
+       isId : function(s) {\r
+               return this.test(s, '^[A-Za-z_]([A-Za-z0-9_])*$');\r
+       },\r
+\r
+       isEmpty : function(s) {\r
+               var nl, i;\r
+\r
+               if (s.nodeName == 'SELECT' && s.selectedIndex < 1)\r
+                       return true;\r
+\r
+               if (s.type == 'checkbox' && !s.checked)\r
+                       return true;\r
+\r
+               if (s.type == 'radio') {\r
+                       for (i=0, nl = s.form.elements; i<nl.length; i++) {\r
+                               if (nl[i].type == "radio" && nl[i].name == s.name && nl[i].checked)\r
+                                       return false;\r
+                       }\r
+\r
+                       return true;\r
+               }\r
+\r
+               return new RegExp('^\\s*$').test(s.nodeType == 1 ? s.value : s);\r
+       },\r
+\r
+       isNumber : function(s, d) {\r
+               return !isNaN(s.nodeType == 1 ? s.value : s) && (!d || !this.test(s, '^-?[0-9]*\\.[0-9]*$'));\r
+       },\r
+\r
+       test : function(s, p) {\r
+               s = s.nodeType == 1 ? s.value : s;\r
+\r
+               return s == '' || new RegExp(p).test(s);\r
+       }\r
+};\r
+\r
+var AutoValidator = {\r
+       settings : {\r
+               id_cls : 'id',\r
+               int_cls : 'int',\r
+               url_cls : 'url',\r
+               number_cls : 'number',\r
+               email_cls : 'email',\r
+               size_cls : 'size',\r
+               required_cls : 'required',\r
+               invalid_cls : 'invalid',\r
+               min_cls : 'min',\r
+               max_cls : 'max'\r
+       },\r
+\r
+       init : function(s) {\r
+               var n;\r
+\r
+               for (n in s)\r
+                       this.settings[n] = s[n];\r
+       },\r
+\r
+       validate : function(f) {\r
+               var i, nl, s = this.settings, c = 0;\r
+\r
+               nl = this.tags(f, 'label');\r
+               for (i=0; i<nl.length; i++)\r
+                       this.removeClass(nl[i], s.invalid_cls);\r
+\r
+               c += this.validateElms(f, 'input');\r
+               c += this.validateElms(f, 'select');\r
+               c += this.validateElms(f, 'textarea');\r
+\r
+               return c == 3;\r
+       },\r
+\r
+       invalidate : function(n) {\r
+               this.mark(n.form, n);\r
+       },\r
+\r
+       reset : function(e) {\r
+               var t = ['label', 'input', 'select', 'textarea'];\r
+               var i, j, nl, s = this.settings;\r
+\r
+               if (e == null)\r
+                       return;\r
+\r
+               for (i=0; i<t.length; i++) {\r
+                       nl = this.tags(e.form ? e.form : e, t[i]);\r
+                       for (j=0; j<nl.length; j++)\r
+                               this.removeClass(nl[j], s.invalid_cls);\r
+               }\r
+       },\r
+\r
+       validateElms : function(f, e) {\r
+               var nl, i, n, s = this.settings, st = true, va = Validator, v;\r
+\r
+               nl = this.tags(f, e);\r
+               for (i=0; i<nl.length; i++) {\r
+                       n = nl[i];\r
+\r
+                       this.removeClass(n, s.invalid_cls);\r
+\r
+                       if (this.hasClass(n, s.required_cls) && va.isEmpty(n))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.number_cls) && !va.isNumber(n))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.int_cls) && !va.isNumber(n, true))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.url_cls) && !va.isAbsUrl(n))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.email_cls) && !va.isEmail(n))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.size_cls) && !va.isSize(n))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.id_cls) && !va.isId(n))\r
+                               st = this.mark(f, n);\r
+\r
+                       if (this.hasClass(n, s.min_cls, true)) {\r
+                               v = this.getNum(n, s.min_cls);\r
+\r
+                               if (isNaN(v) || parseInt(n.value) < parseInt(v))\r
+                                       st = this.mark(f, n);\r
+                       }\r
+\r
+                       if (this.hasClass(n, s.max_cls, true)) {\r
+                               v = this.getNum(n, s.max_cls);\r
+\r
+                               if (isNaN(v) || parseInt(n.value) > parseInt(v))\r
+                                       st = this.mark(f, n);\r
+                       }\r
+               }\r
+\r
+               return st;\r
+       },\r
+\r
+       hasClass : function(n, c, d) {\r
+               return new RegExp('\\b' + c + (d ? '[0-9]+' : '') + '\\b', 'g').test(n.className);\r
+       },\r
+\r
+       getNum : function(n, c) {\r
+               c = n.className.match(new RegExp('\\b' + c + '([0-9]+)\\b', 'g'))[0];\r
+               c = c.replace(/[^0-9]/g, '');\r
+\r
+               return c;\r
+       },\r
+\r
+       addClass : function(n, c, b) {\r
+               var o = this.removeClass(n, c);\r
+               n.className = b ? c + (o != '' ? (' ' + o) : '') : (o != '' ? (o + ' ') : '') + c;\r
+       },\r
+\r
+       removeClass : function(n, c) {\r
+               c = n.className.replace(new RegExp("(^|\\s+)" + c + "(\\s+|$)"), ' ');\r
+               return n.className = c != ' ' ? c : '';\r
+       },\r
+\r
+       tags : function(f, s) {\r
+               return f.getElementsByTagName(s);\r
+       },\r
+\r
+       mark : function(f, n) {\r
+               var s = this.settings;\r
+\r
+               this.addClass(n, s.invalid_cls);\r
+               this.markLabels(f, n, s.invalid_cls);\r
+\r
+               return false;\r
+       },\r
+\r
+       markLabels : function(f, n, ic) {\r
+               var nl, i;\r
+\r
+               nl = this.tags(f, "label");\r
+               for (i=0; i<nl.length; i++) {\r
+                       if (nl[i].getAttribute("for") == n.id || nl[i].htmlFor == n.id)\r
+                               this.addClass(nl[i], ic);\r
+               }\r
+\r
+               return null;\r
+       }\r
+};\r
diff --git a/plugins/TinyMCE/locale/Sample.po b/plugins/TinyMCE/locale/Sample.po
new file mode 100644 (file)
index 0000000..a52c4ec
--- /dev/null
@@ -0,0 +1,56 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-01 14:58-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
+
+#: hello.php:115 SamplePlugin.php:266
+msgid "Hello"
+msgstr ""
+
+#: hello.php:117 hello.php:141
+#, php-format
+msgid "Hello, %s"
+msgstr ""
+
+#: hello.php:138
+msgid "Hello, stranger!"
+msgstr ""
+
+#: hello.php:143
+#, php-format
+msgid "I have greeted you %d time."
+msgid_plural "I have greeted you %d times."
+msgstr[0] ""
+msgstr[1] ""
+
+#: SamplePlugin.php:266
+msgid "A warm greeting"
+msgstr ""
+
+#: SamplePlugin.php:277
+msgid "A sample plugin to show basics of development for new hackers."
+msgstr ""
+
+#: User_greeting_count.php:163
+#, php-format
+msgid "Could not save new greeting count for %d"
+msgstr ""
+
+#: User_greeting_count.php:176
+#, php-format
+msgid "Could not increment greeting count for %d"
+msgstr ""
index af9ed8d208aab46b00309d1097522899cd4e430a..f10f2084244985ca4dcf8168cfe987365855cdf7 100755 (executable)
@@ -94,15 +94,15 @@ function do_translatewiki_plugin($basedir, $plugin)
 BASIC:
   id: out-statusnet-{$pluginlc}
   label: StatusNet - {$plugin}
-  description: "{{int:bw-desc-statusnet-plugin-{$pluginlc}}}"
   namespace: NS_STATUSNET
+  description: "{{int:bw-desc-statusnet-plugin}}"
+  class: FileBasedMessageGroup
   display: out/statusnet/{$pluginlc}
-  class: GettextMessageGroup
 
 FILES:
   class: GettextFFS
-  sourcePattern: %GROUPROOT%/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po
-  targetPattern: plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po
+  sourcePattern: %GROUPROOT%/statusnet/plugins/{$plugin}/locale/{$plugin}.pot
+  targetPattern: statusnet/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po
   codeMap:
     en-gb: en_GB
     no: nb