Merge pull request #9 from Open-Xchange-Frontend/fix_commented_obsolete_strings
Fix commented obsolete strings
This commit is contained in:
commit
03572f9711
38
lib/po.js
38
lib/po.js
@ -101,14 +101,18 @@ PO.parse = function (data) {
|
|||||||
var item = new PO.Item(),
|
var item = new PO.Item(),
|
||||||
context = null,
|
context = null,
|
||||||
plural = 0,
|
plural = 0,
|
||||||
obsolete = false;
|
obsoleteCount = 0,
|
||||||
|
noCommentLineCount = 0;
|
||||||
|
|
||||||
function finish() {
|
function finish() {
|
||||||
if (item.msgid.length > 0) {
|
if (item.msgid.length > 0) {
|
||||||
|
if (obsoleteCount >= noCommentLineCount) {
|
||||||
|
item.obsolete = true;
|
||||||
|
}
|
||||||
|
obsoleteCount = 0;
|
||||||
|
noCommentLineCount = 0;
|
||||||
po.items.push(item);
|
po.items.push(item);
|
||||||
item = new PO.Item();
|
item = new PO.Item();
|
||||||
item.obsolete = obsolete;
|
|
||||||
obsolete = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,13 +126,15 @@ PO.parse = function (data) {
|
|||||||
|
|
||||||
while (lines.length > 0) {
|
while (lines.length > 0) {
|
||||||
var line = trim(lines.shift()),
|
var line = trim(lines.shift()),
|
||||||
|
lineObsolete = false,
|
||||||
add = false;
|
add = false;
|
||||||
|
|
||||||
if (line.match(/^#\~/)) { // Obsolete item
|
if (line.match(/^#\~/)) { // Obsolete item
|
||||||
obsolete = true;
|
//only remove the obsolte comment mark, here
|
||||||
|
//might be, this is a new item, so
|
||||||
|
//only remember, this line is marked obsolete, count after line is parsed
|
||||||
line = trim(line.substring(2));
|
line = trim(line.substring(2));
|
||||||
} else {
|
lineObsolete = true;
|
||||||
obsolete = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (line.match(/^#:/)) { // Reference
|
if (line.match(/^#:/)) { // Reference
|
||||||
@ -153,24 +159,29 @@ PO.parse = function (data) {
|
|||||||
else if (line.match(/^msgid_plural/)) { // Plural form
|
else if (line.match(/^msgid_plural/)) { // Plural form
|
||||||
item.msgid_plural = extract(line);
|
item.msgid_plural = extract(line);
|
||||||
context = 'msgid_plural';
|
context = 'msgid_plural';
|
||||||
|
noCommentLineCount++;
|
||||||
}
|
}
|
||||||
else if (line.match(/^msgid/)) { // Original
|
else if (line.match(/^msgid/)) { // Original
|
||||||
finish();
|
finish();
|
||||||
item.msgid = extract(line);
|
item.msgid = extract(line);
|
||||||
context = 'msgid';
|
context = 'msgid';
|
||||||
|
noCommentLineCount++;
|
||||||
}
|
}
|
||||||
else if (line.match(/^msgstr/)) { // Translation
|
else if (line.match(/^msgstr/)) { // Translation
|
||||||
var m = line.match(/^msgstr\[(\d+)\]/);
|
var m = line.match(/^msgstr\[(\d+)\]/);
|
||||||
plural = m && m[1] ? parseInt(m[1]) : 0;
|
plural = m && m[1] ? parseInt(m[1]) : 0;
|
||||||
item.msgstr[plural] = extract(line);
|
item.msgstr[plural] = extract(line);
|
||||||
context = 'msgstr';
|
context = 'msgstr';
|
||||||
|
noCommentLineCount++;
|
||||||
}
|
}
|
||||||
else if (line.match(/^msgctxt/)) { // Context
|
else if (line.match(/^msgctxt/)) { // Context
|
||||||
finish();
|
finish();
|
||||||
item.msgctxt = extract(line);
|
item.msgctxt = extract(line);
|
||||||
|
noCommentLineCount++;
|
||||||
}
|
}
|
||||||
else { // Probably multiline string or blank
|
else { // Probably multiline string or blank
|
||||||
if (line.length > 0) {
|
if (line.length > 0) {
|
||||||
|
noCommentLineCount++;
|
||||||
if (context === 'msgstr') {
|
if (context === 'msgstr') {
|
||||||
item.msgstr[plural] += extract(line);
|
item.msgstr[plural] += extract(line);
|
||||||
}
|
}
|
||||||
@ -182,6 +193,10 @@ PO.parse = function (data) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (lineObsolete) {
|
||||||
|
//count obsolete lines for this item
|
||||||
|
obsoleteCount++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finish();
|
finish();
|
||||||
|
|
||||||
@ -245,27 +260,24 @@ PO.Item.prototype.toString = function () {
|
|||||||
if (flags.length > 0) {
|
if (flags.length > 0) {
|
||||||
lines.push('#, ' + flags.join(","));
|
lines.push('#, ' + flags.join(","));
|
||||||
}
|
}
|
||||||
|
var mkObsolete = this.obsolete ? '#~ ' : '';
|
||||||
|
|
||||||
['msgctxt', 'msgid', 'msgid_plural', 'msgstr'].forEach(function (keyword) {
|
['msgctxt', 'msgid', 'msgid_plural', 'msgstr'].forEach(function (keyword) {
|
||||||
var text = that[keyword];
|
var text = that[keyword];
|
||||||
if (text != null) {
|
if (text != null) {
|
||||||
if (isArray(text) && text.length > 1) {
|
if (isArray(text) && text.length > 1) {
|
||||||
text.forEach(function (t, i) {
|
text.forEach(function (t, i) {
|
||||||
lines = lines.concat(_process(keyword, t, i));
|
lines = lines.concat(mkObsolete + _process(keyword, t, i));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
text = isArray(text) ? text.join() : text;
|
text = isArray(text) ? text.join() : text;
|
||||||
lines = lines.concat(_process(keyword, text));
|
lines = lines.concat(mkObsolete + _process(keyword, text));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (this.obsolete) {
|
return lines.join("\n");
|
||||||
return "#~ " + lines.join("\n#~ ");
|
|
||||||
} else {
|
|
||||||
return lines.join("\n");
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module.exports = PO;
|
module.exports = PO;
|
||||||
|
10
test/fixtures/commented.po
vendored
10
test/fixtures/commented.po
vendored
@ -21,3 +21,13 @@ msgstr "{{dataLoader.data.length}} resultaten"
|
|||||||
|
|
||||||
#~ msgid "Add order"
|
#~ msgid "Add order"
|
||||||
#~ msgstr "Order toevoegen"
|
#~ msgstr "Order toevoegen"
|
||||||
|
|
||||||
|
#~ # commented obsolete item
|
||||||
|
#~ #, fuzzy
|
||||||
|
#~ msgid "Commented item"
|
||||||
|
#~ msgstr "not sure"
|
||||||
|
|
||||||
|
# commented obsolete item
|
||||||
|
#, fuzzy
|
||||||
|
#~ msgid "Second commented item"
|
||||||
|
#~ msgstr "also not sure"
|
||||||
|
@ -96,16 +96,26 @@ describe('Parse', function () {
|
|||||||
it('Handles obsolete items', function () {
|
it('Handles obsolete items', function () {
|
||||||
var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/commented.po', 'utf8'));
|
var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/commented.po', 'utf8'));
|
||||||
|
|
||||||
assert.equal(po.items.length, 2);
|
assert.equal(po.items.length, 4);
|
||||||
var item = po.items[0];
|
var item = po.items[0];
|
||||||
assert.equal(item.obsolete, false);
|
assert.equal(item.obsolete, false);
|
||||||
assert.equal(item.msgid, "{{dataLoader.data.length}} results");
|
assert.equal(item.msgid, '{{dataLoader.data.length}} results');
|
||||||
assert.equal(item.msgstr, "{{dataLoader.data.length}} resultaten");
|
assert.equal(item.msgstr, '{{dataLoader.data.length}} resultaten');
|
||||||
|
|
||||||
item = po.items[1];
|
item = po.items[1];
|
||||||
assert.equal(item.obsolete, true);
|
assert.equal(item.obsolete, true);
|
||||||
assert.equal(item.msgid, "Add order");
|
assert.equal(item.msgid, 'Add order');
|
||||||
assert.equal(item.msgstr, "Order toevoegen");
|
assert.equal(item.msgstr, 'Order toevoegen');
|
||||||
|
|
||||||
|
item = po.items[2];
|
||||||
|
assert.equal(item.obsolete, true);
|
||||||
|
assert.equal(item.msgid, 'Commented item');
|
||||||
|
assert.equal(item.msgstr, 'not sure');
|
||||||
|
|
||||||
|
item = po.items[3];
|
||||||
|
assert.equal(item.obsolete, true);
|
||||||
|
assert.equal(item.msgid, 'Second commented item');
|
||||||
|
assert.equal(item.msgstr, 'also not sure');
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('C-Strings', function () {
|
describe('C-Strings', function () {
|
||||||
|
@ -61,6 +61,22 @@ describe('Write', function () {
|
|||||||
assertHasLine(str, '#~ msgstr "Order toevoegen"');
|
assertHasLine(str, '#~ msgstr "Order toevoegen"');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('write obsolete items with comment', function () {
|
||||||
|
var input = fs.readFileSync(__dirname + '/fixtures/commented.po', 'utf8');
|
||||||
|
var po = PO.parse(input);
|
||||||
|
var str = po.toString();
|
||||||
|
|
||||||
|
//this is what msgcat tool of gettext does: don't print #~ for comments
|
||||||
|
assertHasLine(str, '# commented obsolete item');
|
||||||
|
assertHasLine(str, '#, fuzzy');
|
||||||
|
|
||||||
|
//items made obsolete by commenting every keyword with #~
|
||||||
|
assertHasLine(str, '#~ msgid "Commented item"');
|
||||||
|
assertHasLine(str, '#~ msgstr "not sure"');
|
||||||
|
assertHasLine(str, '#~ msgid "Second commented item"');
|
||||||
|
assertHasLine(str, '#~ msgstr "also not sure"');
|
||||||
|
});
|
||||||
|
|
||||||
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