ad_localize 3.0.2 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cbef79aa4f801f810011f962ea28926e6518fd2e09b5471b83fe9ecf71a72638
4
- data.tar.gz: 75f97c8dbf7e7e751f47fde0e3ae9e92eac06bd64d231fd0052acf7d6c19f2ab
3
+ metadata.gz: 9510eed71bfba2c01f047d80707eaaeffbe24d6fefc4f65927b1afe8e44c2a49
4
+ data.tar.gz: 3aba4a56d7f7b5fd0da6056471c55cf025a9133dd3d5a815fe06ac89a662d645
5
5
  SHA512:
6
- metadata.gz: 7f49d154c8b682f0e17415703d220f254ecd5e4839b0969b2d75175d1e0617a2ad8dd5b41deab3ad616481c73a77160edf4700ee5baf89c7837a1c47e7ed789d
7
- data.tar.gz: d022f56a3cc71552836c4c51c5418e5057aa4ee06e1b19ac5b7974bf8e3ce98311a67f608c11a8bf9aa01e31196075a3a8a22448638c0614814909589ee8883a
6
+ metadata.gz: b87614c092bd2c6fcee5deeba77add9035f01c4861d526081e91606e6613827f4199d2fccb1f69aa7149f6c7a2755536d7e7a2b5d50901455b519fc20a98d695
7
+ data.tar.gz: 22b0cc2b7b3a6290017b7cdd9e8bb0a7bb30b662bdeada9669d9fd10a670af0f3d4e99919fca9023b0cd289d0ad254d45e14dc7d7fdc20f0b6fac25f92017eca
data/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
+ ## [3.1.0] - 2019-09-30
8
+ ### Added
9
+ - [iOS only] Info.plist generation support by [@felginep](https://github.com/felginep)
10
+ ### Changed
11
+ - No more warning log for empty lines by [@felginep](https://github.com/felginep)
12
+
7
13
  ## [3.0.0] - 2019-02-19
8
14
  TODO
9
15
 
data/README.md CHANGED
@@ -97,10 +97,12 @@ exports/
97
97
  ├── ios
98
98
  │   ├── en.lproj
99
99
  │   │   ├── Localizable.strings
100
- │   │   └── Localizable.stringsdict
101
- │   └── fr.lproj
100
+ │   │   ├── Localizable.stringsdict
101
+ | | └── InfoPlist.strings
102
+ │ └── fr.lproj
102
103
  │   ├── Localizable.strings
103
- │   └── Localizable.stringsdict
104
+ │   ├── Localizable.stringsdict
105
+ | └── InfoPlist.strings
104
106
  ├── json
105
107
  │   ├── en.json
106
108
  │   └── fr.json
@@ -165,6 +167,16 @@ Sample of iOS output in .stringsdict
165
167
  </plist>
166
168
  ```
167
169
 
170
+ ## InfoPlist.strings
171
+
172
+ _Only for iOS._
173
+
174
+ Every key that matches the following formats will be added to the `InfoPlist.strings` file instead of `Localizable.strings`:
175
+ * `NS...UsageDescription`
176
+ * `CF...Name`
177
+
178
+ Source: https://developer.apple.com/documentation/bundleresources/information_property_list
179
+
168
180
  ## Development
169
181
 
170
182
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -4,6 +4,7 @@ module AdLocalize
4
4
  PLURAL_KEY_SYMBOL = :plural
5
5
  SINGULAR_KEY_SYMBOL = :singular
6
6
  COMMENT_KEY_SYMBOL = :comment
7
+ INFO_PLIST_KEY_SYMBOL = :info_plist
7
8
  COMMENT_KEY_COLUMN_IDENTIFIER = "comment"
8
9
  DEFAULT_CONFIG = {
9
10
  platforms: {
@@ -16,6 +17,7 @@ module AdLocalize
16
17
  CONFIG = YAML.load_file(Pathname::pwd + 'config.yml').deep_symbolize_keys rescue DEFAULT_CONFIG
17
18
  EXPORT_FOLDER = 'exports'
18
19
  IOS_SINGULAR_EXPORT_FILENAME = "Localizable.strings"
20
+ IOS_INFO_PLIST_EXPORT_FILENAME = "InfoPlist.strings"
19
21
  IOS_PLURAL_EXPORT_FILENAME = "Localizable.stringsdict"
20
22
  ANDROID_EXPORT_FILENAME = "strings.xml"
21
23
  end
@@ -2,6 +2,7 @@ module AdLocalize
2
2
  class CsvParser
3
3
  CSV_WORDING_KEYS_COLUMN = "key"
4
4
  PLURAL_KEY_REGEXP = /\#\#\{(\w+)\}/
5
+ INFO_PLIST_KEY_REGEXP = /(NS.+UsageDescription)|(CF.+Name)/ # see https://developer.apple.com/documentation/bundleresources/information_property_list
5
6
 
6
7
  attr_accessor :locales
7
8
 
@@ -15,8 +16,12 @@ module AdLocalize
15
16
  CSV.foreach(file_name, headers: true, skip_blanks: true) do |row|
16
17
  validity_status = check_row(row)
17
18
  if validity_status.zero?
19
+ keys_column_index = row.index(CSV_WORDING_KEYS_COLUMN)
20
+ fields = row.fields
21
+ LOGGER.log(:warn, :yellow, "Missing key in line #{$.}") unless fields[keys_column_index...fields.count].all?(&:nil?)
18
22
  next
19
23
  elsif validity_status == -1
24
+ LOGGER.log(:error, :red, "[CSV FORMAT] #{file_name} is not a valid file")
20
25
  exit
21
26
  else
22
27
  find_locales(row) if locales.empty?
@@ -35,10 +40,8 @@ module AdLocalize
35
40
  valid_row = 1
36
41
  # Check non empty row
37
42
  if row.field(CSV_WORDING_KEYS_COLUMN).nil?
38
- LOGGER.log(:error, :red, "Missing key in line #{$.}") unless row.fields.all?(&:nil?)
39
43
  valid_row = 0
40
44
  elsif not row.headers.include?(CSV_WORDING_KEYS_COLUMN)
41
- LOGGER.log(:error, :red, "[CSV FORMAT] #{file_name} is not a valid file")
42
45
  valid_row = -1
43
46
  end
44
47
  return valid_row
@@ -75,6 +78,9 @@ module AdLocalize
75
78
  "[#{locale.upcase}] Plural key ---> plural_identifier : #{key_infos.dig(:plural_identifier)}, key : #{current_key}",
76
79
  "[#{locale.upcase}] Missing translation for #{current_key} (#{key_infos.dig(:plural_identifier)})")
77
80
  value = { key_infos.dig(:plural_identifier) => row[locale] || default_wording(locale, "#{current_key} (#{key_infos.dig(:plural_identifier)})") }
81
+ elsif key_infos.dig(:numeral_key) == Constant::INFO_PLIST_KEY_SYMBOL
82
+ trace_wording(row[locale], "[#{locale.upcase}] Info.plist key ---> #{current_key}", "[#{locale.upcase}] Missing translation for #{current_key}")
83
+ value = row[locale] || default_wording(locale, current_key)
78
84
  else
79
85
  raise "Unknown numeral key #{key_infos.dig(:numeral_key)}"
80
86
  end
@@ -93,7 +99,11 @@ module AdLocalize
93
99
  invalid_plural = false
94
100
 
95
101
  if plural_prefix.nil?
96
- numeral_key = Constant::SINGULAR_KEY_SYMBOL
102
+ if key.match(INFO_PLIST_KEY_REGEXP).nil?
103
+ numeral_key = Constant::SINGULAR_KEY_SYMBOL
104
+ else
105
+ numeral_key = Constant::INFO_PLIST_KEY_SYMBOL
106
+ end
97
107
  else
98
108
  numeral_key = Constant::PLURAL_KEY_SYMBOL
99
109
  key = plural_prefix.pre_match
@@ -6,7 +6,7 @@ module AdLocalize::Platform
6
6
 
7
7
  def export(locale, data, export_extension = nil, substitution_format = nil)
8
8
  create_locale_dir(locale)
9
- [AdLocalize::Constant::PLURAL_KEY_SYMBOL, AdLocalize::Constant::SINGULAR_KEY_SYMBOL].each do |numeral_key|
9
+ [AdLocalize::Constant::PLURAL_KEY_SYMBOL, AdLocalize::Constant::SINGULAR_KEY_SYMBOL, AdLocalize::Constant::INFO_PLIST_KEY_SYMBOL].each do |numeral_key|
10
10
  numeral_data = data.select {|key, wording| wording.dig(locale.to_sym)&.key? numeral_key}
11
11
  if numeral_data.empty?
12
12
  AdLocalize::LOGGER.log(:info, :black, "[#{locale.upcase}] no #{numeral_key.to_s} keys were found to generate the file")
@@ -17,20 +17,39 @@ module AdLocalize::Platform
17
17
  end
18
18
 
19
19
  protected
20
+
20
21
  def write_singular(locale, singulars)
22
+ write_localizable(
23
+ locale: locale,
24
+ singulars: singulars,
25
+ wording_type: AdLocalize::Constant::SINGULAR_KEY_SYMBOL,
26
+ filename: AdLocalize::Constant::IOS_SINGULAR_EXPORT_FILENAME
27
+ )
28
+ end
29
+
30
+ def write_info_plist(locale, singulars)
31
+ write_localizable(
32
+ locale: locale,
33
+ singulars: singulars,
34
+ wording_type: AdLocalize::Constant::INFO_PLIST_KEY_SYMBOL,
35
+ filename: AdLocalize::Constant::IOS_INFO_PLIST_EXPORT_FILENAME
36
+ )
37
+ end
38
+
39
+ def write_localizable(locale:, singulars:, wording_type:, filename:)
21
40
  locale = locale.to_sym
22
41
 
23
42
  singulars.each do |key, locales_wording|
24
- value = locales_wording.dig(locale, AdLocalize::Constant::SINGULAR_KEY_SYMBOL)
43
+ value = locales_wording.dig(locale, wording_type)
25
44
  comment = locales_wording.dig(locale, AdLocalize::Constant::COMMENT_KEY_SYMBOL)
26
- export_dir(locale).join(AdLocalize::Constant::IOS_SINGULAR_EXPORT_FILENAME).open("a") do |file|
45
+ export_dir(locale).join(filename).open("a") do |file|
27
46
  line = "\"#{key}\" = \"#{value}\";"
28
47
  line << " // #{comment}" unless comment.nil?
29
48
  line << "\n"
30
49
  file.puts line
31
50
  end
32
51
  end
33
- AdLocalize::LOGGER.log(:debug, :black, "iOS singular [#{locale}] ---> DONE!")
52
+ AdLocalize::LOGGER.log(:debug, :black, "iOS #{wording_type} [#{locale}] ---> DONE!")
34
53
  end
35
54
 
36
55
  def write_plural(locale, plurals)
@@ -1,3 +1,3 @@
1
1
  module AdLocalize
2
- VERSION = "3.0.2"
2
+ VERSION = "3.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ad_localize
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Edouard Siegel