diff --git a/QvitterPlugin.php b/QvitterPlugin.php index 4b4986c..be2f26d 100644 --- a/QvitterPlugin.php +++ b/QvitterPlugin.php @@ -62,8 +62,8 @@ class QvitterPlugin extends Plugin { // DEFAULT BACKGROUND IMAGE $settings['sitebackground'] = 'img/vagnsmossen.jpg'; - // DEFAULT FAVICON - $settings['favicon'] = 'img/favicon.ico?v=5'; + // FAVICON PATH (we've used realfavicongenerator.net to generate the icons) + $settings['favicon_path'] = Plugin::staticPath('Qvitter', '').'img/gnusocial-favicons/'; // DEFAULT SPRITE $settings['sprite'] = Plugin::staticPath('Qvitter', '').'img/sprite.png?v=41'; @@ -703,11 +703,33 @@ class QvitterPlugin extends Plugin { // reply-to profile url try { $reply = $notice->getParent(); - $twitter_status['in_reply_to_profileurl'] = $reply->getProfile()->getUrl(); + $reply_profile = $reply->getProfile(); + $twitter_status['in_reply_to_profileurl'] = $reply_profile->getUrl(); + $twitter_status['in_reply_to_ostatus_uri'] = $reply_profile->getUri(); } catch (ServerException $e) { $twitter_status['in_reply_to_profileurl'] = null; + $twitter_status['in_reply_to_ostatus_uri'] = null; } + // attentions + try { + $attentions = $notice->getAttentionProfiles(); + $attentions_array = array(); + foreach ($attentions as $attn) { + if(!$attn->isGroup()) { + $attentions_array[] = array( + 'id' => $attn->getID(), + 'screen_name' => $attn->getNickname(), + 'fullname' => $attn->getStreamName(), + 'profileurl' => $attn->getUrl(), + 'ostatus_uri' => $attn->getUri(), + ); + } + } + $twitter_status['attentions'] = $attentions_array; + } catch (Exception $e) { + // + } // fave number $faves = Fave::byNotice($notice); diff --git a/README.md b/README.md index b863b71..a83def1 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ $config['site']['qvitter']['timebetweenpolling'] = 5000; $config['site']['qvitter']['urlshortenerapiurl'] = 'http://qttr.at/yourls-api.php'; // if your site is on HTTPS, use url to shortener.php here $config['site']['qvitter']['urlshortenersignature'] = 'b6afeec983'; $config['site']['qvitter']['sitebackground'] = 'img/vagnsmossen.jpg'; -$config['site']['qvitter']['favicon'] = 'img/favicon.ico?v=4'; +$config['site']['qvitter']['favicon_path'] = Plugin::staticPath('Qvitter', '').'img/gnusocial-favicons/'; $config['site']['qvitter']['sprite'] = Plugin::staticPath('Qvitter', '').'img/sprite.png?v=40'; $config['site']['qvitter']['enablewelcometext'] = true; // $config['site']['qvitter']['customwelcometext']['sv'] = '

Välkommen till Quitter.se – en federerad1 mikrobloggsallmänning!

Etc etc...

'; diff --git a/actions/apiqvitterblocks.php b/actions/apiqvitterblocks.php index ebeed52..f6d7bb2 100644 --- a/actions/apiqvitterblocks.php +++ b/actions/apiqvitterblocks.php @@ -109,14 +109,18 @@ class ApiQvitterBlocksAction extends ApiPrivateAuthAction $blocks = QvitterBlocked::getBlocked($this->target->id, $offset, $limit); - $profiles = array(); + if($blocks) { + $profiles = array(); - while ($blocks->fetch()) { - $this_profile_block = clone($blocks); - $profiles[] = $this->getTargetProfile($this_profile_block->blocked); + while ($blocks->fetch()) { + $this_profile_block = clone($blocks); + $profiles[] = $this->getTargetProfile($this_profile_block->blocked); + } + return $profiles; + } else { + return false; } - return $profiles; } /** diff --git a/actions/apitimelinefriendshiddenreplies.php b/actions/apitimelinefriendshiddenreplies.php index c47fdab..f3f5df6 100644 --- a/actions/apitimelinefriendshiddenreplies.php +++ b/actions/apitimelinefriendshiddenreplies.php @@ -390,6 +390,8 @@ class RawInboxNoticeStreamHiddenReplies extends NoticeStream protected $target = null; protected $inbox = null; + protected $selectVerbs = array(); + /** * Constructor * @@ -397,6 +399,7 @@ class RawInboxNoticeStreamHiddenReplies extends NoticeStream */ function __construct(Profile $target) { + parent::__construct(); $this->target = $target; } @@ -453,9 +456,17 @@ class RawInboxNoticeStreamHiddenReplies extends NoticeStream if (!empty($max_id)) { $notice->whereAdd(sprintf('notice.id <= %d', $max_id)); } - if (!empty($this->selectVerbs)) { + + // We have changed how selectVerbs work in GNUsocial, so it's an associative array + // where each verb is in the key and then the value (true/false) is how to filter. + // $this->unselectVerbs is always unset in newer GNUsocials. + if (!isset($this->unselectVerbs)) { + self::filterVerbs($notice, $this->selectVerbs); + } elseif (!empty($this->selectVerbs)) { + // old behaviour was just if there were selectVerbs set $notice->whereAddIn('verb', $this->selectVerbs, $notice->columnType('verb')); } + $notice->limit($offset, $limit); // notice.id will give us even really old posts, which were // recently imported. For example if a remote instance had diff --git a/actions/qvitter.php b/actions/qvitter.php index b7edba9..19d131d 100644 --- a/actions/qvitter.php +++ b/actions/qvitter.php @@ -86,6 +86,7 @@ class QvitterAction extends ApiAction $apiroot = common_path('api/', StatusNet::isHTTPS()); $attachmentroot = common_path('attachment/', StatusNet::isHTTPS()); $instanceurl = common_path('', StatusNet::isHTTPS()); + $favicon_path = QvitterPlugin::settings("favicon_path"); // user's browser's language setting $user_browser_language = 'en'; // use english if we can't find the browser language @@ -108,6 +109,8 @@ class QvitterAction extends ApiAction } } + + ?> @@ -117,7 +120,26 @@ class QvitterAction extends ApiAction - "> + + + + + + + + + + + + + + + + + + + + arg('notice') && array_key_exists('Oembed', StatusNet::getActivePlugins())) { $notice = Notice::getKV('id', $this->arg('notice')); + if($notice instanceof Notice) { - if ($notice->isLocal()) { + $profile = $notice->getProfile(); + if ($notice->isLocal() && $profile instanceof Profile) { + + // maybe get thumbnail url + $embed_thumbnail_url = false; + $attachments = $notice->attachments(); + if (!empty($attachments)) { + foreach ($attachments as $attachment) { + if(is_object($attachment)) { + try { + $thumb = $attachment->getThumbnail(); + } catch (ServerException $e) { + // + } + if(!empty($thumb) && method_exists('File_thumbnail','url')) { + try { + $embed_thumbnail_url = File_thumbnail::url($thumb->filename); + break; // only first one + } catch (ClientException $e) { + // + } + } + } + } + } + try { $notice_url = $notice->getUrl(); - print ''; - print ''; + print ''."\n"; + print ''."\n"; } catch (Exception $e) { // } + + // twitter cards + print ''."\n"; + print ''."\n"; + print ''."\n"; + if($embed_thumbnail_url) { + print ''."\n"; + } + + // opengraph + print ''."\n"; + print ''."\n"; + if($embed_thumbnail_url) { + print ''."\n"; + } } } } + ?> \ + \ ' + requeetHtml + '\ ' + ostatusHtml + '\
\ diff --git a/js/misc-functions.js b/js/misc-functions.js index 256da91..64b11fa 100644 --- a/js/misc-functions.js +++ b/js/misc-functions.js @@ -570,12 +570,12 @@ function cacheSyntaxHighlighting() { window.syntaxHighlightingRegexps = Object(); var allDomains = '(abb|abbott|abogado|ac|academy|accenture|accountant|accountants|active|actor|ad|ads|adult|ae|aero|af|afl|ag|agency|ai|aig|airforce|al|allfinanz|alsace|am|amsterdam|an|android|ao|apartments|aq|aquarelle|ar|archi|army|arpa|as|asia|associates|at|attorney|au|auction|audio|auto|autos|aw|ax|axa|az|ba|band|bank|bar|barclaycard|barclays|bargains|bauhaus|bayern|bb|bbc|bbva|bd|be|beer|berlin|best|bf|bg|bh|bi|bible|bid|bike|bingo|bio|biz|bj|bl|black|blackfriday|bloomberg|blue|bm|bmw|bn|bnpparibas|bo|boats|bond|boo|boutique|bq|br|bridgestone|broker|brother|brussels|bs|bt|budapest|build|builders|business|buzz|bv|bw|by|bz|bzh|ca|cab|cafe|cal|camera|camp|cancerresearch|canon|capetown|capital|caravan|cards|care|career|careers|cars|cartier|casa|cash|casino|cat|catering|cbn|cc|cd|center|ceo|cern|cf|cfa|cfd|cg|ch|channel|chat|cheap|chloe|christmas|chrome|church|ci|cisco|citic|city|ck|cl|claims|cleaning|click|clinic|clothing|club|cm|cn|co|coach|codes|coffee|college|cologne|com|community|company|computer|condos|construction|consulting|contractors|cooking|cool|coop|corsica|country|coupons|courses|cr|credit|creditcard|cricket|crs|cruises|cu|cuisinella|cv|cw|cx|cy|cymru|cyou|cz|dabur|dad|dance|date|dating|datsun|day|dclk|de|deals|degree|delivery|democrat|dental|dentist|desi|design|dev|diamonds|diet|digital|direct|directory|discount|dj|dk|dm|dnp|do|docs|dog|doha|domains|doosan|download|durban|dvag|dz|earth|eat|ec|edu|education|ee|eg|eh|email|emerck|energy|engineer|engineering|enterprises|epson|equipment|er|erni|es|esq|estate|et|eu|eurovision|eus|events|everbank|exchange|expert|exposed|express|fail|faith|fan|fans|farm|fashion|feedback|fi|film|finance|financial|firmdale|fish|fishing|fit|fitness|fj|fk|flights|florist|flowers|flsmidth|fly|fm|fo|foo|football|forex|forsale|foundation|fr|frl|frogans|fund|furniture|futbol|fyi|ga|gal|gallery|garden|gb|gbiz|gd|gdn|ge|gent|gf|gg|ggee|gh|gi|gift|gifts|gives|gl|glass|gle|global|globo|gm|gmail|gmo|gmx|gn|gold|goldpoint|golf|goo|goog|google|gop|gov|gp|gq|gr|graphics|gratis|green|gripe|gs|gt|gu|guge|guide|guitars|guru|gw|gy|hamburg|hangout|haus|healthcare|help|here|hermes|hiphop|hitachi|hiv|hk|hm|hn|hockey|holdings|holiday|homedepot|homes|honda|horse|host|hosting|house|how|hr|ht|hu|ibm|icbc|icu|id|ie|ifm|il|im|immo|immobilien|in|industries|infiniti|info|ing|ink|institute|insure|int|international|investments|io|iq|ir|irish|is|it|iwc|java|jcb|je|jetzt|jewelry|jll|jm|jo|jobs|joburg|jp|juegos|kaufen|kddi|ke|kg|kh|ki|kim|kitchen|kiwi|km|kn|koeln|komatsu|kp|kr|krd|kred|kw|ky|kyoto|kz|la|lacaixa|land|lat|latrobe|lawyer|lb|lc|lds|lease|leclerc|legal|lgbt|li|liaison|lidl|life|lighting|limited|limo|link|lk|loan|loans|lol|london|lotte|lotto|love|lr|ls|lt|ltda|lu|lupin|luxe|luxury|lv|ly|ma|madrid|maif|maison|management|mango|market|marketing|markets|marriott|mba|mc|md|me|media|meet|melbourne|meme|memorial|men|menu|mf|mg|mh|miami|mil|mini|mk|ml|mm|mma|mn|mo|mobi|moda|moe|monash|money|montblanc|mormon|mortgage|moscow|motorcycles|mov|movie|mp|mq|mr|ms|mt|mtn|mtpc|mu|museum|mv|mw|mx|my|mz|na|nadex|nagoya|name|navy|nc|ne|nec|net|network|neustar|new|news|nexus|nf|ng|ngo|nhk|ni|nico|ninja|nissan|nl|no|np|nr|nra|nrw|ntt|nu|nyc|nz|okinawa|om|one|ong|onl|online|ooo|org|organic|osaka|otsuka|ovh|pa|page|panerai|paris|partners|parts|party|pe|pf|pg|ph|pharmacy|philips|photo|photography|photos|physio|piaget|pics|pictet|pictures|pink|pizza|pk|pl|place|plumbing|plus|pm|pn|pohl|poker|porn|post|pr|praxi|press|pro|prod|productions|prof|properties|property|ps|pt|pub|pw|py|qa|qpon|quebec|racing|re|realtor|recipes|red|redstone|rehab|reise|reisen|reit|ren|rent|rentals|repair|report|republican|rest|restaurant|review|reviews|rich|rio|rip|ro|rocks|rodeo|rs|rsvp|ru|ruhr|run|rw|ryukyu|sa|saarland|sale|samsung|sandvik|sandvikcoromant|sap|sarl|saxo|sb|sc|sca|scb|schmidt|scholarships|school|schule|schwarz|science|scot|sd|se|seat|sener|services|sew|sex|sexy|sg|sh|shiksha|shoes|show|shriram|si|singles|site|sj|sk|ski|sky|sl|sm|sn|sncf|so|soccer|social|software|sohu|solar|solutions|sony|soy|space|spiegel|spreadbetting|sr|ss|st|study|style|su|sucks|supplies|supply|support|surf|surgery|suzuki|sv|swiss|sx|sy|sydney|systems|sz|taipei|tatar|tattoo|tax|taxi|tc|td|team|tech|technology|tel|temasek|tennis|tf|tg|th|thd|theater|tickets|tienda|tips|tires|tirol|tj|tk|tl|tm|tn|to|today|tokyo|tools|top|toray|toshiba|tours|town|toys|tp|tr|trade|trading|training|travel|trust|tt|tui|tv|tw|tz|ua|ug|uk|um|university|uno|uol|us|uy|uz|va|vacations|vc|ve|vegas|ventures|versicherung|vet|vg|vi|viajes|video|villas|vision|vlaanderen|vn|vodka|vote|voting|voto|voyage|vu|wales|walter|wang|watch|webcam|website|wed|wedding|weir|wf|whoswho|wien|wiki|williamhill|win|wme|work|works|world|ws|wtc|wtf|xbox|xerox|xin|测试|परीक्षा|佛山|慈善|集团|在线|한국|ভারত|八卦|موقع|বাংলা|公益|公司|移动|我爱你|москва|испытание|қаз|онлайн|сайт|срб|бел|时尚|테스트|淡马锡|орг|삼성|சிங்கப்பூர்|商标|商店|商城|дети|мкд|טעסט|工行|中文网|中信|中国|中國|娱乐|谷歌|భారత్|ලංකා|測試|ભારત|भारत|آزمایشی|பரிட்சை|网店|संगठन|餐厅|网络|укр|香港|δοκιμή|飞利浦|إختبار|台湾|台灣|手机|мон|الجزائر|عمان|ایران|امارات|بازار|پاکستان|الاردن|بھارت|المغرب|السعودية|سودان|عراق|مليسيا|澳門|政府|شبكة|გე|机构|组织机构|健康|ไทย|سورية|рус|рф|تونس|みんな|グーグル|ελ|世界|ਭਾਰਤ|网址|游戏|vermögensberater|vermögensberatung|企业|信息|مصر|قطر|广东|இலங்கை|இந்தியா|հայ|新加坡|فلسطين|テスト|政务|xxx|xyz|yachts|yandex|ye|yodobashi|yoga|yokohama|youtube|yt|za|zip|zm|zone|zuerich|zw|oracle|xn--1qqw23a|xn--30rr7y|xn--3bst00m|xn--3ds443g|xn--3e0b707e|xn--45brj9c|xn--45q11c|xn--4gbrim|xn--55qw42g|xn--55qx5d|xn--6frz82g|xn--6qq986b3xl|xn--80adxhks|xn--80ao21a|xn--80asehdb|xn--80aswg|xn--90a3ac|xn--90ais|xn--9et52u|xn--b4w605ferd|xn--c1avg|xn--cg4bki|xn--clchc0ea0b2g2a9gcd|xn--czr694b|xn--czrs0t|xn--czru2d|xn--d1acj3b|xn--d1alf|xn--estv75g|xn--fiq228c5hs|xn--fiq64b|xn--fiqs8s|xn--fiqz9s|xn--fjq720a|xn--flw351e|xn--fpcrj9c3d|xn--fzc2c9e2c|xn--gecrj9c|xn--h2brj9c|xn--hxt814e|xn--i1b6b1a6a2e|xn--imr513n|xn--io0a7i|xn--j1amh|xn--j6w193g|xn--kcrx77d1x4a|xn--kprw13d|xn--kpry57d|xn--kput3i|xn--l1acc|xn--lgbbat1ad8j|xn--mgb9awbf|xn--mgba3a4f16a|xn--mgbaam7a8h|xn--mgbab2bd|xn--mgbayh7gpa|xn--mgbbh1a71e|xn--mgbc0a9azcg|xn--mgberp4a5d4ar|xn--mgbpl2fh|xn--mgbx4cd0ab|xn--mxtq1m|xn--ngbc5azd|xn--node|xn--nqv7f|xn--nqv7fs00ema|xn--nyqy26a|xn--o3cw4h|xn--ogbpf8fl|xn--p1acf|xn--p1ai|xn--pgbs0dh|xn--q9jyb4c|xn--qcka1pmc|xn--rhqv96g|xn--s9brj9c|xn--ses554g|xn--unup4y|xn--vermgensberater-ctb|xn--vermgensberatung-pwb|xn--vhquv|xn--vuq861b|xn--wgbh1c|xn--wgbl6a|xn--xhq521b|xn--xkc2al3hye2a|xn--xkc2dl3a5ee0h|xn--y9a3aq|xn--yfro4i67o|xn--ygbi2ammx|xn--zfr164b)'; - window.syntaxHighlightingRegexps.externalMention = XRegExp.cache('(^|\\s|\\.|
| |\\()(@)[a-zA-Z0-9]+(@)[\\p{L}\\p{N}\\-\\.]+(\\.)(' + allDomains + ')($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\))'); - window.syntaxHighlightingRegexps.mention = /(^|\s|\.|
| |\()(@)[a-zA-Z0-9]+($|\s|\.|\,|\:|\-|\<|\!|\?|\&|\))/; - window.syntaxHighlightingRegexps.tag = XRegExp.cache('(^|\\s|\\.|
| |\\()(\\#)[\\p{L}\\p{N}\\-\\.]+($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\))'); - window.syntaxHighlightingRegexps.url = XRegExp.cache('(^|\\s|\\.|
| |\\()(http\\:\\/\\/|https\:\\/\\/)([\\p{L}\\p{N}\\-\\.]+)?(\\.)(' + allDomains + ')(\\/[\\p{L}\\p{N}\\%\\!\\*\\\'\\(\\)\\;\\:\\@\\&\\=\\+\\$\\,\\/\\?\\#\\[\\]\\-\\_\\.\\~]+)?(\\/)?($|\\s|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\))'); - window.syntaxHighlightingRegexps.urlWithoutProtocol = XRegExp.cache('(^|\\s|\\.|
| |\\()[\\p{L}\\p{N}\\-\\.]+(\\.)(' + allDomains + ')(\\/[\\p{L}\\p{N}\\%\\!\\*\\\'\\(\\)\\;\\:\\@\\&\\=\\+\\$\\,\\/\\?\\#\\[\\]\\-\\_\\.\\~]+)?(\\/)?($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\))'); - window.syntaxHighlightingRegexps.email = XRegExp.cache('(^|\\s|\\.|
| |\\()([a-zA-Z0-9\\!\\#\\$\\%\\&\\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\.]+)?(@)[\\p{L}\\p{N}\\-\\.]+(\\.)(' + allDomains + ')($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\))'); + window.syntaxHighlightingRegexps.externalMention = XRegExp.cache('(^|\\s|\\.|
| |\\()(@)[a-zA-Z0-9]+(@)[\\p{L}\\p{N}\\-\\.]+(\\.)(' + allDomains + ')($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\)|\\\')'); + window.syntaxHighlightingRegexps.mention = /(^|\s|\.|
| |\()(@)[a-zA-Z0-9]+($|\s|\.|\,|\:|\-|\<|\!|\?|\&|\)|\')/; + window.syntaxHighlightingRegexps.tag = XRegExp.cache('(^|\\s|\\.|
| |\\()(\\#)[\\p{L}\\p{N}\\-\\.]+($|\\s|\\,|\\:|\\<|\\!|\\?|\\&|\\)|\\\')'); + window.syntaxHighlightingRegexps.url = XRegExp.cache('(^|\\s|\\.|
| |\\()(http\\:\\/\\/|https\:\\/\\/)([\\p{L}\\p{N}\\-\\.]+)?(\\.)(' + allDomains + ')(\\/[\\p{L}\\p{N}\\%\\!\\*\\\'\\(\\)\\;\\:\\@\\&\\=\\+\\$\\,\\/\\?\\#\\[\\]\\-\\_\\.\\~]+)?(\\/)?($|\\s|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\)|\\\')'); + window.syntaxHighlightingRegexps.urlWithoutProtocol = XRegExp.cache('(^|\\s|\\.|
| |\\()[\\p{L}\\p{N}\\-\\.]+(\\.)(' + allDomains + ')(\\/[\\p{L}\\p{N}\\%\\!\\*\\\'\\(\\)\\;\\:\\@\\&\\=\\+\\$\\,\\/\\?\\#\\[\\]\\-\\_\\.\\~]+)?(\\/)?($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\)|\\\')'); + window.syntaxHighlightingRegexps.email = XRegExp.cache('(^|\\s|\\.|
| |\\()([a-zA-Z0-9\\!\\#\\$\\%\\&\\\'\\*\\+\\-\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\.]+)?(@)[\\p{L}\\p{N}\\-\\.]+(\\.)(' + allDomains + ')($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\)|\\\')'); cacheSyntaxHighlightingGroups(); } @@ -588,7 +588,7 @@ function cacheSyntaxHighlighting() { function cacheSyntaxHighlightingGroups() { if(window.groupNicknamesAndLocalAliases.length > 0) { var allGroupNicknamesAndLocalAliases = '(' + window.groupNicknamesAndLocalAliases.join('|') + ')'; - window.syntaxHighlightingRegexps.group = XRegExp.cache('(^|\\s|\\.|
| |\\()(\\!)' + allGroupNicknamesAndLocalAliases + '($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\))'); + window.syntaxHighlightingRegexps.group = XRegExp.cache('(^|\\s|\\.|
| |\\()(\\!)' + allGroupNicknamesAndLocalAliases + '($|\\s|\\.|\\,|\\:|\\-|\\<|\\!|\\?|\\&|\\)|\\\')'); } } @@ -819,6 +819,18 @@ function removeProtocolFromUrl(url) { return url.substring(url.indexOf('://')+3); } +/* · + · + · Get host from URL + · + · · · · · · · · · */ + +function getHost(url) { + var a = document.createElement('a'); + a.href = url; + return a.hostname; + } + /* · · @@ -1044,6 +1056,16 @@ function searchForUpdatedNoticeData(obj) { streamItemsUpdated = true; } + // attentions might have been added to a notice + if(queetFoundInFeed.children('script.attentions-json').text() != JSON.stringify(obj.attentions)) { + if(queetFoundInFeed.children('script.attentions-json').length == 0) { + queetFoundInFeed.prepend(''); + } + else { + queetFoundInFeed.children('script.attentions-json').text(JSON.stringify(obj.attentions)); + } + } + // set favorite data queetFoundInFeed.find('.action-fav-num').attr('data-fav-num',obj.fave_num); queetFoundInFeed.find('.action-fav-num').html(obj.fave_num); @@ -1285,7 +1307,7 @@ function displayOrHideUnreadNotifications(notifications) { if(totNotif>0) { $('#unseen-notifications').html(totNotif); - document.title = window.siteTitle + ' (' + totNotif + ')'; // update html page title + document.title = '(' + totNotif + ') ' + window.siteTitle; // update html page title $('#unseen-notifications').show(); } else { diff --git a/js/qvitter.js b/js/qvitter.js index 396ebd0..5d49d81 100644 --- a/js/qvitter.js +++ b/js/qvitter.js @@ -1101,11 +1101,16 @@ $('#faq-link').click(function(){ · · · · · · · · · · · · · · */ -$('#tou-link').click(function(){ +$('#tou-link,.tou-link').click(function(){ popUpAction('popup-terms', window.sL.showTerms,'
',false); - getDoc('terms',function(termsHtml){ - $('#terms-container').html(termsHtml); - }); + if(window.customTermsOfUse) { + $('#terms-container').html(window.customTermsOfUse); + } + else { + getDoc('terms',function(termsHtml){ + $('#terms-container').html(termsHtml); + }); + } }); @@ -2947,17 +2952,18 @@ $('body').on('keyup paste input', 'div.queet-box-syntax', function() { } // long enough match, create a mention span else { - // don't include ending char, if any of these + // don't include ending char, if any of these (but tags can contain and end with . and -) if(currentMatch[0].slice(-1) == '<' || currentMatch[0].slice(-1) == '&' || currentMatch[0].slice(-1) == '?' || currentMatch[0].slice(-1) == '!' || currentMatch[0].slice(-1) == ' ' - || currentMatch[0].slice(-1) == '-' + || (currentMatch[0].slice(-1) == '-' && k != 'tag') || currentMatch[0].slice(-1) == ':' - || currentMatch[0].slice(-1) == '.' + || (currentMatch[0].slice(-1) == '.' && k != 'tag') || currentMatch[0].slice(-1) == ',' - || currentMatch[0].slice(-1) == ')') { + || currentMatch[0].slice(-1) == ')' + || currentMatch[0].slice(-1) == '\'') { currentMatch[0] = currentMatch[0].slice(0,-1); } @@ -3244,6 +3250,18 @@ $('body').on('keyup', 'div.queet-box-syntax', function(e) { } }); + +/* · + · + · Any click empties the mentions-suggestions + · + · · · · · · · · · · · · · */ + +$(document).click(function() { + $('.mentions-suggestions').empty(); + }); + + /* · · · Store unposted queets in cache, if the user accidentally reloads the page or something diff --git a/locale/de.json b/locale/de.json index 43a9769..daaf1fd 100644 --- a/locale/de.json +++ b/locale/de.json @@ -1,5 +1,5 @@ { - "directionality":"ltr", + "directionality": "ltr", "languageName": "Deutsch", "loginUsername": "Benutzername oder E-Mail", "loginPassword": "Passwort", @@ -10,7 +10,7 @@ "followers": "Follower", "following": "Folgt", "groups": "Gruppen", - "compose": "Verfasse einen neuen Queet...", + "compose": "Verfasse einen neuen Queet…", "queetVerb": "Quittern", "queetsNounPlural": "Queets", "logout": "Abmelden", @@ -76,7 +76,7 @@ "searchVerb": "Suche", "deleteVerb": "Löschen", "cancelVerb": "Abbrechen", - "deleteConfirmation": "Bist Du sicher, dass Du diesen Queet löschen möchtest?", + "deleteConfirmation": "Bist du sicher, dass du diesen Queet löschen möchtest?", "userExternalFollow": "Folgen", "userExternalFollowHelp": "Deine Konto-ID (z.B. user@rainbowdash.net).", "userFollow": "Folgen", @@ -93,25 +93,25 @@ "linkColor": "Linkfarbe", "backgroundColor": "Hintergrundfarbe", "newToQuitter": "Neu bei {site-title}?", - "signUp": "Registriere Dich!", + "signUp": "Registriere dich!", "signUpFullName": "Vollständiger Name", "signUpEmail": "E-Mail", - "signUpButtonText": "Registriere Dich bei {site-title}!", + "signUpButtonText": "Registriere dich bei {site-title}!", "welcomeHeading": "Willkommen bei {site-title}!", - "welcomeText": "Wir sind eine Community von Microbloggern, verteilt über einen weltweiten
\"Verbund\" bedeutet, dass du nicht selbst einen {site-title}-Account brauchst, um mit {site-title}-Nutzern zu kommunizieren, ihnen zu folgen oder Follower bei {site-title} zu haben. Du kannst dich genauso gut bei einem der anderen GNU-Social-Server registrieren oder einem anderen Dienst, der das OStatus-Protokoll unterstützt. Du kannst sogar ganz ohne Anmeldung teilnehmen, wenn du dir GNU social auf deinem eigenen Server installierst.
Verbund
unabhängiger GNU-Social-Server, auch bekannt als StatusNet. Wir sind genau das Richtige für Leute wie dich, denen Ethik und Solidarität etwas bedeuten und die sich nicht mehr an zentralisierten kommerziellen Diensten beteiligen wollen. ", + "welcomeText": "Wir sind eine Community von Microbloggern, verteilt über einen weltweiten
\"Verbund\" bedeutet, dass du nicht selbst einen {site-title}-Account brauchst, um mit {site-title}-Nutzern zu kommunizieren, ihnen zu folgen oder Follower bei {site-title} zu haben. Du kannst dich genauso gut bei einem der anderen GNU-Social-Server registrieren oder einem anderen Dienst, der das OStatus-Protokoll unterstützt. Du kannst sogar ganz ohne Anmeldung teilnehmen, wenn du dir GNU social auf deinem eigenen Server installierst.
Verbund
unabhängiger GNU-Social-Server, auch bekannt als StatusNet. Wir sind genau das Richtige für Leute wie dich, denen Ethik und Solidarität etwas bedeuten und die sich nicht mehr an zentralisierten kommerziellen Diensten beteiligen wollen. ", "registerNickname": "Nutzername", "registerHomepage": "Webseite", "registerBio": "Über dich", "registerLocation": "Standort", "registerRepeatPassword": "Passwort bestätigen", "moreSettings": "Weitere Einstellungen", - "otherServers": "Du kannst Dir auch gerne ein Konto auf einem anderen Server des GNU social-Netzwerks einrichten. Übersicht", + "otherServers": "Du kannst dir auch gerne ein Konto auf einem anderen Server des GNU social-Netzwerks einrichten. Übersicht", "editMyProfile": "Profil bearbeiten", "notifications": "Mitteilungen", - "xFavedYourQueet": "favorisierte Deinen Queet", - "xRepeatedYourQueet": "hat Dich requeetet", - "xStartedFollowingYou": "folgt Dir jetzt", - "followsYou": "folgt Dir", + "xFavedYourQueet": "favorisierte deinen Queet", + "xRepeatedYourQueet": "hat dich requeetet", + "xStartedFollowingYou": "folgt dir jetzt", + "followsYou": "folgt dir", "FAQ": "FAQ", "inviteAFriend": "Lade deine Freunde ein!", "goToExternalProfile": "Vollständiges Profil anzeigen", @@ -121,54 +121,54 @@ "blockUser": "Block {username}", "goToOriginalNotice": "Zum originalen Queet gehen", "goToTheUsersRemoteProfile": "Nutzerprofil auf seinem Server ansehen", - "clickToDrag":"Klcken und ziehen", - "keyboardShortcuts":"Tastatur-Kürzel", - "classicInterface":"Klassische Ansicht: {site-title}", - "accessibilityToggleLink":"Nutzer von Screenreadern klicken bitte hier, um zur klassischen Version von {site-title} zu gelangen.", - "tooltipBookmarkStream":"Diesen Datenstrom zu den Lesezeichen beifügen", - "tooltipTopMenu":"Menü und Einstellungen", - "tooltipAttachImage":"Bild anfügen", - "tooltipShortenUrls":"Alle URLs im Queet kürzen", - "tooltipReloadStream":"Diesen Datenstrom aktualisieren", - "tooltipRemoveBookmark":"Dieses Lesezeichen löschen", - "clearHistory":"Verlauf löschen", - "ERRORsomethingWentWrong":"Irgendwas ging da schief.", - "ERRORmustBeLoggedIn":"Du musst eingeloggt sein, um dies lesen zu können.", - "ERRORcouldNotFindUserWithNickname":"Konnte Nutzer mit Name \"{nickname}\" nicht finden", - "ERRORcouldNotFindGroupWithNickname":"Konnte Gruppe mit Bezeichnung \"{nickname}\" nicht finden", - "ERRORcouldNotFindPage":"Konnte Seite nicht finden.", + "clickToDrag": "Klcken und ziehen", + "keyboardShortcuts": "Tastatur-Kürzel", + "classicInterface": "Klassische Ansicht: {site-title}", + "accessibilityToggleLink": "Nutzer von Screenreadern klicken bitte hier, um zur klassischen Version von {site-title} zu gelangen.", + "tooltipBookmarkStream": "Diesen Datenstrom zu den Lesezeichen beifügen", + "tooltipTopMenu": "Menü und Einstellungen", + "tooltipAttachImage": "Bild anfügen", + "tooltipShortenUrls": "Alle URLs im Queet kürzen", + "tooltipReloadStream": "Diesen Datenstrom aktualisieren", + "tooltipRemoveBookmark": "Dieses Lesezeichen löschen", + "clearHistory": "Verlauf löschen", + "ERRORsomethingWentWrong": "Irgendetwas ging da schief.", + "ERRORmustBeLoggedIn": "Du musst eingeloggt sein, um dies lesen zu können.", + "ERRORcouldNotFindUserWithNickname": "Konnte Nutzer mit Name \"{nickname}\" nicht finden", + "ERRORcouldNotFindGroupWithNickname": "Konnte Gruppe mit Bezeichnung \"{nickname}\" nicht finden", + "ERRORcouldNotFindPage": "Konnte Seite nicht finden.", "ERRORnoticeRemoved": "Dieser Queet wurde gelöscht.", "ERRORnoContactWithServer": "Konnte keine Verbindung zu diesem Server herstellen. Der Server könnte überlastet sein oder es besteht ein Problem mit deiner Internetverbindung. Bitte versuche es später erneut!", "ERRORattachmentUploadFailed": "Der Upload ist fehlgeschlagen. Entweder wird das Dateiformat nicht unterstützt oder die Datei ist zu groß.", - "hideRepliesToPeopleIDoNotFollow":"Verstecke Antworten von Personen denen ich nicht folge", - "markAllNotificationsAsSeen":"Markiere alle Benachrichtigungen als gelesen", - "notifyRepliesAndMentions":"Erwähnungen und Antworten", - "notifyFavs":"Favoriten", - "notifyRepeats":"Requeets", - "notifyFollows":"Neue Follower", - "timelineOptions":"Timeline Optionen", - "ERRORfailedSavingYourSetting":"Speichern deiner Einstellungen fehlgeschlagen", - "ERRORfailedMarkingAllNotificationsAsRead":"Alle Benachrichtigungen als gelesen markieren fehlgeschlagen.", + "hideRepliesToPeopleIDoNotFollow": "Verstecke Antworten von Personen, denen ich nicht folge", + "markAllNotificationsAsSeen": "Markiere alle Benachrichtigungen als gelesen", + "notifyRepliesAndMentions": "Erwähnungen und Antworten", + "notifyFavs": "Favoriten", + "notifyRepeats": "Requeets", + "notifyFollows": "Neue Follower", + "timelineOptions": "Timeline-Optionen", + "ERRORfailedSavingYourSetting": "Speichern deiner Einstellungen fehlgeschlagen", + "ERRORfailedMarkingAllNotificationsAsRead": "Alle Benachrichtigungen als gelesen markieren fehlgeschlagen.", "newNotification": "{new-notice-count} neue Benachrichtigung", "newNotifications": "{new-notice-count} neue Benachrichtigungen", - "thisIsANoticeFromABlockedUser":"Achtung: Dies ist ein Queet von einem Nutzer, den du blockiert hast. Klicke um ihn anzuzeigen.", - "nicknamesListWithListName":"{nickname}s Liste: {list-name}", - "myListWithListName":"Meine Liste: {list-name}", - "listMembers":"Mitglieder", - "listSubscribers":"Abonnenten", - "ERRORcouldNotFindList":"Diese Liste gibt es nicht.", - "emailAlreadyInUse":"Already in use", - "addEditLanguageLink":"Help translate {site-title} to another language", - "onlyPartlyTranslated":"{site-title} is only partly translated to {language-name} ({percent}%). You can help complete the translation at Qvitter's repository homepage", - "startRant":"Start a rant", - "continueRant":"Continue the rant", - "hideEmbeddedInTimeline":"Eingebettete Inhaltsvorschau nicht anzeigen in dieser Timeline", - "hideQuotesInTimeline":"Verberge Zitate in dieser Timeline", - "userBlocks":"Accounts you're blocking", - "buttonBlocked":"Blocked", - "buttonUnblock":"Unblock", - "failedBlockingUser":"Failed to block the user.", - "failedUnblockingUser":"Failed to unblock the user.", - "unblockUser": "Unblock {username}", - "tooltipBlocksYou":"You are blocked from following {username}." + "thisIsANoticeFromABlockedUser": "Achtung: Dies ist ein Queet von einem Nutzer, den du blockiert hast. Klicke, um ihn anzuzeigen.", + "nicknamesListWithListName": "{nickname}s Liste: {list-name}", + "myListWithListName": "Meine Liste: {list-name}", + "listMembers": "Mitglieder", + "listSubscribers": "Abonnenten", + "ERRORcouldNotFindList": "Diese Liste gibt es nicht.", + "emailAlreadyInUse": "Bereits in Benutzung", + "addEditLanguageLink": "Hilf mit, {site-title} in eine andere Sprache zu übersetzen", + "onlyPartlyTranslated": "{site-title} ist nur teilweise in {language-name} übersetzt ({percent}%). Du kannst im Qvitter-Repository mithelfen, die Übersetzung zu vervollständigen", + "startRant": "Starte einen Rant", + "continueRant": "Setze den Rant fort", + "hideEmbeddedInTimeline": "Eingebettete Inhaltsvorschau in dieser Timeline nicht anzeigen", + "hideQuotesInTimeline": "Verberge Zitate in dieser Timeline", + "userBlocks": "Benutzer, die du blockierst", + "buttonBlocked": "Blockiert", + "buttonUnblock": "Entblockieren", + "failedBlockingUser": "Blockieren des Benutzers fehlgeschlagen.", + "failedUnblockingUser": "Entblockieren des Benutzers fehlgeschlagen.", + "unblockUser": "Entblockiere {username}", + "tooltipBlocksYou": "{username} blockiert dich, sodass du ihm nicht folgen kannst." } diff --git a/locale/pt_br.json b/locale/pt_br.json index 204ac11..787a5a8 100644 --- a/locale/pt_br.json +++ b/locale/pt_br.json @@ -6,12 +6,12 @@ "loginSignIn": "Entrar", "loginRememberMe": "Lembrar-me", "loginForgotPassword": "Esqueceu sua senha?", - "notices": "Avisos", + "notices": "Mensagens", "followers": "Seguidores", "following": "Seguindo", "groups": "Grupos", "compose": "Escrever um novo Queet...", - "queetVerb": "Queetear", + "queetVerb": "Queetar", "queetsNounPlural": "Queets", "logout": "Sair", "languageSelected": "Idioma:", @@ -21,12 +21,12 @@ "details": "Detalhes", "expandFullConversation": "Expandir toda a conversa", "replyVerb": "Responder", - "requeetVerb": "Requeetear", + "requeetVerb": "Requeetar", "favoriteVerb": "Favorito", - "requeetedVerb": "Requeeteado", + "requeetedVerb": "Requeetado", "favoritedVerb": "Marcado como favorito", "replyTo": "Responder para", - "requeetedBy": "Requeeteado por {requeeted-by}", + "requeetedBy": "Requeetado por {requeeted-by}", "favoriteNoun": "Favorito", "favoritesNoun": "Favoritos", "requeetNoun": "Requeet", @@ -119,25 +119,25 @@ "showTerms": "Leia nossos Termos de Uso", "ellipsisMore": "Mais", "blockUser": "Bloquear {username}", - "goToOriginalNotice": "Ir para aviso original", + "goToOriginalNotice": "Ir para mensagem original", "goToTheUsersRemoteProfile": "Ir para o perfil do usuário", "clickToDrag":"Clique para arrastar", "keyboardShortcuts":"Atalhos do teclado", "classicInterface":"Interface clássica do {site-title}", "accessibilityToggleLink":"Para melhor acessibilidade, clique neste link para trocar para a interface clássica", - "tooltipBookmarkStream":"Adicione esta stream em seu marcador", + "tooltipBookmarkStream":"Adicione este fluxo aos favoritos", "tooltipTopMenu":"Menu e configurações", "tooltipAttachImage":"Anexar uma imagem", "tooltipShortenUrls":"Encurtar todas as URLs no Queet", - "tooltipReloadStream":"Atualizar esta stream", - "tooltipRemoveBookmark":"Remover este marcador", + "tooltipReloadStream":"Atualizar este fluxo", + "tooltipRemoveBookmark":"Remover este favorito", "clearHistory":"Limpar histórico de navegação", "ERRORsomethingWentWrong":"Algo de errado aconteceu.", - "ERRORmustBeLoggedIn":"Você precisa estar logado para visualizar esta stream.", + "ERRORmustBeLoggedIn":"Você precisa estar logado para visualizar este fluxo.", "ERRORcouldNotFindUserWithNickname":"Não foi possível encontrar um usuário com o apelido \"{nickname}\" neste servidor", "ERRORcouldNotFindGroupWithNickname":"Não foi possível encontrar um grupo com o nome \"{nickname}\" neste servidor", "ERRORcouldNotFindPage":"Não foi possível encontrar aquela página.", - "ERRORnoticeRemoved": "Este aviso foi removido.", + "ERRORnoticeRemoved": "Esta mensagem foi removida.", "ERRORnoContactWithServer": "Não foi possível estabelecer uma conexão com o servidor. O servidor pode estar sobrecarregado, ou pode haver um problema com sua conexão de internet. Por favor tente novamente mais tarde!", "ERRORattachmentUploadFailed": "O envio falhou. O formato pode não ser suportado ou o tamanho é muito grande.", "hideRepliesToPeopleIDoNotFollow":"Ocultar respostas para pessoas que eu não sigo", @@ -151,7 +151,7 @@ "ERRORfailedMarkingAllNotificationsAsRead":"Falha ao marcar todas notificações como vistas.", "newNotification": "{new-notice-count} nova notificação", "newNotifications": "{new-notice-count} novas notificações", - "thisIsANoticeFromABlockedUser":"Aviso: Este é um aviso de um usuário bloqueado por você. Clique para mostrá-lo.", + "thisIsANoticeFromABlockedUser":"Aviso: Esta é uma mensagem de um usuário bloqueado por você. Clique para mostrá-lo.", "nicknamesListWithListName":"Lista de {nickname}: {list-name}", "myListWithListName":"Minha lista: {list-name}", "listMembers":"Membros", @@ -161,7 +161,7 @@ "addEditLanguageLink":"Ajude a traduzir {site-title} para outro idioma", "onlyPartlyTranslated":"{site-title} está parcialmente traduzido para {language-name} ({percent}%). Você pode ajudar com a tradução na página do repositório do Qvitter", "startRant":"Iniciar uma discussão", - "continueRant":"Continuar com a discussão", + "continueRant":"Continuar discussão", "hideEmbeddedInTimeline":"Ocultar conteúdo incorporado nesta linha do tempo", "hideQuotesInTimeline":"Ocultar citações nesta linha do tempo", "userBlocks":"Contas bloqueadas", diff --git a/locale/tr.json b/locale/tr.json new file mode 100644 index 0000000..d5e2fa6 --- /dev/null +++ b/locale/tr.json @@ -0,0 +1,174 @@ +{ + "directionality":"ltr", + "languageName": "Türkçe", + "loginUsername": "Kullanıcı adı veya e-posta", + "loginPassword": "Şifre", + "loginSignIn": "Giriş yap", + "loginRememberMe": "Beni hatırla", + "loginForgotPassword": "Şifreni mi unuttun?", + "notices": "İletiler", + "followers": "Takipçi", + "following": "Takip edilen", + "groups": "Gruplar", + "compose": "Yeni bir ileti oluştur...", + "queetVerb": "Gönder", + "queetsNounPlural": "Bildirimler", + "logout": "Çıkış yap", + "languageSelected": "Dil:", + "viewMyProfilePage": "Profili görüntüle", + "expand": "Genişlet", + "collapse": "Daralt", + "details": "Detaylar", + "expandFullConversation": "Sohbeti genişlet", + "replyVerb": "Yanıtla", + "requeetVerb": "Tekrarla", + "favoriteVerb": "Favori", + "requeetedVerb": "Tekrarlanan", + "favoritedVerb": "Favorilenen", + "replyTo": "Adlı kişiyi yanıtla", + "requeetedBy": "{requeeted-by} tarafından tekrarlanmış", + "favoriteNoun": "Favori", + "favoritesNoun": "Favoriler", + "requeetNoun": "Tekrar", + "requeetsNoun": "Tekrarlar", + "newQueet": "{new-notice-count} yeni bildirim", + "newQueets": "{new-notice-count} yeni bildirimler", + "longmonthsJanuary": "Ocak", + "longmonthsFebruary": "Şubat", + "longmonthsMars": "Mart", + "longmonthsApril": "Nisan", + "longmonthsMay": "Mayıs", + "longmonthsJune": "Haziran", + "longmonthsJuly": "Temmuz", + "longmonthsAugust": "Ağustos", + "longmonthsSeptember": "Eylül", + "longmonthsOctober": "Ekim", + "longmonthsNovember": "Kasım", + "longmonthsDecember": "Aralık", + "shortmonthsJanuary": "oca", + "shortmonthsFebruary": "şub", + "shortmonthsMars": "mar", + "shortmonthsApril": "nis", + "shortmonthsMay": "may", + "shortmonthsJune": "haz", + "shortmonthsJuly": "tem", + "shortmonthsAugust": "ağu", + "shortmonthsSeptember": "eyl", + "shortmonthsOctober": "eki", + "shortmonthsNovember": "kas", + "shortmonthsDecember": "ara", + "time12am": "{time} öö", + "time12pm": "{time} ös", + "longDateFormat": "{time12} - {day} {month} {year}", + "shortDateFormatSeconds": "{seconds}sn", + "shortDateFormatMinutes": "{minutes}dk", + "shortDateFormatHours": "{hours}sa", + "shortDateFormatDate": "{day} {month}", + "shortDateFormatDateAndY": "{day} {month} {year}", + "now": "şimdi", + "posting": "gönderi", + "viewMoreInConvBefore": "← Daha fazla konuşma görüntüle", + "viewMoreInConvAfter": "Daha fazla konuşma görüntüle →", + "mentions": "Bahsedenler", + "timeline": "Zaman akışı", + "publicTimeline": "Herkese açık akış", + "publicAndExtTimeline": "Tüm Ağlardaki Akışlar", + "searchVerb": "Ara", + "deleteVerb": "Sil", + "cancelVerb": "İptal", + "deleteConfirmation": "İletiyi silmek istediğinize emin misiniz?", + "userExternalFollow": "Uzaktan takip", + "userExternalFollowHelp": "Hesap ID (ör. kullanici@rainbowdash.net).", + "userFollow": "Takip et", + "userFollowing": "Takip edilen", + "userUnfollow": "Takibi bırak", + "joinGroup": "Katıl", + "joinExternalGroup": "Uzaktan katıl", + "isMemberOfGroup": "Üye", + "leaveGroup": "Ayrıl", + "memberCount": "Üyeler", + "adminCount": "Yönetici", + "settings": "Ayarlar", + "saveChanges": "Değişiklikleri kaydet", + "linkColor": "Link rengi", + "backgroundColor": "Arka plan rengi", + "newToQuitter": "{site-title}'da yeni misin?", + "signUp": "Kayıt ol", + "signUpFullName": "Ad ve soyad", + "signUpEmail": "Eposta", + "signUpButtonText": "{site-title}'a kaydol", + "welcomeHeading": "{site-title} a hoşgeldin.", + "welcomeText": "We are a
\"Federation\" means that you don't need a {site-title} account to be able to follow, be followed by or interact with {site-title} users. You can register on any StatusNet or GNU social server or any service based on the the Ostatus protocol! You don't even have to join a service – try installing the lovely GNU social software on your own server! :)
federation
of microbloggers who care about ethics and solidarity and want to quit the centralised capitalist services.", + "registerNickname": "Kullanıcı adı", + "registerHomepage": "İnternet Sitesi", + "registerBio": "Kişisel Bilgiler", + "registerLocation": "Konum", + "registerRepeatPassword": "Şifreni tekrar gir", + "moreSettings": "Diğer ayarlar", + "otherServers": "Alternatively you can create an account on another server of the GNU social network. Comparison", + "editMyProfile": "Profili düzenle", + "notifications": "Bildirimler", + "xFavedYourQueet": "Queet'ini favorilerine ekledi", + "xRepeatedYourQueet": "requuetledi", + "xStartedFollowingYou": "Seni takip etti", + "followsYou": "Seni takip edenler", + "FAQ": "SSS", + "inviteAFriend": "Arkadaşlarını davet et!", + "goToExternalProfile": "Tam profile git", + "cropAndSave": "Kırp ve kaydet", + "showTerms": "Kullanım Şartlarını okuyun", + "ellipsisMore": "Daha fazla", + "blockUser": "Engelle {username}", + "goToOriginalNotice": "Orijinal iletiye git", + "goToTheUsersRemoteProfile": "Kullanıcının uzak profiline git", + "clickToDrag":"Sürüklemek için tıklayın", + "keyboardShortcuts":"Kılavye kısayolları", + "classicInterface":"Klasik {site-title}", + "accessibilityToggleLink":"Daha iyi erişilebilirlik için klasik arayüze geçin.", + "tooltipBookmarkStream":"Akışı yer imlerinize ekleyin", + "tooltipTopMenu":"Menü ve ayarlar", + "tooltipAttachImage":"Görüntü ekle", + "tooltipShortenUrls":"Tüm URL'leri kısaltın", + "tooltipReloadStream":"Akışı yenile", + "tooltipRemoveBookmark":"Yer imlerinden kaldır", + "clearHistory":"Arama geçmişini temizle", + "ERRORsomethingWentWrong":"Bir şeyler yanlış gitti.", + "ERRORmustBeLoggedIn":"Bu akışı görmek için giriş yapmalısınız.", + "ERRORcouldNotFindUserWithNickname":"Sunucuda böyle bir kullanıcı adına sahip \"{nickname}\" kullanıcı yok.", + "ERRORcouldNotFindGroupWithNickname":"Sunucuda böyle bir kulanıcı adına sahip \"{nickname}\" grup yok.", + "ERRORcouldNotFindPage":"Sayfayı bulamadım.", + "ERRORnoticeRemoved": "ileti kaldırıldı.", + "ERRORnoContactWithServer": "Sunucuyla bağlantı kurulamıyor. Sunucu aşırı yüklenmiş veya internet bağlantısıyla ilgili bir sorun olabilir. Lütfen daha sonra tekrar deneyin!", + "ERRORattachmentUploadFailed": "Yükleme başarısız oldu. Biçimi desteklenmiyor veya boyutu çok büyük olabilir.", + "hideRepliesToPeopleIDoNotFollow":"Takip etmediğim kullanıcıların cevaplarını gizle", + "markAllNotificationsAsSeen":"Görüldüğü gibi tüm bildirimleri işaretleyin", + "notifyRepliesAndMentions":"Bahsedenler ve cevaplar", + "notifyFavs":"Favoriler", + "notifyRepeats":"Requeets", + "notifyFollows":"Yeni takipçiler", + "timelineOptions":"Akış ayarları", + "ERRORfailedSavingYourSetting":"Ayarlar kaydedilemedi.", + "ERRORfailedMarkingAllNotificationsAsRead":"Tüm bildirimler görüntülenemedi.", + "newNotification": "{new-notice-count} yeni bildirim", + "newNotifications": "{new-notice-count} yeni bildirimler", + "thisIsANoticeFromABlockedUser":"Uyarı: Bu bildirim engellenen bir kullanıcıdan. Görmek için tıklayınız.", + "nicknamesListWithListName":"{nickname} listesi: {list-name}", + "myListWithListName":"Listem: {list-name}", + "listMembers":"Üyeler", + "listSubscribers":"Aboneler", + "ERRORcouldNotFindList":"Böyle bir liste yok.", + "emailAlreadyInUse":"Kullanımda", + "addEditLanguageLink":"{site-title} çevirisine yardım et", + "onlyPartlyTranslated":"{site-title} is only partly translated to {language-name} ({percent}%). You can help complete the translation at Qvitter's repository homepage", + "startRant":"Konuşmaya başla", + "continueRant":"Konuşmaya devam et", + "hideEmbeddedInTimeline":"Bu akışta gömülü içeriği gizle", + "hideQuotesInTimeline":"Bu akışta alıntıları gizle", + "userBlocks":"Hesabın engellendi", + "buttonBlocked":"Engellenmiş", + "buttonUnblock":"Engeli kaldır", + "failedBlockingUser":"Kullanıcı engellenemedi.", + "failedUnblockingUser":"Kullanıcının engeli kaldırılamadı.", + "unblockUser": "{username} engelini kaldır", + "tooltipBlocksYou":"You are blocked from following {username}." +} \ No newline at end of file