tolgee_liquid 0.1.8 → 0.1.9
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/.rubocop.yml +7 -0
- data/.ruby-version +1 -0
- data/.travis.yml +1 -0
- data/Gemfile +4 -2
- data/Gemfile.lock +28 -1
- data/README.md +5 -3
- data/Rakefile +5 -3
- data/bin/console +4 -3
- data/bin/deploy +1 -1
- data/lib/tolgee_liquid/translate.rb +14 -5
- data/lib/tolgee_liquid/version.rb +3 -1
- data/lib/tolgee_liquid/zero_width_character_encoder.rb +4 -0
- data/lib/tolgee_liquid.rb +17 -9
- data/tolgee_liquid.gemspec +20 -15
- metadata +32 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dca99fd61c6ef48a8ed0e9859d8bf699018694413886d2fcca125715ae469487
|
|
4
|
+
data.tar.gz: 6a87046ae897d9c133ff9b8f5898f0d10d0008faf7f5fb6ce1e92bac957226c0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 73eea62ed05227aa481dc869095f1beaad7ee32aa7f9079e15aebcfa4549e69a8ee7644692b089afd27f978d94047fbb248cab3f0ab3de0fb0e495a241c2a9b0
|
|
7
|
+
data.tar.gz: 03b837fa231f52f88fd2eeae62f1b059fb27684a20dd5ce21f23a6f844b31643fb14d38ab7ab5d5e98cd7a5adffe2e981f2434a25ab0f89c1456eeb8d11e0110
|
data/.rubocop.yml
ADDED
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.6.10
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
source 'https://rubygems.org'
|
|
4
|
+
|
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
|
4
6
|
|
|
5
7
|
# Specify your gem's dependencies in tolgee_liquid.gemspec
|
|
6
8
|
gemspec
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
tolgee_liquid (0.1.
|
|
4
|
+
tolgee_liquid (0.1.9)
|
|
5
5
|
message_format (~> 0.0.8)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -9,6 +9,7 @@ GEM
|
|
|
9
9
|
specs:
|
|
10
10
|
addressable (2.8.6)
|
|
11
11
|
public_suffix (>= 2.0.2, < 6.0)
|
|
12
|
+
ast (2.4.2)
|
|
12
13
|
bigdecimal (3.1.8)
|
|
13
14
|
camertron-eprun (1.1.1)
|
|
14
15
|
cldr-plurals-runtime-rb (1.1.0)
|
|
@@ -18,10 +19,20 @@ GEM
|
|
|
18
19
|
rexml
|
|
19
20
|
diff-lcs (1.5.1)
|
|
20
21
|
hashdiff (1.1.0)
|
|
22
|
+
i18n (1.14.5)
|
|
23
|
+
concurrent-ruby (~> 1.0)
|
|
24
|
+
json (2.7.2)
|
|
21
25
|
message_format (0.0.8)
|
|
22
26
|
twitter_cldr (~> 6.0)
|
|
27
|
+
parallel (1.24.0)
|
|
28
|
+
parser (3.3.2.0)
|
|
29
|
+
ast (~> 2.4.1)
|
|
30
|
+
racc
|
|
23
31
|
public_suffix (5.0.5)
|
|
32
|
+
racc (1.8.0)
|
|
33
|
+
rainbow (3.1.1)
|
|
24
34
|
rake (10.5.0)
|
|
35
|
+
regexp_parser (2.9.2)
|
|
25
36
|
rexml (3.2.8)
|
|
26
37
|
strscan (>= 3.0.9)
|
|
27
38
|
rspec (3.13.0)
|
|
@@ -37,6 +48,19 @@ GEM
|
|
|
37
48
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
38
49
|
rspec-support (~> 3.13.0)
|
|
39
50
|
rspec-support (3.13.1)
|
|
51
|
+
rubocop (1.50.2)
|
|
52
|
+
json (~> 2.3)
|
|
53
|
+
parallel (~> 1.10)
|
|
54
|
+
parser (>= 3.2.0.0)
|
|
55
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
56
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
57
|
+
rexml (>= 3.2.5, < 4.0)
|
|
58
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
|
59
|
+
ruby-progressbar (~> 1.7)
|
|
60
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
|
61
|
+
rubocop-ast (1.30.0)
|
|
62
|
+
parser (>= 3.2.1.0)
|
|
63
|
+
ruby-progressbar (1.13.0)
|
|
40
64
|
strscan (3.1.0)
|
|
41
65
|
twitter_cldr (6.12.1)
|
|
42
66
|
camertron-eprun
|
|
@@ -44,6 +68,7 @@ GEM
|
|
|
44
68
|
tzinfo
|
|
45
69
|
tzinfo (2.0.6)
|
|
46
70
|
concurrent-ruby (~> 1.0)
|
|
71
|
+
unicode-display_width (2.5.0)
|
|
47
72
|
webmock (3.23.1)
|
|
48
73
|
addressable (>= 2.8.0)
|
|
49
74
|
crack (>= 0.3.2)
|
|
@@ -54,8 +79,10 @@ PLATFORMS
|
|
|
54
79
|
|
|
55
80
|
DEPENDENCIES
|
|
56
81
|
bundler (~> 1.17)
|
|
82
|
+
i18n (~> 1.14)
|
|
57
83
|
rake (~> 10.0)
|
|
58
84
|
rspec (~> 3.0)
|
|
85
|
+
rubocop (~> 1.50)
|
|
59
86
|
tolgee_liquid!
|
|
60
87
|
webmock (~> 3.23)
|
|
61
88
|
|
data/README.md
CHANGED
|
@@ -107,9 +107,11 @@ key:
|
|
|
107
107
|
|
|
108
108
|
## Development
|
|
109
109
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
110
|
+
- Run `install dependencies` to install dependencies.
|
|
111
|
+
- Run `rake spec` to run the tests.
|
|
112
|
+
- Run `bin/console` for an interactive prompt that will allow you to experiment.
|
|
113
|
+
- Run `rubocop` to find code smells.
|
|
114
|
+
- Run `bin/deploy` to release a new version
|
|
113
115
|
|
|
114
116
|
## Contributing
|
|
115
117
|
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
# frozen_string_literal: true
|
|
2
3
|
|
|
3
|
-
require
|
|
4
|
-
require
|
|
4
|
+
require 'bundler/setup'
|
|
5
|
+
require 'tolgee_liquid'
|
|
5
6
|
|
|
6
7
|
# You can add fixtures and/or initialization code here to make experimenting
|
|
7
8
|
# with your gem easier. You can also use a different console, if you like.
|
|
@@ -10,5 +11,5 @@ require "tolgee_liquid"
|
|
|
10
11
|
# require "pry"
|
|
11
12
|
# Pry.start
|
|
12
13
|
|
|
13
|
-
require
|
|
14
|
+
require 'irb'
|
|
14
15
|
IRB.start(__FILE__)
|
data/bin/deploy
CHANGED
|
@@ -49,7 +49,7 @@ case "$version_bump" in
|
|
|
49
49
|
esac
|
|
50
50
|
|
|
51
51
|
echo "Bumping version from $current_version to $new_version"
|
|
52
|
-
|
|
52
|
+
ruby -i -pe "gsub(/VERSION = '$current_version'/, \"VERSION = '$new_version'\")" lib/tolgee_liquid/version.rb
|
|
53
53
|
|
|
54
54
|
# Create commit and tag for new version
|
|
55
55
|
git add lib/tolgee_liquid/version.rb
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'net/http'
|
|
2
4
|
require 'message_format'
|
|
3
5
|
|
|
6
|
+
# A translator will try to get the translations, handle interpolations and convert it to static string.
|
|
7
|
+
# If it's in development mode it will fetch translations from tolgee's platform.
|
|
8
|
+
# Otherwise, it will use static translations provided by outside.
|
|
4
9
|
class Translate
|
|
5
10
|
def initialize
|
|
6
11
|
@tolgee_api_url = TolgeeLiquid.configuration.api_url
|
|
@@ -8,11 +13,12 @@ class Translate
|
|
|
8
13
|
@tolgee_project_id = TolgeeLiquid.configuration.project_id
|
|
9
14
|
end
|
|
10
15
|
|
|
11
|
-
|
|
16
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
17
|
+
def execute(name, vars, opts)
|
|
12
18
|
locale = opts[:locale]
|
|
13
19
|
dev_mode = opts[:mode] == 'development'
|
|
14
20
|
static_data = opts[:static_data]
|
|
15
|
-
dict = dev_mode ?
|
|
21
|
+
dict = dev_mode ? remote_dict(locale.to_s) : static_data[locale.to_sym]
|
|
16
22
|
value = fetch_translation(dict, name)
|
|
17
23
|
return name if value.nil?
|
|
18
24
|
|
|
@@ -26,16 +32,18 @@ class Translate
|
|
|
26
32
|
translation
|
|
27
33
|
end
|
|
28
34
|
end
|
|
35
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
29
36
|
|
|
30
37
|
def fetch_translation(dict, name)
|
|
31
|
-
name.split('.'
|
|
38
|
+
name.split('.').reduce(dict) do |level, cur|
|
|
32
39
|
return nil if level[cur].nil?
|
|
33
40
|
|
|
34
41
|
level[cur]
|
|
35
42
|
end
|
|
36
43
|
end
|
|
37
44
|
|
|
38
|
-
|
|
45
|
+
# rubocop:disable Metrics/MethodLength
|
|
46
|
+
def remote_dict(locale)
|
|
39
47
|
@remote_dict ||= begin
|
|
40
48
|
url = URI("#{@tolgee_api_url}/v2/projects/#{@tolgee_project_id}/translations/#{locale}")
|
|
41
49
|
http = Net::HTTP.new(url.host, url.port)
|
|
@@ -47,8 +55,9 @@ class Translate
|
|
|
47
55
|
|
|
48
56
|
response = http.request(request)
|
|
49
57
|
JSON.parse(response.body)[locale]
|
|
50
|
-
rescue
|
|
58
|
+
rescue StandardError
|
|
51
59
|
{}
|
|
52
60
|
end
|
|
53
61
|
end
|
|
62
|
+
# rubocop:enable Metrics/MethodLength
|
|
54
63
|
end
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# An string encoder that will transform original message to invisible ASCII characters.
|
|
4
|
+
# See the detail in: https://tolgee.io/blog/2021/12/17/invisible-characters-for-better-localization
|
|
1
5
|
class ZeroWidthCharacterEncoder
|
|
2
6
|
INVISIBLE_CHARACTERS = ["\u200C", "\u200D"].freeze
|
|
3
7
|
|
data/lib/tolgee_liquid.rb
CHANGED
|
@@ -1,14 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
require "tolgee_liquid/translate"
|
|
3
|
-
require "tolgee_liquid/zero_width_character_encoder"
|
|
1
|
+
# frozen_string_literal: true
|
|
4
2
|
|
|
3
|
+
require 'tolgee_liquid/version'
|
|
4
|
+
require 'tolgee_liquid/translate'
|
|
5
|
+
require 'tolgee_liquid/zero_width_character_encoder'
|
|
6
|
+
|
|
7
|
+
# This allow user to configure Tolgee credentials
|
|
5
8
|
module TolgeeLiquid
|
|
6
9
|
class << self
|
|
7
10
|
attr_accessor :configuration
|
|
8
11
|
|
|
12
|
+
# rubocop:disable Style/Documentation
|
|
9
13
|
class Configuration
|
|
10
14
|
attr_accessor :api_url, :api_key, :project_id
|
|
11
15
|
end
|
|
16
|
+
# rubocop:enable Style/Documentation
|
|
12
17
|
|
|
13
18
|
def configure
|
|
14
19
|
self.configuration ||= Configuration.new
|
|
@@ -21,6 +26,7 @@ module TolgeeLiquid
|
|
|
21
26
|
end
|
|
22
27
|
end
|
|
23
28
|
|
|
29
|
+
# rubocop:disable Metrics/MethodLength, Metrics/AbcSize
|
|
24
30
|
def with_tolgee(method_name)
|
|
25
31
|
original_method = instance_method(method_name)
|
|
26
32
|
define_method(method_name) do |*args, &fn|
|
|
@@ -28,28 +34,30 @@ def with_tolgee(method_name)
|
|
|
28
34
|
locale = @context.registers[:locale] || I18n.default_locale
|
|
29
35
|
|
|
30
36
|
if mode == 'development'
|
|
31
|
-
message = { k: args
|
|
37
|
+
message = { k: args[0] }.to_json
|
|
32
38
|
hidden_message = ZeroWidthCharacterEncoder.new.execute(message)
|
|
33
39
|
|
|
34
40
|
t = Translate.new
|
|
35
|
-
dict = t.
|
|
36
|
-
value = t.fetch_translation(dict, args
|
|
37
|
-
return args
|
|
41
|
+
dict = t.remote_dict(locale)
|
|
42
|
+
value = t.fetch_translation(dict, args[0])
|
|
43
|
+
return args[0] if value.nil?
|
|
38
44
|
|
|
39
|
-
translation = MessageFormat.new(value, locale.to_s).format(args
|
|
45
|
+
translation = MessageFormat.new(value, locale.to_s).format(args[1]&.transform_keys(&:to_sym))
|
|
40
46
|
"#{translation}#{hidden_message}"
|
|
41
47
|
else
|
|
42
48
|
original_method.bind(self).call(*args, &fn)
|
|
43
49
|
end
|
|
44
50
|
end
|
|
45
51
|
end
|
|
52
|
+
# rubocop:enable Metrics/MethodLength, Metrics/AbcSize
|
|
46
53
|
|
|
54
|
+
# Expose translation method that used in Liquid filters
|
|
47
55
|
module TolgeeFilter
|
|
48
56
|
def t(name, vars = {})
|
|
49
57
|
opts = {
|
|
50
58
|
locale: @context.registers[:locale] || I18n.default_locale,
|
|
51
59
|
mode: @context.registers[:mode] || 'production',
|
|
52
|
-
static_data: @context.registers[:static_data] || {}
|
|
60
|
+
static_data: @context.registers[:static_data] || {}
|
|
53
61
|
}
|
|
54
62
|
Translate.new.execute(name, vars, opts)
|
|
55
63
|
end
|
data/tolgee_liquid.gemspec
CHANGED
|
@@ -1,31 +1,36 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
|
|
2
|
-
lib = File.expand_path(
|
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
|
-
require
|
|
5
|
+
require 'tolgee_liquid/version'
|
|
5
6
|
|
|
6
7
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
8
|
+
spec.name = 'tolgee_liquid'
|
|
8
9
|
spec.version = TolgeeLiquid::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
10
|
+
spec.authors = ['Allen He']
|
|
11
|
+
spec.email = ['pooopooo543@gmail.com']
|
|
11
12
|
|
|
12
|
-
spec.summary =
|
|
13
|
-
spec.description =
|
|
14
|
-
spec.license =
|
|
13
|
+
spec.summary = 'Tolgee Integration for Liquid'
|
|
14
|
+
spec.description = 'A gem that integrate Tolgee Platform to Shopify Liquid template engine.'
|
|
15
|
+
spec.license = 'MIT'
|
|
15
16
|
|
|
16
17
|
# Specify which files should be added to the gem when it is released.
|
|
17
18
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
18
|
-
spec.files = Dir.chdir(File.expand_path(
|
|
19
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
19
20
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
20
21
|
end
|
|
21
|
-
spec.bindir =
|
|
22
|
+
spec.bindir = 'exe'
|
|
22
23
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
23
|
-
spec.require_paths = [
|
|
24
|
+
spec.require_paths = ['lib']
|
|
25
|
+
|
|
26
|
+
spec.required_ruby_version = '>= 2.6.10'
|
|
24
27
|
|
|
25
28
|
spec.add_dependency 'message_format', '~> 0.0.8'
|
|
26
29
|
|
|
27
|
-
spec.add_development_dependency
|
|
28
|
-
spec.add_development_dependency
|
|
29
|
-
spec.add_development_dependency
|
|
30
|
-
spec.add_development_dependency
|
|
30
|
+
spec.add_development_dependency 'bundler', '~> 1.17'
|
|
31
|
+
spec.add_development_dependency 'i18n', '~> 1.14'
|
|
32
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
|
33
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
|
34
|
+
spec.add_development_dependency 'rubocop', '~> 1.50'
|
|
35
|
+
spec.add_development_dependency 'webmock', '~> 3.23'
|
|
31
36
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tolgee_liquid
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.9
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Allen He
|
|
@@ -38,6 +38,20 @@ dependencies:
|
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '1.17'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: i18n
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.14'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - "~>"
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '1.14'
|
|
41
55
|
- !ruby/object:Gem::Dependency
|
|
42
56
|
name: rake
|
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -66,6 +80,20 @@ dependencies:
|
|
|
66
80
|
- - "~>"
|
|
67
81
|
- !ruby/object:Gem::Version
|
|
68
82
|
version: '3.0'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: rubocop
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '1.50'
|
|
90
|
+
type: :development
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '1.50'
|
|
69
97
|
- !ruby/object:Gem::Dependency
|
|
70
98
|
name: webmock
|
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -89,6 +117,8 @@ extra_rdoc_files: []
|
|
|
89
117
|
files:
|
|
90
118
|
- ".gitignore"
|
|
91
119
|
- ".rspec"
|
|
120
|
+
- ".rubocop.yml"
|
|
121
|
+
- ".ruby-version"
|
|
92
122
|
- ".travis.yml"
|
|
93
123
|
- Gemfile
|
|
94
124
|
- Gemfile.lock
|
|
@@ -115,7 +145,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
115
145
|
requirements:
|
|
116
146
|
- - ">="
|
|
117
147
|
- !ruby/object:Gem::Version
|
|
118
|
-
version:
|
|
148
|
+
version: 2.6.10
|
|
119
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
150
|
requirements:
|
|
121
151
|
- - ">="
|