Merge pull request #6 from gabegorelick/serialize-comments
Include comments in `PO.Item` output
This commit is contained in:
commit
783a4129d5
@ -88,7 +88,8 @@ The `PO` class exposes the following members:
|
|||||||
* `msgstr`: An array of translated strings. Items that have no plural msgid
|
* `msgstr`: An array of translated strings. Items that have no plural msgid
|
||||||
only have one element in this array.
|
only have one element in this array.
|
||||||
* `references`: An array of reference strings.
|
* `references`: An array of reference strings.
|
||||||
* `comments`: An array of string comments.
|
* `comments`: An array of string translator comments.
|
||||||
|
* `extractedComments`: An array of string extracted comments.
|
||||||
* `flags`: A dictionary of the string flags. Each flag is mapped to a key with
|
* `flags`: A dictionary of the string flags. Each flag is mapped to a key with
|
||||||
value true. For instance, a string with the fuzzy flag set will have
|
value true. For instance, a string with the fuzzy flag set will have
|
||||||
`item.flags.fuzzy == true`.
|
`item.flags.fuzzy == true`.
|
||||||
|
26
lib/po.js
26
lib/po.js
@ -120,9 +120,13 @@ PO.parse = function (data) {
|
|||||||
item.flags[flags[i]] = true;
|
item.flags[flags[i]] = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (line.match(/^#/)) { // Comment
|
else if (line.match(/^#\s+/)) { // Translator comment
|
||||||
finish();
|
finish();
|
||||||
item.comments.push(trim(line.replace(/^#/, '')));
|
item.comments.push(trim(line.replace(/^#\s+/, '')));
|
||||||
|
}
|
||||||
|
else if (line.match(/^#\./)) { // Extracted comment
|
||||||
|
finish();
|
||||||
|
item.extractedComments.push(trim(line.replace(/^#\./, '')));
|
||||||
}
|
}
|
||||||
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);
|
||||||
@ -168,7 +172,8 @@ PO.Item = function () {
|
|||||||
this.references = [];
|
this.references = [];
|
||||||
this.msgid_plural = null;
|
this.msgid_plural = null;
|
||||||
this.msgstr = [];
|
this.msgstr = [];
|
||||||
this.comments = [];
|
this.comments = []; // translator comments
|
||||||
|
this.extractedComments = [];
|
||||||
this.flags = {};
|
this.flags = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -192,6 +197,21 @@ PO.Item.prototype.toString = function () {
|
|||||||
return lines;
|
return lines;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// https://www.gnu.org/software/gettext/manual/html_node/PO-Files.html
|
||||||
|
// says order is translator-comments, extracted-comments, references, flags
|
||||||
|
|
||||||
|
if (this.comments.length > 0) {
|
||||||
|
this.comments.forEach(function (c) {
|
||||||
|
lines.push('# ' + c);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.extractedComments.length > 0) {
|
||||||
|
this.extractedComments.forEach(function (c) {
|
||||||
|
lines.push('#. ' + c);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (this.references.length > 0) {
|
if (this.references.length > 0) {
|
||||||
this.references.forEach(function (ref) {
|
this.references.forEach(function (ref) {
|
||||||
lines.push('#: ' + ref);
|
lines.push('#: ' + ref);
|
||||||
|
3
test/fixtures/comment.po
vendored
3
test/fixtures/comment.po
vendored
@ -15,6 +15,7 @@ msgstr ""
|
|||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"X-Generator: Poedit 1.6.2\n"
|
"X-Generator: Poedit 1.6.2\n"
|
||||||
|
|
||||||
# Comment
|
# Translator comment
|
||||||
|
#. Extracted comment
|
||||||
msgid "Title, as plain text"
|
msgid "Title, as plain text"
|
||||||
msgstr "Attribut title, en tant que texte brut"
|
msgstr "Attribut title, en tant que texte brut"
|
||||||
|
@ -23,7 +23,7 @@ describe('Parse', function () {
|
|||||||
assert.equal(item.msgstr, "Les ébauches de jetons suivantes peuvent être utilisées à la fois dans les chemins et dans les titres. Lorsqu'elles sont utilisées dans un chemin ou un titre, elles seront remplacées par les valeurs appropriées.");
|
assert.equal(item.msgstr, "Les ébauches de jetons suivantes peuvent être utilisées à la fois dans les chemins et dans les titres. Lorsqu'elles sont utilisées dans un chemin ou un titre, elles seront remplacées par les valeurs appropriées.");
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Handles string comments', function () {
|
it('Handles translator comments', function () {
|
||||||
var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/comment.po', 'utf8'));
|
var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/comment.po', 'utf8'));
|
||||||
assert.notEqual(po, null);
|
assert.notEqual(po, null);
|
||||||
assert.equal(po.items.length, 1);
|
assert.equal(po.items.length, 1);
|
||||||
@ -31,7 +31,18 @@ describe('Parse', function () {
|
|||||||
var item = po.items[0];
|
var item = po.items[0];
|
||||||
assert.equal(item.msgid, "Title, as plain text");
|
assert.equal(item.msgid, "Title, as plain text");
|
||||||
assert.equal(item.msgstr, "Attribut title, en tant que texte brut");
|
assert.equal(item.msgstr, "Attribut title, en tant que texte brut");
|
||||||
assert.deepEqual(item.comments, ["Comment"]);
|
assert.deepEqual(item.comments, ["Translator comment"]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('Handles extracted comments', function () {
|
||||||
|
var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/comment.po', 'utf8'));
|
||||||
|
assert.notEqual(po, null);
|
||||||
|
assert.equal(po.items.length, 1);
|
||||||
|
|
||||||
|
var item = po.items[0];
|
||||||
|
assert.equal(item.msgid, "Title, as plain text");
|
||||||
|
assert.equal(item.msgstr, "Attribut title, en tant que texte brut");
|
||||||
|
assert.deepEqual(item.extractedComments, ["Extracted comment"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Handles string references', function () {
|
it('Handles string references', function () {
|
||||||
|
@ -38,6 +38,20 @@ describe('Write', function () {
|
|||||||
assertHasLine(str, "msgstr \"Source\"");
|
assertHasLine(str, "msgstr \"Source\"");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('write translator comment', function () {
|
||||||
|
var input = fs.readFileSync(__dirname + '/fixtures/comment.po', 'utf8');
|
||||||
|
var po = PO.parse(input);
|
||||||
|
var str = po.toString();
|
||||||
|
assertHasLine(str, "# Translator comment");
|
||||||
|
});
|
||||||
|
|
||||||
|
it('write extracted comment', function () {
|
||||||
|
var input = fs.readFileSync(__dirname + '/fixtures/comment.po', 'utf8');
|
||||||
|
var po = PO.parse(input);
|
||||||
|
var str = po.toString();
|
||||||
|
assertHasLine(str, '#. Extracted comment');
|
||||||
|
});
|
||||||
|
|
||||||
describe('msgctxt', function () {
|
describe('msgctxt', function () {
|
||||||
it('should write context field to file', function () {
|
it('should write context field to file', function () {
|
||||||
var input = fs.readFileSync(__dirname + '/fixtures/big.po', 'utf8');
|
var input = fs.readFileSync(__dirname + '/fixtures/big.po', 'utf8');
|
||||||
|
Loading…
Reference in New Issue
Block a user