diff --git a/web/javascript/formatter.js b/web/javascript/formatter.js index c0be1f37b..3faaeae84 100644 --- a/web/javascript/formatter.js +++ b/web/javascript/formatter.js @@ -268,9 +268,15 @@ Transmission.fmt = (function() return [date, time, period].join(' '); }, - plural: function(i, word) + ngettext: function(msgid, msgid_plural, n) { - return [ i.toStringWithCommas(), ' ', word, (i==1?'':'s') ].join(''); + // TODO(i18n): http://doc.qt.digia.com/4.6/i18n-plural-rules.html + return n === 1 ? msgid : msgid_plural; + }, + + countString: function(msgid, msgid_plural, n) + { + return [ n.toStringWithCommas(), ngettext(msgid,msgid_plural,n) ].join(' '); }, peerStatus: function( flagStr ) diff --git a/web/javascript/inspector.js b/web/javascript/inspector.js index f83f66131..1f1955953 100644 --- a/web/javascript/inspector.js +++ b/web/javascript/inspector.js @@ -670,7 +670,7 @@ function Inspector(controller) { if (tracker.hasAnnounced) { lastAnnounceTime = Transmission.fmt.timestamp(tracker.lastAnnounceTime); if (tracker.lastAnnounceSucceeded) { - lastAnnounce = [ lastAnnounceTime, ' (got ', Transmission.fmt.plural(tracker.lastAnnouncePeerCount, 'peer'), ')' ]; + lastAnnounce = [ lastAnnounceTime, ' (got ', Transmission.fmt.countString('peer','peers',tracker.lastAnnouncePeerCount), ')' ]; } else { lastAnnounceLabel = 'Announce error'; lastAnnounce = [ (tracker.lastAnnounceResult ? (tracker.lastAnnounceResult + ' - ') : ''), lastAnnounceTime ]; diff --git a/web/javascript/torrent-row.js b/web/javascript/torrent-row.js index 9ac21aca7..40334a0b7 100644 --- a/web/javascript/torrent-row.js +++ b/web/javascript/torrent-row.js @@ -167,15 +167,15 @@ TorrentRendererFull.prototype = return [ 'Downloading from', t.getPeersSendingToUs(), 'of', - fmt.plural (peer_count, 'peer'), + fmt.countString('peer','peers',peer_count), 'and', - fmt.plural (webseed_count, 'web seed') ].join(' '); + fmt.countString('web seed','web seeds',webseed_count) ].join(' '); } else if (webseed_count) { // Downloading from 2 webseed(s) return [ 'Downloading from', - fmt.plural (webseed_count, 'web seed') ].join(' '); + fmt.countString('web seed','web seeds',webseed_count) ].join(' '); } else { @@ -183,7 +183,7 @@ TorrentRendererFull.prototype = return [ 'Downloading from', t.getPeersSendingToUs(), 'of', - fmt.plural (peer_count, 'peer') ].join(' '); + fmt.countString('peer','peers',peer_count) ].join(' '); } } @@ -191,7 +191,7 @@ TorrentRendererFull.prototype = return [ 'Seeding to', t.getPeersGettingFromUs(), 'of', - fmt.plural (t.getPeersConnected(), 'peer'), + fmt.countString ('peer','peers',t.getPeersConnected()), '-', TorrentRendererHelper.formatUL(t) ].join(' '); diff --git a/web/javascript/transmission.js b/web/javascript/transmission.js index 558663876..d741028ae 100644 --- a/web/javascript/transmission.js +++ b/web/javascript/transmission.js @@ -1146,7 +1146,7 @@ Transmission.prototype = $('#speed-dn-label').text( fmt.speedBps( d ) ); // visible torrents - $('#filter-count').text( fmt.plural(this._rows.length, 'Transfer') ); + $('#filter-count').text( fmt.countString('Transfer','Transfers',this._rows.length ) ); }, setEnabled: function(key, flag)