Merge pull request #8 from Open-Xchange-Frontend/multiline_headers
add support for multiline string in headers
This commit is contained in:
		
							
								
								
									
										13
									
								
								lib/po.js
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								lib/po.js
									
									
									
									
									
								
							| @@ -74,7 +74,18 @@ PO.parse = function (data) { | |||||||
|         'Plural-Forms': '', |         'Plural-Forms': '', | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     headers.split(/\n/).forEach(function (header) { |     headers.split(/\n/).reduce(function (acc, line) { | ||||||
|  |         if (acc.merge) { | ||||||
|  |             //join lines, remove last resp. first " | ||||||
|  |             line = acc.pop().slice(0, -1) + line.slice(1); | ||||||
|  |             delete acc.merge; | ||||||
|  |         } | ||||||
|  |         if (/^".*"$/.test(line) && !/^".*\\n"$/.test(line)) { | ||||||
|  |             acc.merge = true; | ||||||
|  |         } | ||||||
|  |         acc.push(line); | ||||||
|  |         return acc; | ||||||
|  |     }, []).forEach(function (header) { | ||||||
|         if (header.match(/^#/)) { |         if (header.match(/^#/)) { | ||||||
|             po.comments.push(header.replace(/^#\s*/, '')); |             po.comments.push(header.replace(/^#\s*/, '')); | ||||||
|         } |         } | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								test/fixtures/multi-line.po
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								test/fixtures/multi-line.po
									
									
									
									
										vendored
									
									
								
							| @@ -1,6 +1,8 @@ | |||||||
| # French translation of Link (6.x-2.9) | # French translation of Link (6.x-2.9) | ||||||
| # Copyright (c) 2011 by the French translation team | # Copyright (c) 2011 by the French translation team | ||||||
| # | # | ||||||
|  | ## Plural-Forms by polish translation team to demonstrate multi-line ## | ||||||
|  | # | ||||||
| msgid "" | msgid "" | ||||||
| msgstr "" | msgstr "" | ||||||
| "Project-Id-Version: Link (6.x-2.9)\n" | "Project-Id-Version: Link (6.x-2.9)\n" | ||||||
| @@ -10,7 +12,8 @@ msgstr "" | |||||||
| "MIME-Version: 1.0\n" | "MIME-Version: 1.0\n" | ||||||
| "Content-Type: text/plain; charset=UTF-8\n" | "Content-Type: text/plain; charset=UTF-8\n" | ||||||
| "Content-Transfer-Encoding: 8bit\n" | "Content-Transfer-Encoding: 8bit\n" | ||||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " | ||||||
|  | "|| n%100>=20) ? 1 : 2;\n" | ||||||
| "Last-Translator: Ruben Vermeersch <ruben@rocketeer.be>\n" | "Last-Translator: Ruben Vermeersch <ruben@rocketeer.be>\n" | ||||||
| "Language: fr\n" | "Language: fr\n" | ||||||
| "X-Generator: Poedit 1.6.2\n" | "X-Generator: Poedit 1.6.2\n" | ||||||
|   | |||||||
| @@ -23,6 +23,14 @@ 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 multi-line headers', function () { | ||||||
|  |         var po = PO.parse(fs.readFileSync(__dirname + '/fixtures/multi-line.po', 'utf8')); | ||||||
|  |         assert.notEqual(po, null); | ||||||
|  |         assert.equal(po.items.length, 1); | ||||||
|  |  | ||||||
|  |         assert.equal(po.headers['Plural-Forms'], 'nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;'); | ||||||
|  |     }); | ||||||
|  |  | ||||||
|     it('Handles translator 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); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user