gettext_i18n_rails_js 1.0.4 → 1.3.1
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +32 -11
- data/README.md +34 -31
- data/lib/assets/javascripts/gettext/all.js +2 -0
- data/lib/gettext_i18n_rails_js/config.rb +6 -5
- data/lib/gettext_i18n_rails_js/engine.rb +2 -1
- data/lib/gettext_i18n_rails_js/parser/base.rb +9 -2
- data/lib/gettext_i18n_rails_js/parser/handlebars.rb +6 -5
- data/lib/gettext_i18n_rails_js/parser/javascript.rb +41 -6
- data/lib/gettext_i18n_rails_js/parser.rb +2 -1
- data/lib/gettext_i18n_rails_js/task.rb +2 -1
- data/lib/gettext_i18n_rails_js/version.rb +4 -3
- data/lib/gettext_i18n_rails_js.rb +2 -1
- data/lib/tasks/gettext_i18n_rails_js_tasks.rake +4 -1
- data/spec/fixtures/example.vue +21 -0
- data/spec/gettext_i18n_rails_js/parser/handlebars_spec.rb +62 -13
- data/spec/gettext_i18n_rails_js/parser/javascript_spec.rb +82 -7
- data/spec/gettext_i18n_rails_js_spec.rb +2 -1
- data/spec/spec_helper.rb +9 -22
- data/spec/support/with_file.rb +2 -1
- metadata +24 -24
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3a64135b2b1246753cdc84b6ae55c6fd3300241f670fe5165ddb285c8fc6cdff
|
4
|
+
data.tar.gz: dd9907de4a4e8f45e25a2f92d4f5716843f9971fa08d26b005fc7ef6f8bceb02
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69484dec873a3c1e521bb32045e37ef8403a179a3464f63b5554663ff4a95bf832fbb3b40cb4bf1379102182f56646ea65dc61af1f5c265871988398220c53e1
|
7
|
+
data.tar.gz: a3b9f155f735ddc98e84e83b0739dab5c20342e5a42895bd9d6c62208705a462809c6f3e3ee71efa0067f12672295eb81b59bb4e0810329c660ac25ddd830438
|
data/CHANGELOG.md
CHANGED
@@ -1,27 +1,48 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [1.3.1](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.4.0) - 2021-12-08
|
4
|
+
|
5
|
+
* Fixed multiline translation strings (@delxen)
|
6
|
+
* Switched to Codacy for coverage reports (@tboerger)
|
7
|
+
* Switched to GitHub actions for CI (@ezr-ondrej)
|
8
|
+
|
9
|
+
## [1.3.0](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.3.0) - 2017-03-16
|
10
|
+
|
11
|
+
* Fixed Handlebars translations with options (@mikezaby)
|
12
|
+
* Fixed latest Rubocop offenses (@mikezaby)
|
13
|
+
* Dropped failing coveralls, fixed codeclimate (@tboerger)
|
14
|
+
|
15
|
+
## [1.2.0](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.2.0) - 2016-06-02
|
16
|
+
|
17
|
+
* Support for JSX files (@artemv)
|
18
|
+
* Fixed test suite, reduced test matrix (@tboerger)
|
19
|
+
|
20
|
+
## [1.1.0](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.1.0) - 2016-06-02
|
21
|
+
|
22
|
+
* Replace hyphens with underscores in locale var from DOM (@filib)
|
23
|
+
|
3
24
|
## [1.0.4](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.0.4) - 2016-05-31
|
4
25
|
|
5
|
-
*
|
26
|
+
* Support ES2015 template strings (@bradbarrow)
|
6
27
|
|
7
28
|
## [1.0.3](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.0.3) - 2015-11-03
|
8
29
|
|
9
|
-
*
|
30
|
+
* Stop using bundler within the core lib (@domcleal)
|
10
31
|
|
11
32
|
## [1.0.2](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.0.2) - 2015-03-30
|
12
33
|
|
13
|
-
*
|
14
|
-
*
|
15
|
-
*
|
34
|
+
* Fixes exception when parsing empty js/coffee files (@tboerger)
|
35
|
+
* Avoid methods defined in rake task exposing globally (@tboerger)
|
36
|
+
* Added better configuration options (@tboerger)
|
16
37
|
|
17
38
|
## [1.0.1](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.0.1) - 2015-02-24
|
18
39
|
|
19
|
-
*
|
40
|
+
* Added missing javascripts to the gemspec (@tboerger)
|
20
41
|
|
21
42
|
## [1.0.0](https://github.com/webhippie/gettext_i18n_rails_js/releases/tag/v1.0.0) - 2015-02-24
|
22
43
|
|
23
|
-
*
|
24
|
-
*
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*
|
44
|
+
* Transfer from github.com/nubis/gettext_i18n_rails_js (@tboerger)
|
45
|
+
* Added TravisCI, Rubocop and Coveralls (@tboerger)
|
46
|
+
* Updated structure to my opinionated gem style (@tboerger)
|
47
|
+
* Changed default handlebars function to ```__``` (@tboerger)
|
48
|
+
* Added extended ```gettext_i18n_rails_js.yml``` (@tboerger)
|
data/README.md
CHANGED
@@ -1,10 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# gettext_i18n_rails_js
|
2
2
|
|
3
|
-
[](https://gemnasium.com/webhippie/gettext_i18n_rails_js)
|
3
|
+
[](https://github.com/webhippie/gettext_i18n_rails_js/actions/workflows/testing.yaml)
|
4
|
+
[](https://matrix.to/#/#webhippie:matrix.org)
|
5
|
+
[](https://www.codacy.com/gh/webhippie/gettext_i18n_rails_js/dashboard?utm_source=github.com&utm_medium=referral&utm_content=webhippie/gettext_i18n_rails_js&utm_campaign=Badge_Grade)
|
6
|
+
[](https://badge.fury.io/rb/gettext_i18n_rails_js)
|
8
7
|
|
9
8
|
Extends [gettext_i18n_rails](https://github.com/grosser/gettext_i18n_rails),
|
10
9
|
making your .PO files available to client side javascript as JSON. It will find
|
@@ -13,32 +12,37 @@ will create JSON versions of your .PO files so you can serve them with the rest
|
|
13
12
|
of your assets, thus letting you access all your translations offline from
|
14
13
|
client side javascript.
|
15
14
|
|
16
|
-
|
17
15
|
## Versions
|
18
16
|
|
19
|
-
|
20
|
-
|
21
|
-
* Ruby
|
22
|
-
* 1.9.3
|
23
|
-
* 2.0.0
|
24
|
-
* 2.1.0
|
25
|
-
* Rails
|
26
|
-
* 3.2.21
|
27
|
-
* 4.0.13
|
28
|
-
* 4.1.9
|
29
|
-
* 4.2.0
|
30
|
-
|
17
|
+
For a list of the tested and supported Ruby and Rails versions please take a
|
18
|
+
look at the [wokflow][workflow].
|
31
19
|
|
32
20
|
## Installation
|
33
21
|
|
34
22
|
```ruby
|
35
|
-
gem "gettext_i18n_rails_js", "~> 1.
|
23
|
+
gem "gettext_i18n_rails_js", "~> 1.2"
|
36
24
|
```
|
37
25
|
|
26
|
+
## Versioning
|
27
|
+
|
28
|
+
This library aims to adhere to [Semantic Versioning 2.0.0][semver]. Violations
|
29
|
+
of this scheme should be reported as bugs. Specifically, if a minor or patch
|
30
|
+
version is released that breaks backward compatibility, a new version should be
|
31
|
+
immediately released that restores compatibility. Breaking changes to the public
|
32
|
+
API will only be introduced with new major versions.
|
33
|
+
|
34
|
+
As a result of this policy, you can (and should) specify a dependency on this
|
35
|
+
gem using the [Pessimistic Version Constraint][pvc] with two digits of precision.
|
36
|
+
|
37
|
+
For example:
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
spec.add_dependency "gettext_i18n_rails_js", "~> 1.2"
|
41
|
+
```
|
38
42
|
|
39
43
|
## Usage
|
40
44
|
|
41
|
-
|
45
|
+
Set up you rails application with gettext support as usual, afterwards just
|
42
46
|
execute the following rake task to export your translations to JSON:
|
43
47
|
|
44
48
|
```bash
|
@@ -98,33 +102,32 @@ GettextI18nRailsJs.config do |config|
|
|
98
102
|
end
|
99
103
|
```
|
100
104
|
|
101
|
-
|
102
105
|
## Todo
|
103
106
|
|
104
|
-
*
|
105
|
-
*
|
106
|
-
|
107
|
+
* More deep testing against multiple Rails versions
|
108
|
+
* Extend the current test suite, especially handlebars
|
107
109
|
|
108
110
|
## Contributing
|
109
111
|
|
110
112
|
Fork -> Patch -> Spec -> Push -> Pull Request
|
111
113
|
|
112
|
-
|
113
114
|
## Authors
|
114
115
|
|
115
|
-
*
|
116
|
-
*
|
117
|
-
*
|
118
|
-
|
116
|
+
* [Thomas Boerger](https://github.com/tboerger)
|
117
|
+
* [Nubis](https://github.com/nubis)
|
118
|
+
* [Other contributors](https://github.com/webhippie/gettext_i18n_rails_js/graphs/contributors)
|
119
119
|
|
120
120
|
## License
|
121
121
|
|
122
122
|
MIT
|
123
123
|
|
124
|
-
|
125
124
|
## Copyright
|
126
125
|
|
127
126
|
```
|
128
127
|
Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
129
128
|
Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
130
129
|
```
|
130
|
+
|
131
|
+
[workflow]: https://github.com/webhippie/gettext_i18n_rails_js/blob/master/.github/workflows/testing.yml
|
132
|
+
[semver]: http://semver.org
|
133
|
+
[pvc]: http://guides.rubygems.org/patterns/#pessimistic-version-constraint
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -25,10 +26,10 @@
|
|
25
26
|
|
26
27
|
module GettextI18nRailsJs
|
27
28
|
class Config
|
28
|
-
attr_accessor :output_path
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
attr_accessor :output_path,
|
30
|
+
:handlebars_function,
|
31
|
+
:javascript_function,
|
32
|
+
:jed_options
|
32
33
|
|
33
34
|
def initialize(&block)
|
34
35
|
@output_path = defaults[:output_path]
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -36,7 +37,7 @@ module GettextI18nRailsJs
|
|
36
37
|
# conflicts with other javascript libraries. You only need to define
|
37
38
|
# the base function name to replace "_" and all the other variants
|
38
39
|
# (s_, n_, N_) will be deduced automatically.
|
39
|
-
|
40
|
+
attr_writer :gettext_function
|
40
41
|
|
41
42
|
def gettext_function
|
42
43
|
@gettext_function ||= "__"
|
@@ -79,12 +80,18 @@ module GettextI18nRailsJs
|
|
79
80
|
end.join(separator_for(function))
|
80
81
|
|
81
82
|
next if key == ""
|
83
|
+
|
82
84
|
results_for(key, file, line)
|
83
85
|
end
|
84
86
|
end
|
85
87
|
|
86
88
|
protected
|
87
89
|
|
90
|
+
def cleanup_multiline_line(value)
|
91
|
+
result = value.chomp
|
92
|
+
result.strip
|
93
|
+
end
|
94
|
+
|
88
95
|
def cleanup_value(value)
|
89
96
|
value
|
90
97
|
.tr("\n", "\n")
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -62,18 +63,18 @@ module GettextI18nRailsJs
|
|
62
63
|
# * Remaining arguments
|
63
64
|
# * Function call closing parenthesis
|
64
65
|
#
|
65
|
-
|
66
66
|
/
|
67
67
|
\B[{]{2}(
|
68
68
|
([snN]?#{gettext_function})
|
69
69
|
\s+
|
70
70
|
(
|
71
|
-
"
|
72
|
-
|
71
|
+
(["'])(?:\\?+.)*?\4
|
72
|
+
(?:\s+(["'])(?:\\?+.)*?\5)?
|
73
73
|
)
|
74
|
+
.*?
|
74
75
|
)
|
75
76
|
[}]{2}
|
76
|
-
/
|
77
|
+
/xm
|
77
78
|
end
|
78
79
|
end
|
79
80
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -36,6 +37,8 @@ module GettextI18nRailsJs
|
|
36
37
|
def target?(file)
|
37
38
|
[
|
38
39
|
".js",
|
40
|
+
".jsx",
|
41
|
+
".vue",
|
39
42
|
".coffee"
|
40
43
|
].include? ::File.extname(file)
|
41
44
|
end
|
@@ -44,14 +47,46 @@ module GettextI18nRailsJs
|
|
44
47
|
|
45
48
|
def collect_for(value)
|
46
49
|
::File.open(value) do |f|
|
50
|
+
multiline = false
|
51
|
+
line_no = 0
|
52
|
+
buffer = ""
|
47
53
|
f.each_line.each_with_index.collect do |line, idx|
|
48
|
-
|
49
|
-
|
54
|
+
if multiline
|
55
|
+
buffer << cleanup_multiline_line(line)
|
56
|
+
else
|
57
|
+
buffer = line
|
58
|
+
line_no = idx + 1
|
59
|
+
end
|
60
|
+
|
61
|
+
if invoke_regex =~ buffer
|
62
|
+
multiline = false
|
63
|
+
buffer.scan(invoke_regex).collect do |function, arguments|
|
64
|
+
yield(function, arguments, line_no)
|
65
|
+
end
|
66
|
+
elsif invoke_open_regex =~ buffer
|
67
|
+
buffer << cleanup_multiline_line(buffer) unless multiline
|
68
|
+
buffer << " "
|
69
|
+
multiline = true
|
70
|
+
[]
|
71
|
+
else
|
72
|
+
[]
|
50
73
|
end
|
51
74
|
end.inject([], :+).compact
|
52
75
|
end
|
53
76
|
end
|
54
77
|
|
78
|
+
def invoke_open_regex
|
79
|
+
#
|
80
|
+
# * Matches the function call grouping the method used (__, n__, N__)
|
81
|
+
# * A parenthesis to start the arguments to the function.
|
82
|
+
# * Used to identify translation start on a single line
|
83
|
+
#
|
84
|
+
|
85
|
+
/
|
86
|
+
(\b[snN]?#{gettext_function})\(
|
87
|
+
/x
|
88
|
+
end
|
89
|
+
|
55
90
|
def invoke_regex
|
56
91
|
#
|
57
92
|
# * Matches the function call grouping the method used (__, n__, N__)
|
@@ -69,7 +104,7 @@ module GettextI18nRailsJs
|
|
69
104
|
#{arg_regex}
|
70
105
|
)?
|
71
106
|
\)
|
72
|
-
/
|
107
|
+
/xm
|
73
108
|
end
|
74
109
|
|
75
110
|
def arg_regex
|
@@ -87,10 +122,10 @@ module GettextI18nRailsJs
|
|
87
122
|
'(?:[^'\\]|\\.)*?'|
|
88
123
|
"(?:[^"\\]|\\.)*?"|
|
89
124
|
`(?:[^`\\]|\\.)*?`|
|
90
|
-
[a-zA-Z0-9_
|
125
|
+
[a-zA-Z0-9_.()]*?
|
91
126
|
)
|
92
127
|
\s*
|
93
|
-
/
|
128
|
+
/xm
|
94
129
|
end
|
95
130
|
end
|
96
131
|
end
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -26,8 +27,8 @@
|
|
26
27
|
module GettextI18nRailsJs
|
27
28
|
class Version
|
28
29
|
MAJOR = 1
|
29
|
-
MINOR =
|
30
|
-
PATCH =
|
30
|
+
MINOR = 3
|
31
|
+
PATCH = 1
|
31
32
|
|
32
33
|
PRE = nil
|
33
34
|
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -48,6 +49,8 @@ namespace :gettext do
|
|
48
49
|
"slim",
|
49
50
|
"rhtml",
|
50
51
|
"js",
|
52
|
+
"jsx",
|
53
|
+
"vue",
|
51
54
|
"coffee",
|
52
55
|
"handlebars",
|
53
56
|
"hbs",
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<template>
|
2
|
+
<base-table-actions v-if="canInteract"
|
3
|
+
class="spec-banner-actions">
|
4
|
+
|
5
|
+
<div v-if="canCopy"
|
6
|
+
@click="handleCopy"
|
7
|
+
class="dropdown-item">{{ __("Hello\nBuddy") }}</div>
|
8
|
+
|
9
|
+
<div v-if="canArchive"
|
10
|
+
@click="handleArchive"
|
11
|
+
class="dropdown-item">{{ archivePlaceholder }}</div>
|
12
|
+
</base-table-actions>
|
13
|
+
</template>
|
14
|
+
|
15
|
+
|
16
|
+
<script>
|
17
|
+
function pepito() {
|
18
|
+
var string = "this" + __('json') + 'should be translated';
|
19
|
+
alert(n__('item', 'items', 3));
|
20
|
+
}
|
21
|
+
</script>
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -60,14 +61,14 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
60
61
|
describe "#parse" do
|
61
62
|
it "finds plural messages" do
|
62
63
|
content = <<-EOF
|
63
|
-
<div>{{n__ "xxxx" "yyyy
|
64
|
+
<div>{{n__ "xxxx" "yyyy" some_count}}</div>
|
64
65
|
EOF
|
65
66
|
|
66
67
|
with_file content do |path|
|
67
68
|
expect(parser.parse(path, [])).to(
|
68
69
|
eq(
|
69
70
|
[
|
70
|
-
["xxxx\000yyyy
|
71
|
+
["xxxx\000yyyy", "#{path}:1"]
|
71
72
|
]
|
72
73
|
)
|
73
74
|
)
|
@@ -76,7 +77,7 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
76
77
|
|
77
78
|
it "finds namespaced messages" do
|
78
79
|
content = <<-EOF
|
79
|
-
<div>{{__ "xxxx"
|
80
|
+
<div>{{__ "xxxx" "yyyy"}}</div>
|
80
81
|
EOF
|
81
82
|
|
82
83
|
with_file content do |path|
|
@@ -106,6 +107,22 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
106
107
|
end
|
107
108
|
end
|
108
109
|
|
110
|
+
it "finds single quote messages" do
|
111
|
+
content = <<-EOF
|
112
|
+
<div>{{__ 'blah'}}</div>
|
113
|
+
EOF
|
114
|
+
|
115
|
+
with_file content do |path|
|
116
|
+
expect(parser.parse(path, [])).to(
|
117
|
+
eq(
|
118
|
+
[
|
119
|
+
["blah", "#{path}:1"]
|
120
|
+
]
|
121
|
+
)
|
122
|
+
)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
109
126
|
# it "finds messages with newlines/tabs" do
|
110
127
|
# content = <<-EOF
|
111
128
|
# bla = __("xxxx\n\tfoo")
|
@@ -134,12 +151,24 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
134
151
|
# end
|
135
152
|
# end
|
136
153
|
|
137
|
-
#
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
154
|
+
# rubocop:disable Style/TrailingCommaInArrayLiteral
|
155
|
+
it "finds interpolated multi-line messages" do
|
156
|
+
content = <<-EOF
|
157
|
+
<div>{{{__ 'Hello, my name is <span class="name">John Doe</span>
|
158
|
+
and this is a very long string'}}}</div>
|
159
|
+
EOF
|
160
|
+
with_file content do |path|
|
161
|
+
expect(parser.parse(path, [])).to(
|
162
|
+
eq(
|
163
|
+
[
|
164
|
+
["Hello, my name is <span class=\"name\">John Doe</span>
|
165
|
+
and this is a very long string", "#{path}:1"],
|
166
|
+
]
|
167
|
+
)
|
168
|
+
)
|
169
|
+
end
|
170
|
+
end
|
171
|
+
# rubocop:enable Style/TrailingCommaInArrayLiteral
|
143
172
|
|
144
173
|
# with_file content do |path|
|
145
174
|
# expect(parser.parse(path, [])).to(
|
@@ -234,6 +263,26 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
234
263
|
end
|
235
264
|
end
|
236
265
|
|
266
|
+
# rubocop:disable Style/FormatStringToken
|
267
|
+
it "does not parse options" do
|
268
|
+
content = <<-EOF
|
269
|
+
<div>
|
270
|
+
{{__ "test with %{param}" param="something"}}
|
271
|
+
</div>
|
272
|
+
EOF
|
273
|
+
|
274
|
+
with_file content do |path|
|
275
|
+
expect(parser.parse(path, [])).to(
|
276
|
+
eq(
|
277
|
+
[
|
278
|
+
["test with %{param}", "#{path}:1"]
|
279
|
+
]
|
280
|
+
)
|
281
|
+
)
|
282
|
+
end
|
283
|
+
end
|
284
|
+
# rubocop:enable Style/FormatStringToken
|
285
|
+
|
237
286
|
# it "does not parse internal functions" do
|
238
287
|
# content = <<-EOF
|
239
288
|
# bla = n__("items (single)", "i (more)", item.count()) + __('foobar')
|
@@ -251,8 +300,8 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
251
300
|
describe "parses handlebars files" do
|
252
301
|
let(:example) do
|
253
302
|
File.expand_path(
|
254
|
-
"
|
255
|
-
|
303
|
+
"../../fixtures/example.handlebars",
|
304
|
+
__dir__
|
256
305
|
)
|
257
306
|
end
|
258
307
|
|
@@ -279,7 +328,7 @@ describe GettextI18nRailsJs::Parser::Handlebars do
|
|
279
328
|
<div>
|
280
329
|
{{gettext \"Hello {yourname}\"}}
|
281
330
|
<span>
|
282
|
-
{{ngettext \"item\"
|
331
|
+
{{ngettext \"item\" \"items\" 44}}
|
283
332
|
</span>
|
284
333
|
</div>
|
285
334
|
EOF
|
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -37,6 +38,14 @@ describe GettextI18nRailsJs::Parser::Javascript do
|
|
37
38
|
expect(parser.target?("foo/bar/xxx.coffee")).to be_truthy
|
38
39
|
end
|
39
40
|
|
41
|
+
it "targets .vue" do
|
42
|
+
expect(parser.target?("foo/bar/xxx.vue")).to be_truthy
|
43
|
+
end
|
44
|
+
|
45
|
+
it "targets .jsx" do
|
46
|
+
expect(parser.target?("foo/bar/xxx.jsx")).to be_truthy
|
47
|
+
end
|
48
|
+
|
40
49
|
it "does not target cows" do
|
41
50
|
expect(parser.target?("foo/bar/xxx.cows")).to be_falsey
|
42
51
|
end
|
@@ -191,6 +200,25 @@ describe GettextI18nRailsJs::Parser::Javascript do
|
|
191
200
|
end
|
192
201
|
end
|
193
202
|
|
203
|
+
it "finds multi-line translations" do
|
204
|
+
content = <<-'EOF'
|
205
|
+
""" Parser should grab
|
206
|
+
__(`Hello, my name is <span class="name">John Doe</span>
|
207
|
+
and this is a very long string`)
|
208
|
+
"""
|
209
|
+
EOF
|
210
|
+
|
211
|
+
with_file content do |path|
|
212
|
+
expect(parser.parse(path, [])).to(
|
213
|
+
eq(
|
214
|
+
[
|
215
|
+
["Hello, my name is <span class=\"name\">John Doe</span> and this is a very long string", "#{path}:2"]
|
216
|
+
]
|
217
|
+
)
|
218
|
+
)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
194
222
|
it "does not capture a false positive" do
|
195
223
|
content = <<-'EOF'
|
196
224
|
bla = should_not_be_registered__("xxxx", "yyyy")
|
@@ -264,11 +292,56 @@ describe GettextI18nRailsJs::Parser::Javascript do
|
|
264
292
|
end
|
265
293
|
end
|
266
294
|
|
295
|
+
describe "parses vue files" do
|
296
|
+
let(:example) do
|
297
|
+
File.expand_path(
|
298
|
+
"../../fixtures/example.vue",
|
299
|
+
__dir__
|
300
|
+
)
|
301
|
+
end
|
302
|
+
|
303
|
+
let(:parsed_example) do
|
304
|
+
parser.parse(example, [])
|
305
|
+
end
|
306
|
+
|
307
|
+
it "parses all translations" do
|
308
|
+
expect(parsed_example).to(
|
309
|
+
eq(
|
310
|
+
[
|
311
|
+
["Hello\\nBuddy", "#{example}:7"],
|
312
|
+
["json", "#{example}:18"],
|
313
|
+
["item\u0000items", "#{example}:19"]
|
314
|
+
]
|
315
|
+
)
|
316
|
+
)
|
317
|
+
end
|
318
|
+
|
319
|
+
it "accepts changing the translate method" do
|
320
|
+
parser.gettext_function = "gettext"
|
321
|
+
|
322
|
+
content = <<-'EOF'
|
323
|
+
var string = \"this\" + gettext('json') + 'should be translated';
|
324
|
+
EOF
|
325
|
+
|
326
|
+
with_file content do |path|
|
327
|
+
expect(parser.parse(path, [])).to(
|
328
|
+
eq(
|
329
|
+
[
|
330
|
+
["json", "#{path}:1"]
|
331
|
+
]
|
332
|
+
)
|
333
|
+
)
|
334
|
+
end
|
335
|
+
|
336
|
+
parser.gettext_function = "__"
|
337
|
+
end
|
338
|
+
end
|
339
|
+
|
267
340
|
describe "parses javascript files" do
|
268
341
|
let(:example) do
|
269
342
|
File.expand_path(
|
270
|
-
"
|
271
|
-
|
343
|
+
"../../fixtures/example.js",
|
344
|
+
__dir__
|
272
345
|
)
|
273
346
|
end
|
274
347
|
|
@@ -295,14 +368,16 @@ describe GettextI18nRailsJs::Parser::Javascript do
|
|
295
368
|
parser.gettext_function = "gettext"
|
296
369
|
|
297
370
|
content = <<-'EOF'
|
298
|
-
|
371
|
+
<template><div>{{ gettext('name') }}</div></template>
|
372
|
+
<script>var string = \"this\" + gettext('json') + 'should be translated';</script>
|
299
373
|
EOF
|
300
374
|
|
301
375
|
with_file content do |path|
|
302
376
|
expect(parser.parse(path, [])).to(
|
303
377
|
eq(
|
304
378
|
[
|
305
|
-
["
|
379
|
+
["name", "#{path}:1"],
|
380
|
+
["json", "#{path}:2"]
|
306
381
|
]
|
307
382
|
)
|
308
383
|
)
|
@@ -315,8 +390,8 @@ describe GettextI18nRailsJs::Parser::Javascript do
|
|
315
390
|
describe "parses coffee files" do
|
316
391
|
let(:example) do
|
317
392
|
File.expand_path(
|
318
|
-
"
|
319
|
-
|
393
|
+
"../../fixtures/example.coffee",
|
394
|
+
__dir__
|
320
395
|
)
|
321
396
|
end
|
322
397
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
2
3
|
#
|
3
4
|
# Copyright (c) 2012-2015 Dropmysite.com <https://dropmyemail.com>
|
4
5
|
# Copyright (c) 2015 Webhippie <http://www.webhippie.de>
|
@@ -23,33 +24,19 @@
|
|
23
24
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
24
25
|
#
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
Coveralls.wear!
|
33
|
-
CodeClimate::TestReporter.start
|
34
|
-
|
35
|
-
SimpleCov.start do
|
36
|
-
add_filter "/spec"
|
37
|
-
|
38
|
-
formatter SimpleCov::Formatter::MultiFormatter[
|
39
|
-
SimpleCov::Formatter::HTMLFormatter,
|
40
|
-
CodeClimate::TestReporter::Formatter
|
41
|
-
]
|
42
|
-
end
|
43
|
-
else
|
44
|
-
SimpleCov.start do
|
45
|
-
add_filter "/spec"
|
27
|
+
if ENV.key? "CODACY_PROJECT_TOKEN"
|
28
|
+
begin
|
29
|
+
require "codacy-coverage"
|
30
|
+
Codacy::Reporter.start
|
31
|
+
rescue StandardError
|
32
|
+
puts "Failed to load codacy-coverage gem"
|
46
33
|
end
|
47
34
|
end
|
48
35
|
|
49
36
|
require "gettext_i18n_rails_js"
|
50
37
|
require "rspec"
|
51
38
|
|
52
|
-
Dir[File.expand_path("
|
39
|
+
Dir[File.expand_path("support/**/*.rb", __dir__)].sort.each do |file|
|
53
40
|
require file
|
54
41
|
end
|
55
42
|
|
data/spec/support/with_file.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gettext_i18n_rails_js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Boerger
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2021-12-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -40,7 +40,7 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: rspec
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
@@ -54,7 +54,7 @@ dependencies:
|
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
57
|
+
name: yard
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
60
|
- - ">="
|
@@ -68,61 +68,61 @@ dependencies:
|
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
71
|
+
name: gettext
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
73
73
|
requirements:
|
74
74
|
- - ">="
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version: 3.2
|
76
|
+
version: 3.0.2
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - ">="
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version: 3.2
|
83
|
+
version: 3.0.2
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
85
|
+
name: gettext_i18n_rails
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
88
|
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.7.1
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 0.7.1
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
99
|
+
name: po_to_json
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
101
101
|
requirements:
|
102
102
|
- - ">="
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: 0.
|
104
|
+
version: 1.0.0
|
105
105
|
type: :runtime
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - ">="
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: 0.
|
111
|
+
version: 1.0.0
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
|
-
name:
|
113
|
+
name: rails
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - ">="
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version:
|
118
|
+
version: 3.2.0
|
119
119
|
type: :runtime
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - ">="
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version:
|
125
|
+
version: 3.2.0
|
126
126
|
description: |2
|
127
127
|
It will find translations inside your .js and .coffee files, then it will
|
128
128
|
create JSON versions of your .PO files and will let you serve them with the
|
@@ -152,6 +152,7 @@ files:
|
|
152
152
|
- spec/fixtures/example.coffee
|
153
153
|
- spec/fixtures/example.handlebars
|
154
154
|
- spec/fixtures/example.js
|
155
|
+
- spec/fixtures/example.vue
|
155
156
|
- spec/gettext_i18n_rails_js/parser/handlebars_spec.rb
|
156
157
|
- spec/gettext_i18n_rails_js/parser/javascript_spec.rb
|
157
158
|
- spec/gettext_i18n_rails_js_spec.rb
|
@@ -177,19 +178,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
177
178
|
- !ruby/object:Gem::Version
|
178
179
|
version: '0'
|
179
180
|
requirements: []
|
180
|
-
|
181
|
-
rubygems_version: 2.2.5
|
181
|
+
rubygems_version: 3.1.2
|
182
182
|
signing_key:
|
183
183
|
specification_version: 4
|
184
184
|
summary: Extends gettext_i18n_rails making your .po files available to client side
|
185
185
|
javascript as JSON
|
186
186
|
test_files:
|
187
|
-
- spec/fixtures/example.js
|
188
|
-
- spec/fixtures/example.handlebars
|
189
|
-
- spec/fixtures/example.coffee
|
190
187
|
- spec/support/with_file.rb
|
191
|
-
- spec/gettext_i18n_rails_js/parser/javascript_spec.rb
|
192
|
-
- spec/gettext_i18n_rails_js/parser/handlebars_spec.rb
|
193
188
|
- spec/gettext_i18n_rails_js_spec.rb
|
189
|
+
- spec/gettext_i18n_rails_js/parser/handlebars_spec.rb
|
190
|
+
- spec/gettext_i18n_rails_js/parser/javascript_spec.rb
|
194
191
|
- spec/spec_helper.rb
|
195
|
-
|
192
|
+
- spec/fixtures/example.js
|
193
|
+
- spec/fixtures/example.coffee
|
194
|
+
- spec/fixtures/example.vue
|
195
|
+
- spec/fixtures/example.handlebars
|