bisu 1.7.3 → 1.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6f756232e9a77ac32c288ccc91508e366298210b27ed117d538448691ac83df5
4
- data.tar.gz: 76e19d872d0f68b1b3ade068f35fdf4036267384af1f9aec787fcd43847ef9a7
3
+ metadata.gz: 2db1130663e6afdca1e4d1b22d34c5863db2f120cee81c1c802d69999b1c094b
4
+ data.tar.gz: 6f0cfd04fd34bb489055eaa0211aa74691f50f32c5fb13d8b7a1559c68a0f25a
5
5
  SHA512:
6
- metadata.gz: 82a626c2049aa774803b6faf02ae8909b31bf8273bebdc563f8015d89317edaeeac1560e35422574db39ef9b5eaa451774b77b9ff123f151cd9abbd2e3753110
7
- data.tar.gz: e4e40200a30462f873f83228396658888a88a8898171f50e362799ae28cfeaa506292eb8437a6a8aea7cf7b3cc571e763998d90eb82eb6a3066f38b8ad1c86ff
6
+ metadata.gz: b2d8325f651a93ca9bc2edb7108af31ebc5d1e3d5e954c8a8890a1a7985d2afababe15166ca4d909984a0be453d6f6ad8965eb44b4e1588bd970bc0e3d9669af
7
+ data.tar.gz: 67699cebd837fc150ae54b433fb3386d79617211ff988b64bca73d681cd8daaeb6202c1e84280d1cfcf39a906c0930272c9f5f237f8d1eb187d856b0494570af
@@ -2,6 +2,12 @@
2
2
  All notable changes to this project will be documented in this file.
3
3
  `Bisu` adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
+ ## [1.8.0](https://github.com/hole19/bisu/releases/tag/v1.8.0)
6
+ Released on 2020/04/30
7
+
8
+ #### Added
9
+ - Adds a new option: allows a single translation to have a specific fallback language (example: "es-MX" fallback to "es")
10
+
5
11
  ## [1.7.3](https://github.com/hole19/bisu/releases/tag/v1.7.3)
6
12
  Released on 2020/03/09
7
13
 
data/README.md CHANGED
@@ -45,11 +45,12 @@ Setup your configuration file
45
45
  out: path/to/2nd-%{locale}/strings.xml
46
46
 
47
47
  languages:
48
- - locale: en
49
- language: en
50
- - locale: en-US
51
- language: en
52
- - locale: pt
48
+ - locale: en
49
+ language: en # the language as it appears in the dictionary
50
+ - locale: en-US
51
+ language: en-us
52
+ fallback_language: en
53
+ - locale: pt
53
54
  language: pt
54
55
  ```
55
56
 
@@ -23,13 +23,15 @@ module Bisu
23
23
  dictionary = dictionary_for(config: config.dictionary, options: options)
24
24
  localizer = Bisu::Localizer.new(dictionary, config.type)
25
25
 
26
- config.localize_files do |in_path, out_path, language, locale|
26
+ config.localize_files do |in_path, out_path, locale, language, fallback_language|
27
27
  unless dictionary.has_language?(language)
28
28
  Logger.error("Unknown language #{language}")
29
29
  return false
30
30
  end
31
31
 
32
- localize_file(localizer, locale, language, options[:default_language], in_path, out_path)
32
+ fallback_languages = ([fallback_language] + [options[:default_language]]).compact
33
+
34
+ localize_file(localizer, locale, language, fallback_languages, in_path, out_path)
33
35
  end
34
36
  end
35
37
 
@@ -131,14 +133,14 @@ module Bisu
131
133
  File.open(File.expand_path(file_name), method)
132
134
  end
133
135
 
134
- def localize_file(localizer, locale, language, default_language, in_path, out_path)
136
+ def localize_file(localizer, locale, language, fallback_languages, in_path, out_path)
135
137
  Logger.info("Translating #{in_path} to #{language} > #{out_path}...")
136
138
 
137
139
  return false unless in_file = open_file(in_path, "r", true)
138
140
  return false unless out_file = open_file(out_path, "w", false)
139
141
 
140
142
  in_file.each_line do |line|
141
- out_file.write(localizer.localize(line, language, locale, default_language))
143
+ out_file.write(localizer.localize(line, language, locale, fallback_languages))
142
144
  end
143
145
 
144
146
  out_file.flush
@@ -27,7 +27,7 @@ module Bisu
27
27
  @hash[:translate].each do |t|
28
28
  @hash[:languages].each do |l|
29
29
  downcase_locale = l[:locale].downcase.gsub("-", "_").gsub(" ", "_")
30
- yield(t[:in], (t[:"out_#{downcase_locale}"] || t[:out]) % l, l[:language], l[:locale])
30
+ yield(t[:in], (t[:"out_#{downcase_locale}"] || t[:out]) % l, l[:locale], l[:language], l[:fallback_language])
31
31
  end
32
32
  end
33
33
  end
@@ -50,7 +50,8 @@ module Bisu
50
50
  languages: { type: Array, elements: {
51
51
  type: Hash, elements: {
52
52
  locale: { type: String },
53
- language: { type: String }
53
+ language: { type: String },
54
+ fallback_language: { type: String, optional: true }
54
55
  }
55
56
  } }
56
57
  }
@@ -10,7 +10,7 @@ module Bisu
10
10
  end
11
11
  end
12
12
 
13
- def localize(text, language, locale, fallback_language=nil)
13
+ def localize(text, language, locale, fallback_languages=[])
14
14
  t = text
15
15
  t = t.gsub("$specialKLanguage$", language)
16
16
  t = t.gsub("$specialKLocale$", locale)
@@ -18,7 +18,7 @@ module Bisu
18
18
  t = t.gsub("$specialKComment2$", "Remember to CHANGE THE TEMPLATE and not this file!")
19
19
 
20
20
  to_localize(t).map do |l|
21
- if localized = @dict.localize(language, l[:key]) || @dict.localize(fallback_language, l[:key])
21
+ if localized = localize_key(l[:key], [language] + fallback_languages)
22
22
  localized = process(localized)
23
23
 
24
24
  l[:params].each do |param, value|
@@ -44,6 +44,16 @@ module Bisu
44
44
  t
45
45
  end
46
46
 
47
+ def localize_key(key, ordered_languages)
48
+ ordered_languages.each do |language|
49
+ if localized = @dict.localize(language, key)
50
+ return localized
51
+ end
52
+ end
53
+
54
+ nil
55
+ end
56
+
47
57
  private
48
58
 
49
59
  def to_localize(text)
@@ -1,4 +1,4 @@
1
1
  module Bisu
2
- VERSION = '1.7.3'
3
- VERSION_UPDATED_AT = '2020-03-09'
2
+ VERSION = '1.8.0'
3
+ VERSION_UPDATED_AT = '2020-04-30'
4
4
  end
@@ -15,4 +15,5 @@ languages:
15
15
  - locale: en
16
16
  language: english
17
17
  - locale: en-US
18
- language: english
18
+ language: english-us
19
+ fallback_language: english
@@ -22,7 +22,7 @@ describe Bisu::Config do
22
22
  { locale: "en-US", language: "english" },
23
23
  { locale: "pt", language: "portuguese" },
24
24
  { locale: "pt-PT", language: "portuguese" },
25
- { locale: "pt-Batatas", language: "portuguese" }
25
+ { locale: "pt-Batatas", language: "portuguese-bt", fallback_language: "portuguese" }
26
26
  ]
27
27
  } }
28
28
 
@@ -75,14 +75,14 @@ describe Bisu::Config do
75
75
  expect { |b|
76
76
  config.localize_files(&b)
77
77
  }.to yield_successive_args(
78
- ["path/to/file/to/1.ext.translatable", "path/to/default/1.ext", "english", "en-US" ],
79
- ["path/to/file/to/1.ext.translatable", "path/to/final-pt/1.ext", "portuguese", "pt" ],
80
- ["path/to/file/to/1.ext.translatable", "path/to/final-pt-PT/1.ext", "portuguese", "pt-PT" ],
81
- ["path/to/file/to/1.ext.translatable", "path/to/final-pt-Batatas/1.ext", "portuguese", "pt-Batatas"],
82
- ["path/to/file/to/2.ext.translatable", "path/to/default/2.ext", "english", "en-US" ],
83
- ["path/to/file/to/2.ext.translatable", "path/to/final-pt/2.ext", "portuguese", "pt" ],
84
- ["path/to/file/to/2.ext.translatable", "path/to/final-pt-PT/2.ext", "portuguese", "pt-PT" ],
85
- ["path/to/file/to/2.ext.translatable", "path/to/final-pt-Batatas/2.ext", "portuguese", "pt-Batatas"]
78
+ ["path/to/file/to/1.ext.translatable", "path/to/default/1.ext", "en-US", "english", nil ],
79
+ ["path/to/file/to/1.ext.translatable", "path/to/final-pt/1.ext", "pt", "portuguese", nil ],
80
+ ["path/to/file/to/1.ext.translatable", "path/to/final-pt-PT/1.ext", "pt-PT", "portuguese", nil ],
81
+ ["path/to/file/to/1.ext.translatable", "path/to/final-pt-Batatas/1.ext", "pt-Batatas", "portuguese-bt", "portuguese"],
82
+ ["path/to/file/to/2.ext.translatable", "path/to/default/2.ext", "en-US", "english", nil ],
83
+ ["path/to/file/to/2.ext.translatable", "path/to/final-pt/2.ext", "pt", "portuguese", nil ],
84
+ ["path/to/file/to/2.ext.translatable", "path/to/final-pt-PT/2.ext", "pt-PT", "portuguese", nil ],
85
+ ["path/to/file/to/2.ext.translatable", "path/to/final-pt-Batatas/2.ext", "pt-Batatas", "portuguese-bt", "portuguese"]
86
86
  )
87
87
  end
88
88
  end
@@ -19,6 +19,9 @@ describe Bisu::Localizer do
19
19
  "kAtSign" => "\@johnsnow sabes alguma coisa?",
20
20
  "kPercentage" => "Sabes 0% João das Neves."
21
21
  },
22
+ "Spanish" => {
23
+ "kMissingTransKey" => "Sabes poco John Snow"
24
+ },
22
25
  "English" => {
23
26
  "kMissingTransKey" => "You know little John Snow"
24
27
  }
@@ -30,8 +33,8 @@ describe Bisu::Localizer do
30
33
  shared_examples_for "a localizer" do
31
34
  it { expect { localizer }.not_to raise_error }
32
35
 
33
- def translates(text, fallback: nil, to:, lang: nil)
34
- translation = localizer.localize(text, lang || language, locale, fallback)
36
+ def translates(text, fallbacks: [], to:, lang: nil)
37
+ translation = localizer.localize(text, lang || language, locale, fallbacks)
35
38
  expect(translation).to eq to
36
39
  end
37
40
 
@@ -46,7 +49,8 @@ describe Bisu::Localizer do
46
49
  it { translates("this key: $kTranslationKey$", to: "this key: Não sabes nada João das Neves", lang: "portuguese") }
47
50
  it { translates("this unknown key: $kUnknownKey$", to: "this unknown key: $kUnknownKey$") }
48
51
  it { translates("this key with missing translations: $kMissingTransKey$", to: "this key with missing translations: $kMissingTransKey$") }
49
- it { translates("this key with missing translations: $kMissingTransKey$", fallback: "English", to: "this key with missing translations: You know little John Snow") }
52
+ it { translates("this key with missing translations: $kMissingTransKey$", fallbacks: ["English"], to: "this key with missing translations: You know little John Snow") }
53
+ it { translates("this key with missing translations: $kMissingTransKey$", fallbacks: ["Spanish", "English"], to: "this key with missing translations: Sabes poco John Snow") }
50
54
  it { translates("these 2 keys: $kTranslationKey$, $kTranslationKey2$", to: "these 2 keys: Não sabes nada João das Neves, Naaada!") }
51
55
 
52
56
  it { translates("1 parameter: $k1ParameterKey$", to: "1 parameter: Não sabes nada %{name}") }
@@ -7,7 +7,8 @@ describe Bisu do
7
7
  before do
8
8
  allow(Bisu).to receive(:open_file).and_return(file)
9
9
  allow_any_instance_of(Bisu::Source::GoogleSheet).to receive(:to_i18).and_return({
10
- "english" => { "kKey" => "Value" }
10
+ "english" => { "kKey" => "Value" },
11
+ "english-us" => { "kKey" => "Value" }
11
12
  })
12
13
  allow(Bisu).to receive(:localize_file)
13
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bisu
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.3
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - joaoffcosta
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2020-04-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: safe_yaml