fractual_i18n 0.1.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -5
- data/lib/fractual_i18n/backend.rb +14 -2
- data/lib/fractual_i18n/configuration.rb +2 -0
- data/lib/fractual_i18n/phrases.rb +38 -0
- data/lib/fractual_i18n/railtie.rb +6 -0
- data/lib/fractual_i18n/version.rb +3 -1
- data/lib/fractual_i18n.rb +2 -0
- data/lib/tasks/fractual_i18n.rake +32 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93973ed14052dc7838096589ba14a8a9df64aec2ccc9dbcbbaa4af772d8042c5
|
4
|
+
data.tar.gz: bd05da1a510e772a97fa79309b6d23e301893bf738c91855e166fff9eb8fcce8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b5bdb966bd270f157678c4bb9eb879c0489d4c8b0923eaacb4aadf9e7d95e7fa48fa4ef43360b629acb981167482ebf63216768a4716d8a10d4fe0c42e115a9
|
7
|
+
data.tar.gz: a2cc062386cceb7d85492a361f7b3bb1c1a9c1e26cce2c1d01cb9673d286709359ade856df010f185f7e6cb6e08db1bf9454b1043c690da548b975a5416acf0e
|
data/Gemfile.lock
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
fractual_i18n (0.
|
4
|
+
fractual_i18n (0.4.0)
|
5
5
|
i18n
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
concurrent-ruby (1.1.
|
11
|
-
i18n (1.
|
10
|
+
concurrent-ruby (1.1.9)
|
11
|
+
i18n (1.10.0)
|
12
12
|
concurrent-ruby (~> 1.0)
|
13
|
-
minitest (5.
|
13
|
+
minitest (5.15.0)
|
14
14
|
rake (12.3.3)
|
15
15
|
|
16
16
|
PLATFORMS
|
@@ -22,4 +22,4 @@ DEPENDENCIES
|
|
22
22
|
rake (~> 12.0)
|
23
23
|
|
24
24
|
BUNDLED WITH
|
25
|
-
2.
|
25
|
+
2.3.4
|
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FractualI18n::Backend
|
2
4
|
def load_yml(filename)
|
3
5
|
if (fractual_path = FractualI18n.configuration.fractual_paths.find { |path| filename.starts_with?(path) })
|
4
|
-
content =
|
6
|
+
content = load_yml_file_unsafely(filename)
|
5
7
|
keys = filename.delete_prefix(fractual_path).delete_prefix("/").split("/")
|
6
8
|
last_key = keys.pop.delete_suffix(".yml")
|
7
9
|
keys << last_key
|
@@ -12,9 +14,19 @@ module FractualI18n::Backend
|
|
12
14
|
translations[locale] = keys.reverse.inject(content[locale.to_s]) { |translation, key| { key => translation } }
|
13
15
|
end
|
14
16
|
else # default
|
15
|
-
|
17
|
+
load_yml_file_unsafely(filename)
|
16
18
|
end
|
17
19
|
rescue TypeError, ScriptError, StandardError => e
|
18
20
|
raise I18n::InvalidLocaleData.new(filename, e.inspect)
|
19
21
|
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def load_yml_file_unsafely(filename)
|
26
|
+
if YAML.respond_to?(:unsafe_load_file) # Psych 4.0 way
|
27
|
+
YAML.unsafe_load_file(filename)
|
28
|
+
else
|
29
|
+
YAML.load_file(filename)
|
30
|
+
end
|
31
|
+
end
|
20
32
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class FractualI18n::Phrases
|
4
|
+
def joined(locale:)
|
5
|
+
original_load_path = I18n.load_path
|
6
|
+
|
7
|
+
I18n.load_path = fractual_files
|
8
|
+
I18n.with_locale(locale) { I18n.t(".") }
|
9
|
+
ensure
|
10
|
+
I18n.load_path = original_load_path
|
11
|
+
end
|
12
|
+
|
13
|
+
def store(translations, locale:)
|
14
|
+
fractual_files.each do |filename|
|
15
|
+
content = YAML.load_file(filename)
|
16
|
+
|
17
|
+
fractual_path = FractualI18n.configuration.fractual_paths.find { |path| filename.starts_with?(path) }
|
18
|
+
keys = filename.delete_prefix(fractual_path).delete_prefix("/").split("/")
|
19
|
+
last_key = keys.pop.delete_suffix(".yml")
|
20
|
+
keys << last_key
|
21
|
+
keys.map! { |key| key.delete_prefix("_") } # remove underscore from partial name
|
22
|
+
|
23
|
+
if new_content = translations.dig(locale.to_s, *keys)
|
24
|
+
content[locale.to_s] = content.fetch(locale.to_s, {}).merge(new_content)
|
25
|
+
end
|
26
|
+
|
27
|
+
File.write(filename, content.to_yaml(line_width: 200))
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def fractual_files
|
34
|
+
I18n.load_path.select do |path|
|
35
|
+
FractualI18n.configuration.fractual_paths.any? { |fp| path.starts_with?(fp) }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,7 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "rails/railtie"
|
2
4
|
|
3
5
|
class FractualI18n::Railtie < Rails::Railtie
|
4
6
|
initializer "fractual_i18n.set_fractual_paths" do |app|
|
5
7
|
FractualI18n.configuration.fractual_paths = app.config.paths["app/views"].existent
|
6
8
|
end
|
9
|
+
|
10
|
+
rake_tasks do
|
11
|
+
load "tasks/fractual_i18n.rake"
|
12
|
+
end
|
7
13
|
end
|
data/lib/fractual_i18n.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
namespace :fractual_i18n do
|
4
|
+
desc "Export view translations to single file"
|
5
|
+
task :export, [:to] => :environment do |_task, args|
|
6
|
+
require "fractual_i18n/phrases"
|
7
|
+
destination = args[:to] || "tmp/fractual_i18n/exported"
|
8
|
+
|
9
|
+
FileUtils.mkdir_p(destination)
|
10
|
+
FractualI18n.configuration.available_locales.each do |locale|
|
11
|
+
translations = FractualI18n::Phrases.new.joined(locale: locale)
|
12
|
+
Dir.chdir(destination) do
|
13
|
+
content = {locale.to_s => translations.deep_stringify_keys}.to_yaml(line_width: 200)
|
14
|
+
File.write("#{locale}.yml", content)
|
15
|
+
puts "#{destination}/#{locale}.yml exported"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Import view translations from single file"
|
21
|
+
task :import, [:from] => :environment do |_task, args|
|
22
|
+
require "fractual_i18n/phrases"
|
23
|
+
destination = args[:from] || "tmp/fractual_i18n/import"
|
24
|
+
|
25
|
+
Dir.each_child(destination) do |file|
|
26
|
+
content = YAML.load_file("#{destination}/#{file}")
|
27
|
+
locale = content.keys.first
|
28
|
+
|
29
|
+
FractualI18n::Phrases.new.store(content, locale: locale)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fractual_i18n
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Robert Sęk
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: i18n
|
@@ -44,8 +44,10 @@ files:
|
|
44
44
|
- lib/fractual_i18n.rb
|
45
45
|
- lib/fractual_i18n/backend.rb
|
46
46
|
- lib/fractual_i18n/configuration.rb
|
47
|
+
- lib/fractual_i18n/phrases.rb
|
47
48
|
- lib/fractual_i18n/railtie.rb
|
48
49
|
- lib/fractual_i18n/version.rb
|
50
|
+
- lib/tasks/fractual_i18n.rake
|
49
51
|
homepage: https://github.com/tiramizoo/fractual_i18n
|
50
52
|
licenses:
|
51
53
|
- MIT
|
@@ -67,7 +69,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
67
69
|
- !ruby/object:Gem::Version
|
68
70
|
version: '0'
|
69
71
|
requirements: []
|
70
|
-
rubygems_version: 3.
|
72
|
+
rubygems_version: 3.3.4
|
71
73
|
signing_key:
|
72
74
|
specification_version: 4
|
73
75
|
summary: Supports loading translation files from views folder
|