Use msgstr[0] when stringifying an untranslated plural item.
This commit is contained in:
parent
79407fcf5e
commit
115459160e
@ -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
32
test/fixtures/plural.po
vendored
Normal 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 ""
|
@ -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();
|
||||||
|
Loading…
Reference in New Issue
Block a user