lokalise_rails 1.1.0 → 1.2.0
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 +4 -4
- data/CHANGELOG.md +6 -0
- data/README.md +9 -1
- data/lib/generators/templates/lokalise_rails_config.rb +12 -2
- data/lib/lokalise_rails.rb +16 -1
- data/lib/lokalise_rails/task_definition/exporter.rb +1 -3
- data/lib/lokalise_rails/task_definition/importer.rb +21 -3
- data/lib/lokalise_rails/version.rb +1 -1
- data/lokalise_rails.gemspec +2 -2
- data/spec/dummy/config/lokalise_rails.rb +0 -2
- data/spec/lib/lokalise_rails/task_definition/base_spec.rb +5 -5
- data/spec/lib/lokalise_rails/task_definition/exporter_spec.rb +3 -4
- data/spec/lib/lokalise_rails/task_definition/importer_spec.rb +11 -11
- data/spec/lib/lokalise_rails_spec.rb +18 -0
- data/spec/support/spec_addons.rb +6 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02b78ecae0b5dbf76599249606858c5b24e31fc9826f8795feb34abac9d5ffb4
|
4
|
+
data.tar.gz: b7bc51d45b689181ae0d3d5366f507ae0e43c878c4ab55979ba54d7089eb49f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 838ddae7af99842dbc4a7ce900c8b02a07571ff9c561e642e3bac6f92dbaabd9132f775b0ff1877ffd18fc20c1bf84ec3f7792139bad0c9fc97dec1d03389e64
|
7
|
+
data.tar.gz: 79c0314752c8e48b552eb78c564d24da0cd14fa41b1195909d8d06ca81913322fefa56a696f3c20d1c53c51aa16feb731c85f6fdd860242c98ad8b018b9c68ae
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -92,7 +92,6 @@ Options are specified in the `config/lokalise_rails.rb` file.
|
|
92
92
|
* `api_token` (`string`, required) - Lokalise API token with read/write permissions.
|
93
93
|
* `project_id` (`string`, required) - Lokalise project ID. You must have import/export permissions in the specified project.
|
94
94
|
* `locales_path` (`string`) - path to the directory with your translation files. Defaults to `"#{Rails.root}/config/locales"`.
|
95
|
-
* `file_ext_regexp` (`regexp`) - regular expression applied to file extensions to determine which files should be imported and exported. Defaults to `/\.ya?ml\z/i` (YAML files).
|
96
95
|
* `branch` (`string`) - Lokalise project branch to use. Defaults to `"master"`.
|
97
96
|
* `timeouts` (`hash`) - set [request timeouts for the Lokalise API client](https://lokalise.github.io/ruby-lokalise-api/additional_info/customization#setting-timeouts). By default, requests have no timeouts: `{open_timeout: nil, timeout: nil}`. Both values are in seconds.
|
98
97
|
|
@@ -134,6 +133,15 @@ en_US:
|
|
134
133
|
c.skip_file_export = ->(file) { f.split[1].to_s.include?('fr') }
|
135
134
|
```
|
136
135
|
|
136
|
+
### Settings to work with formats other than YAML
|
137
|
+
|
138
|
+
If your translation files are not in YAML format, you will need to adjust the following options:
|
139
|
+
|
140
|
+
* `file_ext_regexp` (`regexp`) - regular expression applied to file extensions to determine which files should be imported and exported. Defaults to `/\.ya?ml\z/i` (YAML files).
|
141
|
+
* `translations_loader` (`lambda` or `proc`) - loads translations data and makes sure they are valid before saving them to a translation file. Defaults to `->(raw_data) { YAML.safe_load raw_data }`. In the simplest case you may just return the data back, for example `-> (raw_data) { raw_data }`.
|
142
|
+
* `translations_converter` (`lambda` or `proc`) - converts translations data to a proper format before saving them to a translation file. Defaults to `->(raw_data) { raw_data.to_yaml }`. In the simplest case you may just return the data back, for example `-> (raw_data) { raw_data }`.
|
143
|
+
* `lang_iso_inferer` (`lambda` or `proc`) - infers language ISO code based on the translation file data before uploading it to Lokalise. Defaults to `->(data) { YAML.safe_load(data)&.keys&.first }`.
|
144
|
+
|
137
145
|
## Running tests
|
138
146
|
|
139
147
|
1. Copypaste `.env.example` file as `.env`. Put your Lokalise API token and project ID inside. The `.env` file is excluded from version control so your data is safe. All in all, we use pre-recorded VCR cassettes, so the actual API requests won’t be sent. However, providing at least some values is required.
|
@@ -35,6 +35,16 @@ LokaliseRails.config do |c|
|
|
35
35
|
# Provide additional file exclusion criteria for exports (by default, any file with the proper extension will be exported)
|
36
36
|
# c.skip_file_export = ->(file) { file.split[1].to_s.include?('fr') }
|
37
37
|
|
38
|
-
#
|
39
|
-
|
38
|
+
# Set the options below if you would like to work with format other than YAML
|
39
|
+
## Regular expression to use when choosing the files to extract from the downloaded archive and upload to Lokalise
|
40
|
+
## c.file_ext_regexp = /\.ya?ml\z/i
|
41
|
+
|
42
|
+
## Load translations data and make sure they are valid:
|
43
|
+
## c.translations_loader = ->(raw_data) { YAML.safe_load raw_data }
|
44
|
+
|
45
|
+
## Convert translations data to a proper format:
|
46
|
+
## c.translations_converter = ->(raw_data) { raw_data.to_yaml }
|
47
|
+
|
48
|
+
## Infer language ISO code for the translation file:
|
49
|
+
## c.lang_iso_inferer = ->(data) { YAML.safe_load(data)&.keys&.first }
|
40
50
|
end
|
data/lib/lokalise_rails.rb
CHANGED
@@ -8,7 +8,8 @@ module LokaliseRails
|
|
8
8
|
class << self
|
9
9
|
attr_accessor :api_token, :project_id
|
10
10
|
attr_writer :import_opts, :import_safe_mode, :export_opts, :locales_path,
|
11
|
-
:file_ext_regexp, :skip_file_export, :branch, :timeouts
|
11
|
+
:file_ext_regexp, :skip_file_export, :branch, :timeouts,
|
12
|
+
:translations_loader, :translations_converter, :lang_iso_inferer
|
12
13
|
|
13
14
|
# Main interface to provide configuration options for rake tasks
|
14
15
|
def config
|
@@ -61,6 +62,20 @@ module LokaliseRails
|
|
61
62
|
def skip_file_export
|
62
63
|
@skip_file_export || ->(_) { false }
|
63
64
|
end
|
65
|
+
|
66
|
+
def translations_loader
|
67
|
+
@translations_loader || ->(raw_data) { YAML.safe_load raw_data }
|
68
|
+
end
|
69
|
+
|
70
|
+
# Converts translations data to the proper format
|
71
|
+
def translations_converter
|
72
|
+
@translations_converter || ->(raw_data) { raw_data.to_yaml }
|
73
|
+
end
|
74
|
+
|
75
|
+
# Infers lang ISO for the given translation file
|
76
|
+
def lang_iso_inferer
|
77
|
+
@lang_iso_inferer || ->(data) { YAML.safe_load(data)&.keys&.first }
|
78
|
+
end
|
64
79
|
end
|
65
80
|
end
|
66
81
|
|
@@ -55,12 +55,10 @@ module LokaliseRails
|
|
55
55
|
def opts(full_p, relative_p)
|
56
56
|
content = File.read full_p
|
57
57
|
|
58
|
-
lang_iso = YAML.safe_load(content)&.keys&.first
|
59
|
-
|
60
58
|
initial_opts = {
|
61
59
|
data: Base64.strict_encode64(content.strip),
|
62
60
|
filename: relative_p,
|
63
|
-
lang_iso:
|
61
|
+
lang_iso: LokaliseRails.lang_iso_inferer.call(content)
|
64
62
|
}
|
65
63
|
|
66
64
|
initial_opts.merge LokaliseRails.export_opts
|
@@ -46,7 +46,7 @@ module LokaliseRails
|
|
46
46
|
#
|
47
47
|
# @param path [String]
|
48
48
|
def open_and_process_zip(path)
|
49
|
-
Zip::File.open_buffer(
|
49
|
+
Zip::File.open_buffer(open_file_or_remote(path)) do |zip|
|
50
50
|
fetch_zip_entries(zip) { |entry| process!(entry) }
|
51
51
|
end
|
52
52
|
end
|
@@ -64,13 +64,13 @@ module LokaliseRails
|
|
64
64
|
|
65
65
|
# Processes ZIP entry by reading its contents and creating the corresponding translation file
|
66
66
|
def process!(zip_entry)
|
67
|
-
data =
|
67
|
+
data = data_from zip_entry
|
68
68
|
subdir, filename = subdir_and_filename_for zip_entry.name
|
69
69
|
full_path = "#{LokaliseRails.locales_path}/#{subdir}"
|
70
70
|
FileUtils.mkdir_p full_path
|
71
71
|
|
72
72
|
File.open(File.join(full_path, filename), 'w+:UTF-8') do |f|
|
73
|
-
f.write data
|
73
|
+
f.write LokaliseRails.translations_converter.call(data)
|
74
74
|
end
|
75
75
|
rescue StandardError => e
|
76
76
|
$stdout.puts "Error when trying to process #{zip_entry&.name}: #{e.inspect}"
|
@@ -87,6 +87,24 @@ module LokaliseRails
|
|
87
87
|
answer = $stdin.gets
|
88
88
|
answer.to_s.strip == 'Y'
|
89
89
|
end
|
90
|
+
|
91
|
+
# Opens a local file or a remote URL using the provided patf
|
92
|
+
#
|
93
|
+
# @return [String]
|
94
|
+
def open_file_or_remote(path)
|
95
|
+
parsed_path = URI.parse(path)
|
96
|
+
if parsed_path&.scheme&.include?('http')
|
97
|
+
parsed_path.open
|
98
|
+
else
|
99
|
+
File.open path
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def data_from(zip_entry)
|
106
|
+
LokaliseRails.translations_loader.call zip_entry.get_input_stream.read
|
107
|
+
end
|
90
108
|
end
|
91
109
|
end
|
92
110
|
end
|
data/lokalise_rails.gemspec
CHANGED
@@ -35,9 +35,9 @@ Gem::Specification.new do |spec|
|
|
35
35
|
end
|
36
36
|
spec.add_development_dependency 'rake', '~> 13.0'
|
37
37
|
spec.add_development_dependency 'rspec', '~> 3.6'
|
38
|
-
spec.add_development_dependency 'rubocop', '~> 0
|
38
|
+
spec.add_development_dependency 'rubocop', '~> 1.0'
|
39
39
|
spec.add_development_dependency 'rubocop-performance', '~> 1.5'
|
40
|
-
spec.add_development_dependency 'rubocop-rspec', '~>
|
40
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.0.0'
|
41
41
|
spec.add_development_dependency 'simplecov', '~> 0.16'
|
42
42
|
spec.add_development_dependency 'vcr', '~> 6.0'
|
43
43
|
end
|
@@ -45,12 +45,12 @@ describe LokaliseRails::TaskDefinition::Base do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'returns an error when the project_id is not set' do
|
48
|
-
|
49
|
-
|
48
|
+
allow_project_id nil do
|
49
|
+
errors = described_class.opt_errors
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
51
|
+
expect(errors.length).to eq(1)
|
52
|
+
expect(errors.first).to include('Project ID is not set')
|
53
|
+
end
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -49,10 +49,9 @@ describe LokaliseRails::TaskDefinition::Exporter do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'halts when the project_id is not set' do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
expect(LokaliseRails).to have_received(:project_id)
|
52
|
+
allow_project_id nil do
|
53
|
+
expect(-> { described_class.export! }).to output(/Project ID is not set/).to_stdout
|
54
|
+
end
|
56
55
|
end
|
57
56
|
end
|
58
57
|
|
@@ -12,14 +12,14 @@ describe LokaliseRails::TaskDefinition::Importer do
|
|
12
12
|
|
13
13
|
describe '.download_files' do
|
14
14
|
it 'returns a proper download URL' do
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
allow_project_id '189934715f57a162257d74.88352370' do
|
16
|
+
response = VCR.use_cassette('download_files') do
|
17
|
+
described_class.download_files
|
18
|
+
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
expect(response['project_id']).to eq('189934715f57a162257d74.88352370')
|
21
|
+
expect(response['bundle_url']).to include('s3-eu-west-1.amazonaws.com')
|
22
|
+
end
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'rescues from errors during file download' do
|
@@ -40,10 +40,10 @@ describe LokaliseRails::TaskDefinition::Importer do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it 'halts when the project_id is not set' do
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
allow_project_id nil do
|
44
|
+
expect(-> { described_class.import! }).to output(/Project ID is not set/).to_stdout
|
45
|
+
expect(count_translations).to eq(0)
|
46
|
+
end
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -73,5 +73,23 @@ describe LokaliseRails do
|
|
73
73
|
allow(fake_class).to receive(:skip_file_export=).with(cond)
|
74
74
|
fake_class.skip_file_export = cond
|
75
75
|
end
|
76
|
+
|
77
|
+
it 'is possible to set translations_loader' do
|
78
|
+
runner = ->(f) { f.to_json }
|
79
|
+
allow(fake_class).to receive(:translations_loader=).with(runner)
|
80
|
+
fake_class.translations_loader = runner
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'is possible to set translations_converter' do
|
84
|
+
runner = ->(f) { f.to_json }
|
85
|
+
allow(fake_class).to receive(:translations_converter=).with(runner)
|
86
|
+
fake_class.translations_converter = runner
|
87
|
+
end
|
88
|
+
|
89
|
+
it 'is possible to set lang_iso_inferer' do
|
90
|
+
runner = ->(f) { f.to_json }
|
91
|
+
allow(fake_class).to receive(:lang_iso_inferer=).with(runner)
|
92
|
+
fake_class.lang_iso_inferer = runner
|
93
|
+
end
|
76
94
|
end
|
77
95
|
end
|
data/spec/support/spec_addons.rb
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module SpecAddons
|
4
|
-
def allow_project_id(value = '
|
5
|
-
allow(LokaliseRails).to receive(:project_id).
|
6
|
-
|
4
|
+
def allow_project_id(value = ENV['LOKALISE_PROJECT_ID'])
|
5
|
+
allow(LokaliseRails).to receive(:project_id).and_return(value)
|
6
|
+
return unless block_given?
|
7
|
+
|
8
|
+
yield
|
9
|
+
expect(LokaliseRails).to have_received(:project_id)
|
7
10
|
end
|
8
11
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lokalise_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ilya Bodrov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-11-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-lokalise-api
|
@@ -114,14 +114,14 @@ dependencies:
|
|
114
114
|
requirements:
|
115
115
|
- - "~>"
|
116
116
|
- !ruby/object:Gem::Version
|
117
|
-
version: '0
|
117
|
+
version: '1.0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
122
|
- - "~>"
|
123
123
|
- !ruby/object:Gem::Version
|
124
|
-
version: '0
|
124
|
+
version: '1.0'
|
125
125
|
- !ruby/object:Gem::Dependency
|
126
126
|
name: rubocop-performance
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,14 +142,14 @@ dependencies:
|
|
142
142
|
requirements:
|
143
143
|
- - "~>"
|
144
144
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
145
|
+
version: 2.0.0
|
146
146
|
type: :development
|
147
147
|
prerelease: false
|
148
148
|
version_requirements: !ruby/object:Gem::Requirement
|
149
149
|
requirements:
|
150
150
|
- - "~>"
|
151
151
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
152
|
+
version: 2.0.0
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
154
|
name: simplecov
|
155
155
|
requirement: !ruby/object:Gem::Requirement
|
@@ -243,7 +243,7 @@ homepage: https://github.com/bodrovis/lokalise_rails
|
|
243
243
|
licenses:
|
244
244
|
- MIT
|
245
245
|
metadata: {}
|
246
|
-
post_install_message:
|
246
|
+
post_install_message:
|
247
247
|
rdoc_options: []
|
248
248
|
require_paths:
|
249
249
|
- lib
|
@@ -259,7 +259,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
259
259
|
version: '0'
|
260
260
|
requirements: []
|
261
261
|
rubygems_version: 3.1.4
|
262
|
-
signing_key:
|
262
|
+
signing_key:
|
263
263
|
specification_version: 4
|
264
264
|
summary: Lokalise integration for Ruby on Rails
|
265
265
|
test_files:
|