po_to_json 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.md +7 -1
- data/lib/po_to_json.rb +21 -17
- metadata +5 -5
data/README.md
CHANGED
@@ -5,7 +5,7 @@ Convert gettext PO files to json to use in your javascript app, based po2json.pl
|
|
5
5
|
Ideally you'll use this on a rake task that creates json versions of your po files, which can later be used from javascript
|
6
6
|
with Jed ( http://slexaxton.github.com/Jed/ )
|
7
7
|
|
8
|
-
## Installing
|
8
|
+
## Installing
|
9
9
|
|
10
10
|
Via rubygems:
|
11
11
|
```ruby
|
@@ -27,6 +27,12 @@ json_string = PoToJson.new("#{Rails.root}/locale/es/app.po").generate_for_jed('e
|
|
27
27
|
File.open("#{Rails.root}/app/assets/javascripts/locale/es/app.js",'w').write(json_string)
|
28
28
|
```
|
29
29
|
|
30
|
+
If you need a pretty json, add `:pretty => true` to `generate_for_jed`, like
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
json_string = PoToJson.new("#{Rails.root}/locale/es/app.po").generate_for_jed('es', :pretty => true)
|
34
|
+
```
|
35
|
+
|
30
36
|
The javascript file generated has a global 'locales' object with an attribute corresponding to the generated language:
|
31
37
|
|
32
38
|
```javascript
|
data/lib/po_to_json.rb
CHANGED
@@ -12,7 +12,7 @@ class PoToJson
|
|
12
12
|
@path_to_po = path_to_po
|
13
13
|
end
|
14
14
|
|
15
|
-
|
15
|
+
|
16
16
|
# Generates a jed-compatible js file from the current PO.
|
17
17
|
# This include adding some wrapping structure to the translations and
|
18
18
|
# making sure the minimum headers required by Jed are provided.
|
@@ -22,7 +22,7 @@ class PoToJson
|
|
22
22
|
# >>> i18n = new Jed(locales['es'])
|
23
23
|
# >>> i18n.gettext('Hello World')
|
24
24
|
# => 'Hola Mundo'
|
25
|
-
def generate_for_jed(language_code)
|
25
|
+
def generate_for_jed(language_code, opts={})
|
26
26
|
@parsed ||= self.parse
|
27
27
|
|
28
28
|
@parsed['']['lang'] = language_code
|
@@ -33,10 +33,14 @@ class PoToJson
|
|
33
33
|
domain: 'app',
|
34
34
|
locale_data: { app: @parsed }
|
35
35
|
}
|
36
|
-
|
37
|
-
|
36
|
+
|
37
|
+
if opts[:pretty]
|
38
|
+
"var locales = locales || {}; locales['#{language_code}'] = #{JSON.pretty_generate(jed_json)};"
|
39
|
+
else
|
40
|
+
"var locales = locales || {}; locales['#{language_code}'] = #{JSON.generate(jed_json)};"
|
41
|
+
end
|
38
42
|
end
|
39
|
-
|
43
|
+
|
40
44
|
|
41
45
|
# Messages in a PO file are defined as a series of 'key value' pairs,
|
42
46
|
# values may span over more than one line. Each key defines an attribute
|
@@ -56,12 +60,12 @@ class PoToJson
|
|
56
60
|
# Empty lines means we have parsed one full message
|
57
61
|
# so far and need to flush the buffer
|
58
62
|
when /^$/ then flush_buffer
|
59
|
-
|
63
|
+
|
60
64
|
# These are the po file comments
|
61
65
|
# The second '#' in the following regex is in square brackets
|
62
66
|
# b/c it messed up my syntax highlighter, no other reason.
|
63
67
|
when /^(#[^~]|[#]$)/ then next
|
64
|
-
|
68
|
+
|
65
69
|
when /^(?:#~ )?msgctxt\s+(.*)/ then add_to_buffer($1, :msgctxt)
|
66
70
|
|
67
71
|
when /^(?:#~ )?msgid\s+(.*)/ then add_to_buffer($1, :msgid)
|
@@ -75,7 +79,7 @@ class PoToJson
|
|
75
79
|
when /^(?:#~ )?msgstr\[(\d+)\]\s+(.*)/ then add_to_buffer($2, "msgstr_#{$1}".to_sym)
|
76
80
|
|
77
81
|
when /^(?:#~ )?"/ then add_to_buffer(line)
|
78
|
-
|
82
|
+
|
79
83
|
else
|
80
84
|
@errors << ["Strange line #{line}"]
|
81
85
|
end
|
@@ -84,13 +88,13 @@ class PoToJson
|
|
84
88
|
# In case the file did not end with a newline, we want to flush the buffer
|
85
89
|
# one more time to write the last message too.
|
86
90
|
flush_buffer
|
87
|
-
|
91
|
+
|
88
92
|
# This will turn the header values into a friendlier json structure too.
|
89
93
|
parse_header_lines
|
90
|
-
|
94
|
+
|
91
95
|
return @parsed_values
|
92
96
|
end
|
93
|
-
|
97
|
+
|
94
98
|
def flush_buffer
|
95
99
|
return unless @buffer[:msgid]
|
96
100
|
|
@@ -99,7 +103,7 @@ class PoToJson
|
|
99
103
|
else
|
100
104
|
@buffer[:msgid]
|
101
105
|
end
|
102
|
-
|
106
|
+
|
103
107
|
msgid_plural = if @buffer[:msgid_plural] && @buffer[:msgid_plural].size > 0
|
104
108
|
@buffer[:msgid_plural]
|
105
109
|
end
|
@@ -111,12 +115,12 @@ class PoToJson
|
|
111
115
|
end
|
112
116
|
trans.unshift(msgid_plural)
|
113
117
|
|
114
|
-
@parsed_values[msg_ctxt_id] = trans if trans.size > 1
|
118
|
+
@parsed_values[msg_ctxt_id] = trans if trans.size > 1
|
115
119
|
|
116
120
|
@buffer = {}
|
117
121
|
@last_key_type = ""
|
118
122
|
end
|
119
|
-
|
123
|
+
|
120
124
|
# The buffer keeps key/value pairs for all the config options
|
121
125
|
# defined on an entry, including the message id and value.
|
122
126
|
# For continued lines, the key_type can be empty, so the last
|
@@ -143,11 +147,11 @@ class PoToJson
|
|
143
147
|
@parsed_values[""] = {}
|
144
148
|
return
|
145
149
|
end
|
146
|
-
|
150
|
+
|
147
151
|
headers = {}
|
148
152
|
# Heading lines may have escaped newlines in them
|
149
153
|
@parsed_values[""][1].split(/\\n/).each do |line|
|
150
|
-
next if line.size == 0
|
154
|
+
next if line.size == 0
|
151
155
|
|
152
156
|
if line =~ /(.*?):(.*)/
|
153
157
|
key, value = $1, $2
|
@@ -162,7 +166,7 @@ class PoToJson
|
|
162
166
|
@errors << ["Malformed header #{line}"]
|
163
167
|
end
|
164
168
|
end
|
165
|
-
|
169
|
+
|
166
170
|
@parsed_values[""] = headers
|
167
171
|
end
|
168
172
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: po_to_json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,19 +10,19 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2012-07-17 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: json
|
17
|
-
requirement: &
|
17
|
+
requirement: &70258116707580 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
20
|
- - ! '>='
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: '0'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *70258116707580
|
26
26
|
description: Convert gettext PO files to json to use in your javascript app, based
|
27
27
|
po2json.pl (by DuckDuckGo, Inc. http://duckduckgo.com/, Torsten Raudssus <torsten@raudss.us>.)
|
28
28
|
email: nubis@woobiz.com.ar
|