From 5ea3f06a8c45219ca2363f85af108d1ac9cbd82e Mon Sep 17 00:00:00 2001 From: Mike Holly Date: Wed, 21 Dec 2011 22:50:01 -0800 Subject: [PATCH] Initial commit --- LICENSE | 19 +++++++++++++ README.md | 0 lib/extras.po | 50 +++++++++++++++++++++++++++++++++ lib/po.js | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++ package.json | 11 ++++++++ 5 files changed, 157 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 lib/extras.po create mode 100644 lib/po.js create mode 100644 package.json diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..338de1e --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (C) 2012 Michael Holly + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/lib/extras.po b/lib/extras.po new file mode 100644 index 0000000..5af41e5 --- /dev/null +++ b/lib/extras.po @@ -0,0 +1,50 @@ +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"POT-Creation-Date: 2011-08-12 09:55-0700\n" +"PO-Revision-Date: 2011-12-21 22:30-0800\n" +"Last-Translator: Mike Holly \n" +"Language-Team: LANGUAGE \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" + +#: strutta/strutta.admin.inc:11 +msgid "CSV file" +msgstr "Archivo CVS" + +#: strutta/strutta.admin.inc:12 +msgid "Please make sure the file is formatted correctly (Name, E-mail)" +msgstr "Por favor asegúrese de que el archivo tenga el fomato correcto (Nombre, E-mail)" + +#: strutta/strutta.admin.inc:18 +msgid "From address" +msgstr "Dirección" + +#: strutta/strutta.admin.inc:25 +msgid "Plain text" +msgstr "Texto plano" + +#: strutta/strutta.admin.inc:26 +msgid "HTML markup" +msgstr "Formato HTML" + +#: strutta/strutta.admin.inc:28 +msgid "Content type" +msgstr "Tipo de contenido" + +#: strutta_contests_client/strutta_contests_client.module:1381 +msgid "" +"There is a limit of 1 vote per entry over !period. \n" +"
Please come back and vote again in !retry." +msgstr "" +"Hay un límite de 1 voto por entrada !period. \n" +"
Por favor vuelve más tarde para votar!retry.\"" + +#: strutta_submit/strutta_submit.module:113 +msgid "@count entry" +msgid_plural "@count entries" +msgstr[0] "@count entrada" +msgstr[1] "@count entradas" + diff --git a/lib/po.js b/lib/po.js new file mode 100644 index 0000000..ee54f85 --- /dev/null +++ b/lib/po.js @@ -0,0 +1,77 @@ +var fs = require('fs'); + +var PO = function() { + this.headers = {}; + this.items = []; +}; + +PO.prototype.write = function(filename) { + +}; + +PO.load = function(filename, callback) { + fs.readFile(filename, 'utf-8', function(err, data){ + if (err) throw err; + var po = new PO + , parts = data.split(/\n\n/) + , headers = parts.shift().split(/\n/); + + headers.forEach(function(header){ + if (header.match(/^"/)) { + var p = header.split(/:/, 2); + po.headers[p[0].trim()] = p[1].trim(); + } + }); + + parts.forEach(function(part){ + var item = PO.Item.parse(part); + po.items.push(item); + }); + + callback(po); + }); +}; + +PO.Item = function() { + this.msgid = null; + this.references = []; + this.msgid_plural = null; + this.msgstr = []; +}; + +PO.Item.parse = function(chunk) { + + var item = new PO.Item(); + var parts = chunk.split(/\nmsg/); + + var extract = function(string) { + var lines = string.split(/\n/); + var value = ''; + lines.forEach(function(line){ + var p = line.split(/"/); p.shift(); p.pop(); + value += "\n" + p.join('"'); + }); + return value.trim(); + }; + + parts.forEach(function(part){ + if (part.match(/^#:/)) { + item.references.push(part.replace(/^#:\s/, '')); + } + else if (part.match(/^id\s/)) { + item.msgid = extract(part); + } + else if (part.match(/id_plural/)) { + item.msgid_plural = extract(part); + } + else if (part.match(/str/)) { + item.msgstr.push(extract(part)); + } + }); + + return item; +}; + +PO.load('extras.po', function(po){ + //console.log(po); +}); \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..26a0092 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name" : "node-po", + "description" : "Simple library for loading and saving Gettext PO files.", + "version" : "0.1", + "author" : "Mike Holly", + "homepage" : "http://github.com/mikejholly/node-po", + "repository" : {"type" : "git", "url" : "http://github.com/mikejholly/node-po.git"}, + "dependencies" : [], + "main" : "./lib/po", + "keywords" : ["i18n", "l10n", "gettext", "mo" "po"] +}