Use msgstr[0] when stringifying an untranslated plural item.

This commit is contained in:
rosston 2017-02-09 22:40:58 -05:00
parent 79407fcf5e
commit 115459160e
3 changed files with 83 additions and 1 deletions

View File

@ -321,8 +321,11 @@ PO.Item.prototype.toString = function () {
lines = lines.concat(mkObsolete + _process(keyword, t, i)); lines = lines.concat(mkObsolete + _process(keyword, t, i));
}); });
} else { } else {
var index = (self.msgid_plural && Array.isArray(text)) ?
0 :
undefined;
text = Array.isArray(text) ? text.join() : text; text = Array.isArray(text) ? text.join() : text;
var processed = _process(keyword, text); var processed = _process(keyword, text, index);
//handle \n in single-line texts (can not be handled in _escape) //handle \n in single-line texts (can not be handled in _escape)
for (var i = 1; i < processed.length - 1; i++) { for (var i = 1; i < processed.length - 1; i++) {
processed[i] = processed[i].slice(0, -1) + '\\n"'; processed[i] = processed[i].slice(0, -1) + '\\n"';

32
test/fixtures/plural.po vendored Normal file
View File

@ -0,0 +1,32 @@
# French translation of Link (6.x-2.9)
# Copyright (c) 2011 by the French translation team
#
msgid ""
msgstr ""
"Project-Id-Version: Link (6.x-2.9)\n"
"POT-Creation-Date: 2011-12-31 23:39+0000\n"
"PO-Revision-Date: 2013-12-17 14:59+0100\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Last-Translator: Ruben Vermeersch <ruben@rocketeer.be>\n"
"Language: fr\n"
"X-Generator: Poedit 1.6.2\n"
# correct plurals, with translation
msgid "1 source"
msgid_plural "{{$count}} sources"
msgstr[0] "1 source"
msgstr[1] "{{$count}} sources"
# correct plurals, with no translation
msgid "1 destination"
msgid_plural "{{$count}} destinations"
msgstr[0] ""
# incorrect plurals, with no translation
msgid "1 mistake"
msgid_plural "{{$count}} mistakes"
msgstr ""

View File

@ -16,6 +16,21 @@ function assertHasLine(str, line) {
assert(found, 'Could not find line: ' + line); assert(found, 'Could not find line: ' + line);
} }
function assertHasContiguousLines(str, assertedLines) {
var assertedLinesJoined = assertedLines.join('\n');
var trimmedStr = str
.split('\n')
.map(function (line) {
return line.trim();
})
.join('\n');
var found = trimmedStr.indexOf(assertedLinesJoined) !== -1;
assert(found, 'Could not find lines: \n' + assertedLinesJoined);
}
function assertDoesntHaveLine(str, line) { function assertDoesntHaveLine(str, line) {
var lines = str.split('\n'); var lines = str.split('\n');
var found = false; var found = false;
@ -103,6 +118,38 @@ describe('Write', function () {
assertHasLine(str, '#~ msgstr "also not sure"'); assertHasLine(str, '#~ msgstr "also not sure"');
}); });
describe('plurals', function () {
it('should write multiple msgstrs', function () {
var input = fs.readFileSync(__dirname + '/fixtures/plural.po', 'utf8');
var po = PO.parse(input);
var str = po.toString();
assertHasContiguousLines(str, [
'msgstr[0] "1 source"',
'msgstr[1] "{{$count}} sources"'
]);
});
it('should write msgstr[0] when there is no translation', function () {
var input = fs.readFileSync(__dirname + '/fixtures/plural.po', 'utf8');
var po = PO.parse(input);
var str = po.toString();
assertHasContiguousLines(str, [
'msgid_plural "{{$count}} destinations"',
'msgstr[0] ""'
]);
});
it('should write msgstr[0] when there is no translation and empty plural translation is stored in msgstr ""', function () {
var input = fs.readFileSync(__dirname + '/fixtures/plural.po', 'utf8');
var po = PO.parse(input);
var str = po.toString();
assertHasContiguousLines(str, [
'msgid_plural "{{$count}} mistakes"',
'msgstr[0] ""'
]);
});
});
describe('C-Strings', function () { describe('C-Strings', function () {
it('should escape "', function () { it('should escape "', function () {
var item = new PO.Item(); var item = new PO.Item();