{"action":"created","comment":{"url":"https://api.github.com/repos/Automattic/wp-calypso/pulls/comments/221205005","pull_request_review_id":159798142,"id":221205005,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMTIwNTAwNQ==","diff_hunk":"@@ -0,0 +1,376 @@\n+/**\n+ * External dependencies\n+ */\n+var assert = require( 'assert' ),\n+\tReact = require( 'react' ),\n+\tReactDomServer = require( 'react-dom/server');\n+\n+/**\n+ * Internal dependencies\n+ */\n+var data = require( './data' ),\n+\ti18n = require( '..' ),\n+\tmoment = i18n.moment,\n+\tnumberFormat = i18n.numberFormat,\n+\ttranslate = i18n.translate;\n+\n+/**\n+ * Pass in a react-generated html string to remove react-specific attributes\n+ * to make it easier to compare to expected html structure\n+ * @param  {string} string React-generated html string\n+ * @return {string}        html with react attributes removed\n+ */\n+function stripReactAttributes( string ) {\n+\treturn string.replace( /\\sdata\\-(reactid|react\\-checksum)\\=\\\"[^\\\"]+\\\"/g, '' );\n+}\n+\n+describe( 'I18n', function() {\n+\tbeforeEach( function() {\n+\t\ti18n.setLocale( data.locale );\n+\t} );\n+\n+\tafterEach( function() {\n+\t\ti18n.configure(); // ensure everything is reset\n+\t} );\n+\n+\tdescribe( 'setLocale()', function() {\n+\t\tdescribe( 'adding a new locale source from the same language', function () {\n+\t\t\tbeforeEach( function() {\n+\t\t\t\ti18n.setLocale( {\n+\t\t\t\t\t'': data.locale[''],\n+\t\t\t\t\t'test1': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'translation1-1'\n+\t\t\t\t\t],\n+\t\t\t\t\t'test2': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'translation2'\n+\t\t\t\t\t],\n+\t\t\t\t\t'new translation': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'Neue Übersetzung'\n+\t\t\t\t\t]\n+\t\t\t\t} );\n+\t\t\t} );\n+\n+\t\t\tit( 'should make the new translations available', function () {\n+\t\t\t\tassert.equal( 'Neue Übersetzung', translate( 'new translation' ) );\n+\t\t\t} );\n+\t\t\tit( 'should keep the original translations available as well', function () {\n+\t\t\t\tassert.equal( 'Aktivieren', translate( 'Activate' ) );\n+\t\t\t} );\n+\t\t\tit( 'should replace existing translations with the new version', function () {\n+\t\t\t\tassert.equal( 'translation1-1', translate( 'test1' ) );\n+\t\t\t\tassert.equal( 'translation2', translate( 'test2' ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'adding a new locale source from a different language', function () {\n+\t\t\tbeforeEach( function() {\n+\t\t\t\ti18n.setLocale( {\n+\t\t\t\t\t'': Object.assign( {}, data.locale[''], {\n+\t\t\t\t\t\tlocaleSlug: 'fr',\n+\t\t\t\t\t\t'Plural-Forms': 'nplurals=2; plural=n > 1;'\n+\t\t\t\t\t} ),\n+\t\t\t\t\t'test1': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'traduction1'\n+\t\t\t\t\t],\n+\t\t\t\t\t'test2': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'traduction2'\n+\t\t\t\t\t],\n+\t\t\t\t\t'new translation': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'nouvelle traduction'\n+\t\t\t\t\t]\n+\t\t\t\t} );\n+\t\t\t} );\n+\n+\t\t\tit( 'should make replace previous locale translations', function () {\n+\t\t\t\tassert.notEqual( 'translation1', translate( 'test1' ) );\n+\t\t\t\tassert.equal( 'traduction1', translate( 'test1' ) );\n+\t\t\t} );\n+\t\t\tit( 'should make old translations unavailable', function () {\n+\t\t\t\tassert.equal( 'Activate', translate( 'Activate' ) );\n+\t\t\t} );\n+\t\t\tit( 'should make new translations available', function () {\n+\t\t\t\tassert.equal( 'nouvelle traduction', translate( 'new translation' ) );\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+\n+\tdescribe( 'translate()', function() {\n+\t\tdescribe( 'passing a string', function() {\n+\t\t\tit( 'should find a simple translation', function() {\n+\t\t\t\tassert.equal( 'translation1', translate( 'test1' ) );\n+\t\t\t} );\n+\t\t\tit( 'should fall back to original string if translation is missing', function() {\n+\t\t\t\tassert.equal( 'test2', translate( 'test2' ) );\n+\t\t\t} );\n+\t\t\tit( 'should fall back to original if translation isn\\'t even null in locale file', function() {\n+\t\t\t\tassert.equal( 'nonexisting-string', translate( 'nonexisting-string' ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'translate with context', function() {\n+\t\t\tit( 'should find a string with context', function() {\n+\t\t\t\tassert.equal( 'translation3', translate( {\n+\t\t\t\t\toriginal: 'test3',\n+\t\t\t\t\tcontext: 'thecontext'\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t\tit( 'should allow original text as options attribute or initial argument', function() {\n+\t\t\t\tassert.equal( 'translation3', translate( 'test3', {\n+\t\t\t\t\tcontext: 'thecontext'\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'translate with comments', function() {\n+\t\t\tit( 'should find a string with comment', function() {\n+\t\t\t\tassert.equal( 'translation4', translate( {\n+\t\t\t\t\toriginal: 'test4',\n+\t\t\t\t\tcomment: 'thecomment'\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t\tit( 'should allow original text as options attribute or initial argument', function() {\n+\t\t\t\tassert.equal( 'translation4', translate( 'test4', {\n+\t\t\t\t\tcomment: 'thecomment'\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'plural translation', function() {\n+\t\t\tit( 'should use the singular form for one item', function() {\n+\t\t\t\tassert.equal( 'plural-test singular translation', translate( {\n+\t\t\t\t\toriginal: {\n+\t\t\t\t\t\tsingle: 'plural-test',\n+\t\t\t\t\t\tplural: 'plural-test pl key',\n+\t\t\t\t\t\tcount: 1\n+\t\t\t\t\t}\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t\tit( 'should use the plural form for > one items', function() {\n+\t\t\t\tassert.equal( 'plural-test multiple translation', translate( {\n+\t\t\t\t\toriginal: {\n+\t\t\t\t\t\tsingle: 'plural-test',\n+\t\t\t\t\t\tplural: 'plural-test pl key',\n+\t\t\t\t\t\tcount: 2\n+\t\t\t\t\t}\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t\tit( 'should honor the new plural translation syntax (singular test)', function() {\n+\t\t\t\tassert.equal( 'plural-test new syntax translated, single', translate( 'plural-test new syntax', 'plural-test new syntaxes', {\n+\t\t\t\t\tcount: 1\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t\tit( 'should honor the new plural translation syntax (plural test)', function() {\n+\t\t\t\tassert.equal( 'plural-test new syntax translated, plural', translate( 'plural-test new syntax', 'plural-test new syntaxes', {\n+\t\t\t\t\tcount: 2\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'sprintf-style value interpolation', function() {\n+\t\t\tit( 'should substitute a string', function() {\n+\t\t\t\tassert.equal( 'foo bar', translate( 'foo %(test)s',\n+\t\t\t\t\t{\n+\t\t\t\t\t\targs: {\n+\t\t\t\t\t\t\ttest: 'bar'\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t) );\n+\t\t\t} );\n+\t\t\tit( 'should substitute a number', function() {\n+\t\t\t\tassert.equal( 'foo 1', translate( 'foo %(test)d',\n+\t\t\t\t\t{\n+\t\t\t\t\t\targs: {\n+\t\t\t\t\t\t\ttest: 1\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t) );\n+\t\t\t} );\n+\t\t\tit( 'should substitute floats', function() {\n+\t\t\t\tassert.equal( 'foo 1.005', translate( 'foo %(test)f',\n+\t\t\t\t\t{\n+\t\t\t\t\t\targs: {\n+\t\t\t\t\t\t\ttest: 1.005\n+\t\t\t\t\t\t}\n+\t\t\t\t\t}\n+\t\t\t\t) );\n+\t\t\t} );\n+\t\t\tit( 'should allow passing an array of arguments', function() {\n+\t\t\t\tassert.equal( 'test1 test2 test3 test4', translate( 'test1 %1$s test3 %2$s',\n+\t\t\t\t\t{\n+\t\t\t\t\t\targs: [ 'test2', 'test4' ]\n+\t\t\t\t\t}\n+\t\t\t\t) );\n+\t\t\t} );\n+\t\t\tit( 'should allow passing a single argument', function() {\n+\t\t\t\tassert.equal( 'test1 test2 test3', translate( 'test1 %s test3',\n+\t\t\t\t\t{\n+\t\t\t\t\t\targs: 'test2'\n+\t\t\t\t\t}\n+\t\t\t\t) );\n+\t\t\t} );\n+\t\t\tit( 'should not throw when passed a circular object', function() {\n+\t\t\t\tvar obj = { foo: 'bar', toString: function() { return 'baz'; } };\n+\t\t\t\tobj.obj = obj;\n+\t\t\t\tassert.equal( 'test1 baz', translate( 'test1 %s',\n+\t\t\t\t\t{\n+\t\t\t\t\t\targs: obj\n+\t\t\t\t\t}\n+\t\t\t\t) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'with mixed components', function() {\n+\t\t\tit( 'should handle sprintf and component interpolation together', function() {\n+\t\t\t\tvar input = React.createElement( 'input' ),\n+\t\t\t\t\texpectedResultString = '<span>foo <input/> bar</span>',\n+\t\t\t\t\tplaceholder = 'bar',\n+\t\t\t\t\ttranslatedComponent = translate( 'foo {{ input /}} %(placeholder)s', {\n+\t\t\t\t\t\tcomponents: {\n+\t\t\t\t\t\t\tinput: input\n+\t\t\t\t\t\t},\n+\t\t\t\t\t\targs: {\n+\t\t\t\t\t\t\tplaceholder: placeholder\n+\t\t\t\t\t\t}\n+\t\t\t\t\t} ),\n+\t\t\t\t\tinstance = React.createElement('span', null, translatedComponent);\n+\n+\t\t\t\tassert.equal( expectedResultString, stripReactAttributes( ReactDomServer.renderToStaticMarkup( instance ) ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'adding new translations', function() {\n+\t\t\tit( 'should find a new translation after it has been added', function() {\n+\t\t\t\ti18n.addTranslations( {\n+\t\t\t\t\t'test-does-not-exist': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'translation3'\n+\t\t\t\t\t]\n+\t\t\t\t} );\n+\n+\t\t\t\tassert.equal( 'translation3', translate( 'test-does-not-exist' ) );\n+\t\t\t} );\n+\t\t\tit( 'should return the new translation if it has been overwritten', function() {\n+\t\t\t\ti18n.addTranslations( {\n+\t\t\t\t\t'test-will-overwrite': [\n+\t\t\t\t\t\tnull,\n+\t\t\t\t\t\t'not-translation1'\n+\t\t\t\t\t]\n+\t\t\t\t} );\n+\n+\t\t\t\tassert.equal( 'not-translation1', translate( 'test-will-overwrite' ) );\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+\n+\tdescribe( 'moment()', function() {\n+\t\tdescribe( 'generating date strings', function() {\n+\t\t\tit( 'should know the short weekdays', function() {\n+\t\t\t\tassert.equal( 'Fr', moment( '2014-07-18' ).format( 'dd' ) );\n+\t\t\t} );\n+\t\t\tit( 'should use available translations for date format', function() {\n+\t\t\t\tassert.equal( 'Freitag, 18. Juli 2014 21:59', moment( '2014-07-18T14:59:09-07:00' ).utcOffset( '+00:00' ).format( 'LLLL' ) );\n+\t\t\t} );\n+\t\t\tit( 'should use available translations for relative time in the past', function() {\n+\t\t\t\tassert.equal( 'vor 3 Stunden', moment().subtract( 3, 'hours' ).fromNow() );\n+\t\t\t} );\n+\t\t\tit( 'should use available translations for relative time in the future', function() {\n+\t\t\t\tassert.equal( 'in ein paar Sekunden', moment().add( 10, 'seconds' ).fromNow() );\n+\t\t\t} );\n+\t\t\tit( 'should be able to convert dates to any timezone', function() {\n+\t\t\t\tassert.equal( 'Freitag, 18. Juli 2014 14:59', moment( '2014-07-18T14:59:09-07:00' ).tz( 'America/Los_Angeles' ).format( 'LLLL' ) );\n+\t\t\t\tassert.equal( 'Samstag, 19. Juli 2014 06:59', moment( '2014-07-18T14:59:09-07:00' ).tz( 'Asia/Tokyo' ).format( 'LLLL' ) );\n+\t\t\t\tassert.equal( 'Freitag, 18. Juli 2014 23:59', moment( '2014-07-18T14:59:09-07:00' ).tz( 'Europe/Paris' ).format( 'LLLL' ) );\n+\t\t\t\tassert.equal( 'Freitag, 18. Juli 2014 22:59', moment( '2014-07-18T14:59:09-07:00' ).tz( 'Europe/London' ).format( 'LLLL' ) );\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+\n+\tdescribe( 'numberFormat()', function() {\n+\t\tdescribe( 'default numberFormat', function() {\n+\t\t\tit( 'should truncate decimals', function() {\n+\t\t\t\tassert.equal( '150', numberFormat( 150.15 ) );\n+\t\t\t} );\n+\t\t\tit( 'should round up', function() {\n+\t\t\t\tassert.equal( '151', numberFormat( 150.5 ) );\n+\t\t\t} );\n+\t\t\tit( 'should default to locale thousands separator (. for German in test)', function() {\n+\t\t\t\tassert.equal( '1.500', numberFormat( 1500 ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'with decimal', function() {\n+\t\t\tit( 'should default to locale decimal separator (, for German in test)', function() {\n+\t\t\t\tassert.equal( '150,00', numberFormat( 150, 2 ) );\n+\t\t\t} );\n+\t\t\tit( 'should truncate to specified decimal', function() {\n+\t\t\t\tassert.equal( '150,31', numberFormat( 150.312, 2 ) );\n+\t\t\t} );\n+\t\t\tit( 'should accept decimal as argument or object attribute', function() {\n+\t\t\t\tassert.equal( '150,00', numberFormat( 150, {\n+\t\t\t\t\tdecimals: 2\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t} );\n+\n+\t\tdescribe( 'overriding defaults', function() {\n+\t\t\tit( 'should allow overriding of locale decimal and thousands separators', function() {\n+\t\t\t\tassert.equal( '2*500@330', numberFormat( 2500.33, {\n+\t\t\t\t\tdecimals: 3,\n+\t\t\t\t\tthousandsSep: '*',\n+\t\t\t\t\tdecPoint: '@'\n+\t\t\t\t} ) );\n+\t\t\t} );\n+\t\t} );\n+\t} );\n+\n+\tdescribe( 'hashed locale data', function() {\n+\t\tit( 'should find keys when looked up by simple hash', function() {\n+\t\t\ti18n.setLocale( {\n+\t\t\t\t'': {\n+\t\t\t\t\tlocaleSlug: 'xx-pig-latin',\n+\t\t\t\t\t'key-hash': 'sha1'\n+\t\t\t\t},\n+\t\t\t\t'0f7d0d088b6ea936fb25b477722d734706fe8b40': [\n+\t\t\t\t\tnull,\n+\t\t\t\t\t'implesa'\n+\t\t\t\t]\n+\t\t\t});\n+\t\t\tassert.equal( i18n.translate( 'simple' ), 'implesa' );\n+\t\t} );\n+\n+\t\tit( 'should find keys when looked up by single length hash', function() {\n+\t\t\ti18n.setLocale( {\n+\t\t\t\t'': {\n+\t\t\t\t\tlocaleSlug: 'xx-pig-latin',\n+\t\t\t\t\t'key-hash': 'sha1-1'\n+\t\t\t\t},\n+\t\t\t\t'0': [\n+\t\t\t\t\tnull,\n+\t\t\t\t\t'implesa'\n+\t\t\t\t]\n+\t\t\t});\n+\t\t\tassert.equal( i18n.translate( 'simple' ), 'implesa' );\n+\t\t} );\n+\n+\t\tit( 'should find keys when looked up by multi length hash', function() {\n+\t\t\ti18n.setLocale( {\n+\t\t\t\t'': {\n+\t\t\t\t\tlocaleSlug: 'xx-pig-latin',\n+\t\t\t\t\t'key-hash': 'sha1-1-2'\n+\t\t\t\t},\n+\t\t\t\t'0': [ null,'implesa' ],\n+\t\t\t\t'78': [ null, 'edra' ],  // red has a sha1 of 78988010b890ce6f4d2136481f392787ec6d6106\n+\t\t\t\t'7d': [ null, 'reyga' ] // grey has a sha1 of 7d1f8f911da92c0ea535cad461fd773281a79638\n+\t\t\t});\n+\t\t\tassert.equal( i18n.translate( 'simple' ), 'implesa' );\n+\t\t\tassert.equal( i18n.translate( 'red' ), 'edra' );","path":"packages/i18n-calypso/test/index.js","position":372,"original_position":372,"commit_id":"cb6c2b15a9008a7ab80fcafbac758acd5b1e1ed3","original_commit_id":"cb6c2b15a9008a7ab80fcafbac758acd5b1e1ed3","user":{"login":"a8ci18n","id":25137612,"node_id":"MDQ6VXNlcjI1MTM3NjEy","avatar_url":"https://avatars0.githubusercontent.com/u/25137612?v=4","gravatar_id":"","url":"https://api.github.com/users/a8ci18n","html_url":"https://github.com/a8ci18n","followers_url":"https://api.github.com/users/a8ci18n/followers","following_url":"https://api.github.com/users/a8ci18n/following{/other_user}","gists_url":"https://api.github.com/users/a8ci18n/gists{/gist_id}","starred_url":"https://api.github.com/users/a8ci18n/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/a8ci18n/subscriptions","organizations_url":"https://api.github.com/users/a8ci18n/orgs","repos_url":"https://api.github.com/users/a8ci18n/repos","events_url":"https://api.github.com/users/a8ci18n/events{/privacy}","received_events_url":"https://api.github.com/users/a8ci18n/received_events","type":"User","site_admin":false},"body":"Hi! I've found a possible matching string that has already been translated **104** times:\n`translate( 'Red' )` *ES Score: 12*\nSee 1 additional suggestion in the [PR translation status page](https://translate.wordpress.com/localci/status/automattic/wp-calypso/add/i18n-repo-take-two)\n\nHelp me improve these suggestions: react with :thumbsdown: if the suggestion doesn't make any sense, or with :thumbsup: if it's a particularly good one (even if not implemented).","created_at":"2018-09-28T10:09:48Z","updated_at":"2018-09-28T10:09:48Z","html_url":"https://github.com/Automattic/wp-calypso/pull/27489#discussion_r221205005","pull_request_url":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/Automattic/wp-calypso/pulls/comments/221205005"},"html":{"href":"https://github.com/Automattic/wp-calypso/pull/27489#discussion_r221205005"},"pull_request":{"href":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489"}}},"pull_request":{"url":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489","id":218918098,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE4OTE4MDk4","html_url":"https://github.com/Automattic/wp-calypso/pull/27489","diff_url":"https://github.com/Automattic/wp-calypso/pull/27489.diff","patch_url":"https://github.com/Automattic/wp-calypso/pull/27489.patch","issue_url":"https://api.github.com/repos/Automattic/wp-calypso/issues/27489","number":27489,"state":"open","locked":false,"title":"Framework: Pull in i18n-calypso (alt lyrics)","user":{"login":"ockham","id":96308,"node_id":"MDQ6VXNlcjk2MzA4","avatar_url":"https://avatars2.githubusercontent.com/u/96308?v=4","gravatar_id":"","url":"https://api.github.com/users/ockham","html_url":"https://github.com/ockham","followers_url":"https://api.github.com/users/ockham/followers","following_url":"https://api.github.com/users/ockham/following{/other_user}","gists_url":"https://api.github.com/users/ockham/gists{/gist_id}","starred_url":"https://api.github.com/users/ockham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ockham/subscriptions","organizations_url":"https://api.github.com/users/ockham/orgs","repos_url":"https://api.github.com/users/ockham/repos","events_url":"https://api.github.com/users/ockham/events{/privacy}","received_events_url":"https://api.github.com/users/ockham/received_events","type":"User","site_admin":false},"body":"Alternative to #27123\r\n\r\nUsing `lerna import` this time, to preserve commit history :heart_eyes: ","created_at":"2018-09-28T10:08:57Z","updated_at":"2018-09-28T10:09:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a7a27652ab5151812d192921f1662fdde4de6465","assignee":{"login":"ockham","id":96308,"node_id":"MDQ6VXNlcjk2MzA4","avatar_url":"https://avatars2.githubusercontent.com/u/96308?v=4","gravatar_id":"","url":"https://api.github.com/users/ockham","html_url":"https://github.com/ockham","followers_url":"https://api.github.com/users/ockham/followers","following_url":"https://api.github.com/users/ockham/following{/other_user}","gists_url":"https://api.github.com/users/ockham/gists{/gist_id}","starred_url":"https://api.github.com/users/ockham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ockham/subscriptions","organizations_url":"https://api.github.com/users/ockham/orgs","repos_url":"https://api.github.com/users/ockham/repos","events_url":"https://api.github.com/users/ockham/events{/privacy}","received_events_url":"https://api.github.com/users/ockham/received_events","type":"User","site_admin":false},"assignees":[{"login":"ockham","id":96308,"node_id":"MDQ6VXNlcjk2MzA4","avatar_url":"https://avatars2.githubusercontent.com/u/96308?v=4","gravatar_id":"","url":"https://api.github.com/users/ockham","html_url":"https://github.com/ockham","followers_url":"https://api.github.com/users/ockham/followers","following_url":"https://api.github.com/users/ockham/following{/other_user}","gists_url":"https://api.github.com/users/ockham/gists{/gist_id}","starred_url":"https://api.github.com/users/ockham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ockham/subscriptions","organizations_url":"https://api.github.com/users/ockham/orgs","repos_url":"https://api.github.com/users/ockham/repos","events_url":"https://api.github.com/users/ockham/events{/privacy}","received_events_url":"https://api.github.com/users/ockham/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":285009988,"node_id":"MDU6TGFiZWwyODUwMDk5ODg=","url":"https://api.github.com/repos/Automattic/wp-calypso/labels/Framework","name":"Framework","color":"c5def5","default":false},{"id":285010017,"node_id":"MDU6TGFiZWwyODUwMTAwMTc=","url":"https://api.github.com/repos/Automattic/wp-calypso/labels/[Status]%20In%20Progress","name":"[Status] In Progress","color":"207de5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489/commits","review_comments_url":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489/comments","review_comment_url":"https://api.github.com/repos/Automattic/wp-calypso/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Automattic/wp-calypso/issues/27489/comments","statuses_url":"https://api.github.com/repos/Automattic/wp-calypso/statuses/cb6c2b15a9008a7ab80fcafbac758acd5b1e1ed3","head":{"label":"Automattic:add/i18n-repo-take-two","ref":"add/i18n-repo-take-two","sha":"cb6c2b15a9008a7ab80fcafbac758acd5b1e1ed3","user":{"login":"Automattic","id":887802,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg4NzgwMg==","avatar_url":"https://avatars1.githubusercontent.com/u/887802?v=4","gravatar_id":"","url":"https://api.github.com/users/Automattic","html_url":"https://github.com/Automattic","followers_url":"https://api.github.com/users/Automattic/followers","following_url":"https://api.github.com/users/Automattic/following{/other_user}","gists_url":"https://api.github.com/users/Automattic/gists{/gist_id}","starred_url":"https://api.github.com/users/Automattic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Automattic/subscriptions","organizations_url":"https://api.github.com/users/Automattic/orgs","repos_url":"https://api.github.com/users/Automattic/repos","events_url":"https://api.github.com/users/Automattic/events{/privacy}","received_events_url":"https://api.github.com/users/Automattic/received_events","type":"Organization","site_admin":false},"repo":{"id":45936895,"node_id":"MDEwOlJlcG9zaXRvcnk0NTkzNjg5NQ==","name":"wp-calypso","full_name":"Automattic/wp-calypso","private":false,"owner":{"login":"Automattic","id":887802,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg4NzgwMg==","avatar_url":"https://avatars1.githubusercontent.com/u/887802?v=4","gravatar_id":"","url":"https://api.github.com/users/Automattic","html_url":"https://github.com/Automattic","followers_url":"https://api.github.com/users/Automattic/followers","following_url":"https://api.github.com/users/Automattic/following{/other_user}","gists_url":"https://api.github.com/users/Automattic/gists{/gist_id}","starred_url":"https://api.github.com/users/Automattic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Automattic/subscriptions","organizations_url":"https://api.github.com/users/Automattic/orgs","repos_url":"https://api.github.com/users/Automattic/repos","events_url":"https://api.github.com/users/Automattic/events{/privacy}","received_events_url":"https://api.github.com/users/Automattic/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Automattic/wp-calypso","description":"The JavaScript and API powered WordPress.com","fork":false,"url":"https://api.github.com/repos/Automattic/wp-calypso","forks_url":"https://api.github.com/repos/Automattic/wp-calypso/forks","keys_url":"https://api.github.com/repos/Automattic/wp-calypso/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Automattic/wp-calypso/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Automattic/wp-calypso/teams","hooks_url":"https://api.github.com/repos/Automattic/wp-calypso/hooks","issue_events_url":"https://api.github.com/repos/Automattic/wp-calypso/issues/events{/number}","events_url":"https://api.github.com/repos/Automattic/wp-calypso/events","assignees_url":"https://api.github.com/repos/Automattic/wp-calypso/assignees{/user}","branches_url":"https://api.github.com/repos/Automattic/wp-calypso/branches{/branch}","tags_url":"https://api.github.com/repos/Automattic/wp-calypso/tags","blobs_url":"https://api.github.com/repos/Automattic/wp-calypso/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Automattic/wp-calypso/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Automattic/wp-calypso/git/refs{/sha}","trees_url":"https://api.github.com/repos/Automattic/wp-calypso/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Automattic/wp-calypso/statuses/{sha}","languages_url":"https://api.github.com/repos/Automattic/wp-calypso/languages","stargazers_url":"https://api.github.com/repos/Automattic/wp-calypso/stargazers","contributors_url":"https://api.github.com/repos/Automattic/wp-calypso/contributors","subscribers_url":"https://api.github.com/repos/Automattic/wp-calypso/subscribers","subscription_url":"https://api.github.com/repos/Automattic/wp-calypso/subscription","commits_url":"https://api.github.com/repos/Automattic/wp-calypso/commits{/sha}","git_commits_url":"https://api.github.com/repos/Automattic/wp-calypso/git/commits{/sha}","comments_url":"https://api.github.com/repos/Automattic/wp-calypso/comments{/number}","issue_comment_url":"https://api.github.com/repos/Automattic/wp-calypso/issues/comments{/number}","contents_url":"https://api.github.com/repos/Automattic/wp-calypso/contents/{+path}","compare_url":"https://api.github.com/repos/Automattic/wp-calypso/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Automattic/wp-calypso/merges","archive_url":"https://api.github.com/repos/Automattic/wp-calypso/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Automattic/wp-calypso/downloads","issues_url":"https://api.github.com/repos/Automattic/wp-calypso/issues{/number}","pulls_url":"https://api.github.com/repos/Automattic/wp-calypso/pulls{/number}","milestones_url":"https://api.github.com/repos/Automattic/wp-calypso/milestones{/number}","notifications_url":"https://api.github.com/repos/Automattic/wp-calypso/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Automattic/wp-calypso/labels{/name}","releases_url":"https://api.github.com/repos/Automattic/wp-calypso/releases{/id}","deployments_url":"https://api.github.com/repos/Automattic/wp-calypso/deployments","created_at":"2015-11-10T20:00:16Z","updated_at":"2018-09-28T07:28:54Z","pushed_at":"2018-09-28T10:08:57Z","git_url":"git://github.com/Automattic/wp-calypso.git","ssh_url":"git@github.com:Automattic/wp-calypso.git","clone_url":"https://github.com/Automattic/wp-calypso.git","svn_url":"https://github.com/Automattic/wp-calypso","homepage":"https://developer.wordpress.com/calypso/","size":113786,"stargazers_count":10469,"watchers_count":10469,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1481,"mirror_url":null,"archived":false,"open_issues_count":1582,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0","node_id":"MDc6TGljZW5zZTg="},"forks":1481,"open_issues":1582,"watchers":10469,"default_branch":"master"}},"base":{"label":"Automattic:master","ref":"master","sha":"3beded84b34a069320b9649c0a9ce790688291cb","user":{"login":"Automattic","id":887802,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg4NzgwMg==","avatar_url":"https://avatars1.githubusercontent.com/u/887802?v=4","gravatar_id":"","url":"https://api.github.com/users/Automattic","html_url":"https://github.com/Automattic","followers_url":"https://api.github.com/users/Automattic/followers","following_url":"https://api.github.com/users/Automattic/following{/other_user}","gists_url":"https://api.github.com/users/Automattic/gists{/gist_id}","starred_url":"https://api.github.com/users/Automattic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Automattic/subscriptions","organizations_url":"https://api.github.com/users/Automattic/orgs","repos_url":"https://api.github.com/users/Automattic/repos","events_url":"https://api.github.com/users/Automattic/events{/privacy}","received_events_url":"https://api.github.com/users/Automattic/received_events","type":"Organization","site_admin":false},"repo":{"id":45936895,"node_id":"MDEwOlJlcG9zaXRvcnk0NTkzNjg5NQ==","name":"wp-calypso","full_name":"Automattic/wp-calypso","private":false,"owner":{"login":"Automattic","id":887802,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg4NzgwMg==","avatar_url":"https://avatars1.githubusercontent.com/u/887802?v=4","gravatar_id":"","url":"https://api.github.com/users/Automattic","html_url":"https://github.com/Automattic","followers_url":"https://api.github.com/users/Automattic/followers","following_url":"https://api.github.com/users/Automattic/following{/other_user}","gists_url":"https://api.github.com/users/Automattic/gists{/gist_id}","starred_url":"https://api.github.com/users/Automattic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Automattic/subscriptions","organizations_url":"https://api.github.com/users/Automattic/orgs","repos_url":"https://api.github.com/users/Automattic/repos","events_url":"https://api.github.com/users/Automattic/events{/privacy}","received_events_url":"https://api.github.com/users/Automattic/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Automattic/wp-calypso","description":"The JavaScript and API powered WordPress.com","fork":false,"url":"https://api.github.com/repos/Automattic/wp-calypso","forks_url":"https://api.github.com/repos/Automattic/wp-calypso/forks","keys_url":"https://api.github.com/repos/Automattic/wp-calypso/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Automattic/wp-calypso/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Automattic/wp-calypso/teams","hooks_url":"https://api.github.com/repos/Automattic/wp-calypso/hooks","issue_events_url":"https://api.github.com/repos/Automattic/wp-calypso/issues/events{/number}","events_url":"https://api.github.com/repos/Automattic/wp-calypso/events","assignees_url":"https://api.github.com/repos/Automattic/wp-calypso/assignees{/user}","branches_url":"https://api.github.com/repos/Automattic/wp-calypso/branches{/branch}","tags_url":"https://api.github.com/repos/Automattic/wp-calypso/tags","blobs_url":"https://api.github.com/repos/Automattic/wp-calypso/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Automattic/wp-calypso/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Automattic/wp-calypso/git/refs{/sha}","trees_url":"https://api.github.com/repos/Automattic/wp-calypso/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Automattic/wp-calypso/statuses/{sha}","languages_url":"https://api.github.com/repos/Automattic/wp-calypso/languages","stargazers_url":"https://api.github.com/repos/Automattic/wp-calypso/stargazers","contributors_url":"https://api.github.com/repos/Automattic/wp-calypso/contributors","subscribers_url":"https://api.github.com/repos/Automattic/wp-calypso/subscribers","subscription_url":"https://api.github.com/repos/Automattic/wp-calypso/subscription","commits_url":"https://api.github.com/repos/Automattic/wp-calypso/commits{/sha}","git_commits_url":"https://api.github.com/repos/Automattic/wp-calypso/git/commits{/sha}","comments_url":"https://api.github.com/repos/Automattic/wp-calypso/comments{/number}","issue_comment_url":"https://api.github.com/repos/Automattic/wp-calypso/issues/comments{/number}","contents_url":"https://api.github.com/repos/Automattic/wp-calypso/contents/{+path}","compare_url":"https://api.github.com/repos/Automattic/wp-calypso/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Automattic/wp-calypso/merges","archive_url":"https://api.github.com/repos/Automattic/wp-calypso/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Automattic/wp-calypso/downloads","issues_url":"https://api.github.com/repos/Automattic/wp-calypso/issues{/number}","pulls_url":"https://api.github.com/repos/Automattic/wp-calypso/pulls{/number}","milestones_url":"https://api.github.com/repos/Automattic/wp-calypso/milestones{/number}","notifications_url":"https://api.github.com/repos/Automattic/wp-calypso/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Automattic/wp-calypso/labels{/name}","releases_url":"https://api.github.com/repos/Automattic/wp-calypso/releases{/id}","deployments_url":"https://api.github.com/repos/Automattic/wp-calypso/deployments","created_at":"2015-11-10T20:00:16Z","updated_at":"2018-09-28T07:28:54Z","pushed_at":"2018-09-28T10:08:57Z","git_url":"git://github.com/Automattic/wp-calypso.git","ssh_url":"git@github.com:Automattic/wp-calypso.git","clone_url":"https://github.com/Automattic/wp-calypso.git","svn_url":"https://github.com/Automattic/wp-calypso","homepage":"https://developer.wordpress.com/calypso/","size":113786,"stargazers_count":10469,"watchers_count":10469,"language":"JavaScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1481,"mirror_url":null,"archived":false,"open_issues_count":1582,"license":{"key":"gpl-2.0","name":"GNU General Public License v2.0","spdx_id":"GPL-2.0","url":"https://api.github.com/licenses/gpl-2.0","node_id":"MDc6TGljZW5zZTg="},"forks":1481,"open_issues":1582,"watchers":10469,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489"},"html":{"href":"https://github.com/Automattic/wp-calypso/pull/27489"},"issue":{"href":"https://api.github.com/repos/Automattic/wp-calypso/issues/27489"},"comments":{"href":"https://api.github.com/repos/Automattic/wp-calypso/issues/27489/comments"},"review_comments":{"href":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489/comments"},"review_comment":{"href":"https://api.github.com/repos/Automattic/wp-calypso/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Automattic/wp-calypso/pulls/27489/commits"},"statuses":{"href":"https://api.github.com/repos/Automattic/wp-calypso/statuses/cb6c2b15a9008a7ab80fcafbac758acd5b1e1ed3"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"a8ci18n"}}