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));
|
||||
});
|
||||
} else {
|
||||
var index = (self.msgid_plural && Array.isArray(text)) ?
|
||||
0 :
|
||||
undefined;
|
||||
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)
|
||||
for (var i = 1; i < processed.length - 1; i++) {
|
||||
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);
|
||||
}
|
||||
|
||||
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) {
|
||||
var lines = str.split('\n');
|
||||
var found = false;
|
||||
@ -103,6 +118,38 @@ describe('Write', function () {
|
||||
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 () {
|
||||
it('should escape "', function () {
|
||||
var item = new PO.Item();
|
||||
|
Loading…
Reference in New Issue
Block a user