localio 0.1.7 → 0.2.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.
Files changed (54) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ci.yml +28 -0
  3. data/.gitignore +4 -1
  4. data/.rspec +3 -0
  5. data/.ruby-version +1 -0
  6. data/Gemfile.lock +134 -0
  7. data/README.md +36 -34
  8. data/bin/localize +10 -7
  9. data/docs/plans/2026-02-23-modernization-design.md +91 -0
  10. data/docs/plans/2026-02-23-modernization.md +1699 -0
  11. data/docs/plans/2026-02-23-twine-writer-design.md +72 -0
  12. data/docs/plans/2026-02-23-twine-writer.md +267 -0
  13. data/lib/localio/localizable_writer.rb +4 -1
  14. data/lib/localio/processors/csv_processor.rb +1 -1
  15. data/lib/localio/processors/google_drive_processor.rb +19 -45
  16. data/lib/localio/processors/xlsx_processor.rb +1 -1
  17. data/lib/localio/template_handler.rb +3 -1
  18. data/lib/localio/templates/android_localizable.erb +14 -2
  19. data/lib/localio/templates/ios_constant_localizable.erb +16 -2
  20. data/lib/localio/templates/ios_localizable.erb +20 -5
  21. data/lib/localio/templates/java_properties_localizable.erb +16 -2
  22. data/lib/localio/templates/json_localizable.erb +6 -5
  23. data/lib/localio/templates/rails_localizable.erb +15 -3
  24. data/lib/localio/templates/resx_localizable.erb +14 -2
  25. data/lib/localio/templates/swift_constant_localizable.erb +15 -2
  26. data/lib/localio/version.rb +1 -1
  27. data/lib/localio/writers/ios_writer.rb +3 -3
  28. data/lib/localio/writers/swift_writer.rb +3 -3
  29. data/lib/localio/writers/twine_writer.rb +48 -0
  30. data/localio.gemspec +19 -25
  31. data/spec/fixtures/sample.csv +11 -0
  32. data/spec/localio/filter_spec.rb +40 -0
  33. data/spec/localio/formatter_spec.rb +32 -0
  34. data/spec/localio/processors/csv_processor_spec.rb +89 -0
  35. data/spec/localio/processors/google_drive_processor_spec.rb +107 -0
  36. data/spec/localio/processors/xls_processor_spec.rb +65 -0
  37. data/spec/localio/processors/xlsx_processor_spec.rb +59 -0
  38. data/spec/localio/segment_spec.rb +27 -0
  39. data/spec/localio/segments_list_holder_spec.rb +22 -0
  40. data/spec/localio/string_helper_spec.rb +49 -0
  41. data/spec/localio/template_handler_spec.rb +67 -0
  42. data/spec/localio/term_spec.rb +24 -0
  43. data/spec/localio/writers/android_writer_spec.rb +71 -0
  44. data/spec/localio/writers/ios_writer_spec.rb +63 -0
  45. data/spec/localio/writers/java_properties_writer_spec.rb +35 -0
  46. data/spec/localio/writers/json_writer_spec.rb +57 -0
  47. data/spec/localio/writers/rails_writer_spec.rb +47 -0
  48. data/spec/localio/writers/resx_writer_spec.rb +44 -0
  49. data/spec/localio/writers/swift_writer_spec.rb +42 -0
  50. data/spec/localio/writers/twine_writer_spec.rb +68 -0
  51. data/spec/localio_spec.rb +62 -0
  52. data/spec/spec_helper.rb +24 -0
  53. data/spec/support/shared_terms.rb +35 -0
  54. metadata +61 -46
@@ -0,0 +1,35 @@
1
+ require 'localio/term'
2
+
3
+ RSpec.shared_context 'standard terms' do
4
+ let(:languages) { { 'en' => 1, 'es' => 2, 'fr' => 3 } }
5
+ let(:default_language) { 'en' }
6
+ let(:terms) do
7
+ [
8
+ Term.new('[comment]').tap do |t|
9
+ t.values['en'] = 'Section General'
10
+ t.values['es'] = 'Section General'
11
+ t.values['fr'] = 'Section General'
12
+ end,
13
+ Term.new('app_name').tap do |t|
14
+ t.values['en'] = 'My App'
15
+ t.values['es'] = 'Mi Aplicación'
16
+ t.values['fr'] = 'Mon Application'
17
+ end,
18
+ Term.new('greeting').tap do |t|
19
+ t.values['en'] = 'Hello %@ world'
20
+ t.values['es'] = 'Hola %@ mundo'
21
+ t.values['fr'] = 'Bonjour %@ monde'
22
+ end,
23
+ Term.new('dots_test').tap do |t|
24
+ t.values['en'] = 'Wait...'
25
+ t.values['es'] = 'Espera...'
26
+ t.values['fr'] = 'Attendez...'
27
+ end,
28
+ Term.new('ampersand_test').tap do |t|
29
+ t.values['en'] = 'Tom & Jerry'
30
+ t.values['es'] = 'Tom & Jerry'
31
+ t.values['fr'] = 'Tom & Jerry'
32
+ end,
33
+ ]
34
+ end
35
+ end
metadata CHANGED
@@ -1,129 +1,114 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: localio
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nacho Lopez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-27 00:00:00.000000000 Z
11
+ date: 2026-02-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: bundler
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - "~>"
32
18
  - !ruby/object:Gem::Version
33
- version: '1.3'
19
+ version: '3.0'
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - "~>"
39
25
  - !ruby/object:Gem::Version
40
- version: '1.3'
26
+ version: '3.0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
- - - ">="
31
+ - - "~>"
46
32
  - !ruby/object:Gem::Version
47
- version: '0'
33
+ version: '13.0'
48
34
  type: :development
49
35
  prerelease: false
50
36
  version_requirements: !ruby/object:Gem::Requirement
51
37
  requirements:
52
- - - ">="
38
+ - - "~>"
53
39
  - !ruby/object:Gem::Version
54
- version: '0'
40
+ version: '13.0'
55
41
  - !ruby/object:Gem::Dependency
56
- name: micro-optparse
42
+ name: google_drive
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
45
  - - "~>"
60
46
  - !ruby/object:Gem::Version
61
- version: '1.2'
47
+ version: '3.0'
62
48
  type: :runtime
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
52
  - - "~>"
67
53
  - !ruby/object:Gem::Version
68
- version: '1.2'
54
+ version: '3.0'
69
55
  - !ruby/object:Gem::Dependency
70
- name: google_drive
56
+ name: spreadsheet
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - "~>"
74
60
  - !ruby/object:Gem::Version
75
- version: '1.0'
61
+ version: '1.3'
76
62
  type: :runtime
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
66
  - - "~>"
81
67
  - !ruby/object:Gem::Version
82
- version: '1.0'
68
+ version: '1.3'
83
69
  - !ruby/object:Gem::Dependency
84
- name: spreadsheet
70
+ name: simple_xlsx_reader
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - "~>"
88
74
  - !ruby/object:Gem::Version
89
- version: '1.0'
75
+ version: '2.0'
90
76
  type: :runtime
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
80
  - - "~>"
95
81
  - !ruby/object:Gem::Version
96
- version: '1.0'
82
+ version: '2.0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: simple_xlsx_reader
84
+ name: nokogiri
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - "~>"
102
88
  - !ruby/object:Gem::Version
103
- version: '1.0'
89
+ version: '1.16'
104
90
  type: :runtime
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
94
  - - "~>"
109
95
  - !ruby/object:Gem::Version
110
- version: '1.0'
96
+ version: '1.16'
111
97
  - !ruby/object:Gem::Dependency
112
- name: nokogiri
98
+ name: csv
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '1.6'
103
+ version: '3.2'
118
104
  type: :runtime
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '1.6'
125
- description: Automatic Localizable file generation for multiple platforms (Rails YAML,
126
- Android, Java Properties, iOS, JSON, .NET ResX)
110
+ version: '3.2'
111
+ description: Automatic Localizable file generation for multiple platforms
127
112
  email:
128
113
  - nacho@nlopez.io
129
114
  executables:
@@ -131,13 +116,21 @@ executables:
131
116
  extensions: []
132
117
  extra_rdoc_files: []
133
118
  files:
119
+ - ".github/workflows/ci.yml"
134
120
  - ".gitignore"
121
+ - ".rspec"
122
+ - ".ruby-version"
135
123
  - CONTRIBUTING.md
136
124
  - Gemfile
125
+ - Gemfile.lock
137
126
  - LICENSE.txt
138
127
  - README.md
139
128
  - Rakefile
140
129
  - bin/localize
130
+ - docs/plans/2026-02-23-modernization-design.md
131
+ - docs/plans/2026-02-23-modernization.md
132
+ - docs/plans/2026-02-23-twine-writer-design.md
133
+ - docs/plans/2026-02-23-twine-writer.md
141
134
  - lib/localio.rb
142
135
  - lib/localio/config_store.rb
143
136
  - lib/localio/filter.rb
@@ -171,8 +164,32 @@ files:
171
164
  - lib/localio/writers/rails_writer.rb
172
165
  - lib/localio/writers/resx_writer.rb
173
166
  - lib/localio/writers/swift_writer.rb
167
+ - lib/localio/writers/twine_writer.rb
174
168
  - localio.gemspec
175
- homepage: http://github.com/mrmans0n/localio
169
+ - spec/fixtures/sample.csv
170
+ - spec/localio/filter_spec.rb
171
+ - spec/localio/formatter_spec.rb
172
+ - spec/localio/processors/csv_processor_spec.rb
173
+ - spec/localio/processors/google_drive_processor_spec.rb
174
+ - spec/localio/processors/xls_processor_spec.rb
175
+ - spec/localio/processors/xlsx_processor_spec.rb
176
+ - spec/localio/segment_spec.rb
177
+ - spec/localio/segments_list_holder_spec.rb
178
+ - spec/localio/string_helper_spec.rb
179
+ - spec/localio/template_handler_spec.rb
180
+ - spec/localio/term_spec.rb
181
+ - spec/localio/writers/android_writer_spec.rb
182
+ - spec/localio/writers/ios_writer_spec.rb
183
+ - spec/localio/writers/java_properties_writer_spec.rb
184
+ - spec/localio/writers/json_writer_spec.rb
185
+ - spec/localio/writers/rails_writer_spec.rb
186
+ - spec/localio/writers/resx_writer_spec.rb
187
+ - spec/localio/writers/swift_writer_spec.rb
188
+ - spec/localio/writers/twine_writer_spec.rb
189
+ - spec/localio_spec.rb
190
+ - spec/spec_helper.rb
191
+ - spec/support/shared_terms.rb
192
+ homepage: https://github.com/mrmans0n/localio
176
193
  licenses:
177
194
  - MIT
178
195
  metadata: {}
@@ -184,18 +201,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
184
201
  requirements:
185
202
  - - ">="
186
203
  - !ruby/object:Gem::Version
187
- version: 1.9.2
204
+ version: '3.2'
188
205
  required_rubygems_version: !ruby/object:Gem::Requirement
189
206
  requirements:
190
207
  - - ">="
191
208
  - !ruby/object:Gem::Version
192
209
  version: '0'
193
210
  requirements: []
194
- rubyforge_project:
195
- rubygems_version: 2.4.8
211
+ rubygems_version: 3.0.3.1
196
212
  signing_key:
197
213
  specification_version: 4
198
- summary: Automatic Localizable file generation for multiple type of files, like Android
199
- string.xml, Xcode Localizable.strings, JSON files, Rails YAML files, Java properties,
200
- etc. reading from Google Drive and Excel spreadsheets as base.
214
+ summary: Generates Android, iOS, Rails, JSON, Java Properties, and .NET ResX localization
215
+ files from spreadsheet sources.
201
216
  test_files: []