cocoapods-localzedLoader 0.0.1
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 +7 -0
- data/lib/File_util.rb +94 -0
- data/lib/LanguageDownloader.rb +81 -0
- data/lib/StringElement.rb +17 -0
- data/lib/cocoapods-localzedLoader/command/localzedLoader.rb +44 -0
- data/lib/cocoapods-localzedLoader/command.rb +1 -0
- data/lib/cocoapods-localzedLoader/gem_version.rb +3 -0
- data/lib/cocoapods-localzedLoader.rb +1 -0
- data/lib/cocoapods_plugin.rb +10 -0
- data/lib/ios_bundle_generate.rb +106 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 05a7af28fc44ec65b1771212c189e7b86ea289f1405ecc03a9d1eb59b6bb916e
|
4
|
+
data.tar.gz: 51939fa9a827d8f57c8f91c58d8592c556748aa95028ac7e893992312849b1c7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 37dc15c4aa3bcd90eea0109ecc2365790e9d13110af6341aafdbd93b60ba610b2fe3a44dfe82df75d76fe7735305ed6a15bbe8b9a7dfc5103c5ccff7e0137bb9
|
7
|
+
data.tar.gz: 7b6941a85d52a6ae30b6f72da4934432bd5feb008cc67f73d01ae81cb4ac78358408b92b4bbeac4a1e5e0338d5ead7f49cf729b69ac51a2419a90a2cdb08326c
|
data/lib/File_util.rb
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
|
2
|
+
# require 'file'
|
3
|
+
$LOAD_PATH << '.'
|
4
|
+
# -*- coding: UTF-8 -*-
|
5
|
+
require 'rubyXL'
|
6
|
+
require_relative './StringElement'
|
7
|
+
|
8
|
+
class File_util
|
9
|
+
|
10
|
+
attr_accessor :keys_hash
|
11
|
+
#读取excel 返回StringElement数组
|
12
|
+
def read_excel(filename)
|
13
|
+
unless filename != nil
|
14
|
+
puts "读取的excel为空"
|
15
|
+
return
|
16
|
+
end
|
17
|
+
|
18
|
+
workbook = RubyXL::Parser.parse filename
|
19
|
+
worksheet = workbook[0]
|
20
|
+
row1 = worksheet[0]
|
21
|
+
@key_hash = getkeyHash(row1)
|
22
|
+
lang_hash = {}
|
23
|
+
worksheet.each_with_index do |row|
|
24
|
+
ele = StringElement.new
|
25
|
+
self_key = ''
|
26
|
+
# 设置StringElement的值
|
27
|
+
row.cells.each_with_index do |cell, i|
|
28
|
+
|
29
|
+
next unless cell
|
30
|
+
case i
|
31
|
+
when 0
|
32
|
+
|
33
|
+
when 1
|
34
|
+
self_key = cell.value
|
35
|
+
else
|
36
|
+
key = @key_hash[i]
|
37
|
+
ele.langHash[key] = (cell.value || '')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
lang_hash[self_key] = ele
|
42
|
+
end
|
43
|
+
lang_hash
|
44
|
+
end
|
45
|
+
|
46
|
+
#根据第一行来获取当前cell的key
|
47
|
+
# return {1:selfkey,2:en,3:zh....} 方便excel取
|
48
|
+
# Command+Option+L 对齐快捷键
|
49
|
+
def getkeyHash(row1,ios:true)
|
50
|
+
keys_hash = {}
|
51
|
+
row1.cells.each_with_index do |cell, i|
|
52
|
+
next unless cell
|
53
|
+
if i > 1
|
54
|
+
result = cell.value.scan(/.*?\[(.*)\]/)
|
55
|
+
key = result[0][0]
|
56
|
+
case key
|
57
|
+
when /zh_HK/
|
58
|
+
key="zh-HK"
|
59
|
+
when /zh_TW/
|
60
|
+
key ="zh-Hant-TW"
|
61
|
+
when /zh/
|
62
|
+
key ="zh-Hans"
|
63
|
+
when /fr.*/
|
64
|
+
key ="fr"
|
65
|
+
when /it.*/
|
66
|
+
key="it"
|
67
|
+
when /ger.*/
|
68
|
+
key ="de"
|
69
|
+
else
|
70
|
+
key
|
71
|
+
end
|
72
|
+
keys_hash[i] = key
|
73
|
+
elsif i == 1
|
74
|
+
keys_hash[i] = cell.value
|
75
|
+
end
|
76
|
+
end
|
77
|
+
keys_hash
|
78
|
+
end
|
79
|
+
|
80
|
+
def getLangList
|
81
|
+
list = @key_hash.values
|
82
|
+
list.delete_if{|item| item.downcase === "selfkey"}
|
83
|
+
list
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# hash = File_util.read_excel"hit_all.xls"
|
88
|
+
# puts hash.keys.size
|
89
|
+
# hash.each do |key,value|
|
90
|
+
# puts value
|
91
|
+
# end
|
92
|
+
|
93
|
+
# p "sssssssss中文[zh]".scan(/.*?\[(.*)\]/)
|
94
|
+
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'httparty'
|
3
|
+
require 'zip'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
class LanguageDownloader
|
7
|
+
|
8
|
+
HeaderString = %Q{accept: application/json, text/plain, */*
|
9
|
+
accept-encoding: gzip, deflate, br
|
10
|
+
accept-language: zh
|
11
|
+
content-length: 182
|
12
|
+
content-type: application/json
|
13
|
+
cookie: experimentation_subject_id=ImNhNTFhZTQ4LTVjNWItNDBmOS05ZmY3LTY5ZjgwMjE2YzU3ZCI%3D--adfdeb4234398bb82727d204df565baf4fcb9e02; __gads=ID=330a8bae159ec1c5-224c3fce10d50039:T=1657179992:RT=1657179992:S=ALNI_MbFcfcws4Qph_vMu9ocv_uTUODlsQ; _gcl_au=1.1.1930354128.1661415060; _fbp=fb.1.1661415060137.191157889; sensorsdata2015jssdkcross=%7B%22distinct_id%22%3A%22e81e719330108226.642068199734845441%22%2C%22first_id%22%3A%2217f2542445d8d6-0c4aee16f19597-37677a09-1484784-17f2542445e707%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E5%BC%95%E8%8D%90%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC%22%2C%22%24latest_referrer%22%3A%22https%3A%2F%2Fuc.aqara.cn%2F%22%7D%2C%22%24device_id%22%3A%2217f2542445d8d6-0c4aee16f19597-37677a09-1484784-17f2542445e707%22%7D; __gpi=UID=00000770b0955020:T=1657179992:RT=1667284690:S=ALNI_Max_O1qEORw1S9hsg1OFkW2uV7oQg; _ga=GA1.2.283585764.1638366289; _ga_3EMB6JL0XV=GS1.1.1667298252.19.1.1667299119.60.0.0; Hm_lvt_2df419cadb3951597d5f6df3a9e563d1=1667528944; Hm_lpvt_2df419cadb3951597d5f6df3a9e563d1=1667547607; Token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJlODFlNzE5MzMwMTA4MjI2LjY0MjA2ODE5OTczNDg0NTQ0MSIsImlzcyI6Imh0dHBzOi8vYWlvdC1ycGMuYXFhcmEuY24iLCJhY2NvdW50IjoieGlmYW4uemhhb0BhcWFyYS5jb20iLCJpYXRHbXQ4IjoxNjY3ODE3OTU1LCJqdGkiOiIxY2JkZjc4YzU2MzI0N2Q4OTJkZjIwYzZlZmY1YTdiZTY4MWZiMzc1YjIxYTQzNzQ5YjNlMDkyZDY0NjY5Zjc2In0.HO1YbsvUp50GFAXfYDwpbpW8rwaiSI2_PTp38CmhQbU; Userid=e81e719330108226.642068199734845441; currentSid=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJlODFlNzE5MzMwMTA4MjI2LjY0MjA2ODE5OTczNDg0NTQ0MSIsImlzcyI6Imh0dHBzOi8vYWlvdC1ycGMuYXFhcmEuY24iLCJpYXRHbXQ4IjoxNjY3ODE3OTU1LCJqdGkiOiJhZDZjZmMyYTBmZDk0OGIwODkzN2MxMzgzZDQwNGRkYTlmNmExMDFkNjUzNDQ1ZWU5NjM0Yzc2MjIzODYzZWJhIn0.WHEe5H6ImH5FbGA9MByXhSIB6Y3sP1ltmlVsdmtg6kY; currentAccount=xifan.zhao@aqara.com; userInfo=%7B%22accountCategory%22%3A%220%22%2C%22company%22%3A%7B%22companyId%22%3A1%2C%22companyName%22%3A%22%E7%BB%BF%E7%B1%B3%E8%81%94%E5%88%9B%22%7D%2C%22user%22%3A%7B%22avatarUrl%22%3A%22%22%2C%22companyId%22%3A1%2C%22email%22%3A%22xifan.zhao%40aqara.com%22%2C%22nickName%22%3A%22%22%2C%22userType%22%3A0%7D%7D; sidebarStatus=0
|
14
|
+
lang: zh
|
15
|
+
nonce: k9a7yh3vjjyd6vb47ktmcyh50bv3m3c2
|
16
|
+
operate-platform: 40
|
17
|
+
origin: https://intl-lang.aqara.com
|
18
|
+
projectid: 5
|
19
|
+
referer: https://intl-lang.aqara.com/
|
20
|
+
sec-ch-ua: "Google Chrome";v="107", "Chromium";v="107", "Not=A?Brand";v="24"
|
21
|
+
sec-ch-ua-mobile: ?0
|
22
|
+
sec-ch-ua-platform: "macOS"
|
23
|
+
sec-fetch-dest: empty
|
24
|
+
sec-fetch-mode: cors
|
25
|
+
sec-fetch-site: same-origin
|
26
|
+
time: 1668061116811
|
27
|
+
timestamp: 1668061116811
|
28
|
+
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36
|
29
|
+
}
|
30
|
+
def self.makeHeader
|
31
|
+
headerArray = HeaderString.split("\n")
|
32
|
+
header = {}
|
33
|
+
headerArray.each do |str|
|
34
|
+
header[str.split(":",2)[0].strip] = str.split(":",2)[1].strip
|
35
|
+
end
|
36
|
+
header
|
37
|
+
end
|
38
|
+
def self.download
|
39
|
+
|
40
|
+
# puts makeHeader
|
41
|
+
|
42
|
+
#下载文件
|
43
|
+
|
44
|
+
params = {"projectIdList":[5],"langIds":[1,2,3,9,10,11,12,13,14,15],"fileTypeList":["excel"],"auditState":1,"valueState":0,"userId":"","value":"","tagIds":nil,"bizUseTagIds":nil,"pkeys":[]}
|
45
|
+
response = HTTParty.post('https://intl-lang.aqara.com/v1.0/lumi/language/file/export', body: JSON.generate(params), headers:LanguageDownloader.makeHeader)
|
46
|
+
# puts response.body["code"]
|
47
|
+
# unless response.body["code"] === 0
|
48
|
+
# puts "资源包下载失败 code:#{response.body}"
|
49
|
+
# return
|
50
|
+
# end
|
51
|
+
destation_path = "./localize.zip"
|
52
|
+
if File.exist? destation_path
|
53
|
+
FileUtils.rm_rf destation_path
|
54
|
+
end
|
55
|
+
File.open(destation_path,"w") do |io|
|
56
|
+
io.binmode
|
57
|
+
io.write response.body
|
58
|
+
end
|
59
|
+
|
60
|
+
# 解压缩文件到指定目录
|
61
|
+
f_path = ''
|
62
|
+
|
63
|
+
Zip::File.open(destation_path) do |zip_file|
|
64
|
+
zip_file.each do |f|
|
65
|
+
f_path = File.join('./','hit_all.xls')
|
66
|
+
File.delete f_path if File.exist? f_path
|
67
|
+
# FileUtils.mkdir_p(File.dirname(f_path))
|
68
|
+
f.extract(f_path)
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
if File.exist? destation_path
|
73
|
+
FileUtils.rm_rf destation_path
|
74
|
+
end
|
75
|
+
|
76
|
+
f_path
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
class StringElement
|
4
|
+
attr_accessor :langHash
|
5
|
+
attr_accessor :ios_list
|
6
|
+
attr_accessor :android_list
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@langHash = {}
|
10
|
+
@ios_list = []
|
11
|
+
@android_list = []
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_s
|
15
|
+
@langHash.to_s
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Pod
|
2
|
+
class Command
|
3
|
+
# This is an example of a cocoapods plugin adding a top-level subcommand
|
4
|
+
# to the 'pod' command.
|
5
|
+
#
|
6
|
+
# You can also create subcommands of existing or new commands. Say you
|
7
|
+
# wanted to add a subcommand to `list` to show newly deprecated pods,
|
8
|
+
# (e.g. `pod list deprecated`), there are a few things that would need
|
9
|
+
# to change.
|
10
|
+
#
|
11
|
+
# - move this file to `lib/pod/command/list/deprecated.rb` and update
|
12
|
+
# the class to exist in the the Pod::Command::List namespace
|
13
|
+
# - change this class to extend from `List` instead of `Command`. This
|
14
|
+
# tells the plugin system that it is a subcommand of `list`.
|
15
|
+
# - edit `lib/cocoapods_plugins.rb` to require this file
|
16
|
+
#
|
17
|
+
# @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
|
18
|
+
# in the `plugins.json` file, once your plugin is released.
|
19
|
+
#
|
20
|
+
class Localzedloader < Command
|
21
|
+
self.summary = 'Short description of cocoapods-localzedLoader.'
|
22
|
+
|
23
|
+
self.description = <<-DESC
|
24
|
+
Longer description of cocoapods-localzedLoader.
|
25
|
+
DESC
|
26
|
+
|
27
|
+
self.arguments = 'NAME'
|
28
|
+
|
29
|
+
def initialize(argv)
|
30
|
+
@name = argv.shift_argument
|
31
|
+
super
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate!
|
35
|
+
super
|
36
|
+
help! 'A Pod name is required.' unless @name
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
UI.puts "Add your implementation for the cocoapods-localzedLoader plugin in #{__FILE__}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'cocoapods-localzedLoader/command/localzedLoader'
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'cocoapods-localzedLoader/gem_version'
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'cocoapods-localzedLoader/command'
|
2
|
+
require_relative 'ios_bundle_generate'
|
3
|
+
module CocoapodsGitHooks
|
4
|
+
Pod::HooksManager.register('cocoapods-localzedLoader', :pre_install) do |context|
|
5
|
+
BundleGenerater.generate
|
6
|
+
end
|
7
|
+
Pod::HooksManager.register('cocoapods-localzedLoader', :pre_update) do |context|
|
8
|
+
BundleGenerater.generate
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative './LanguageDownloader'
|
3
|
+
require_relative './File_util'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
class BundleGenerater
|
7
|
+
def self.generate
|
8
|
+
# 下载excel
|
9
|
+
f_path = LanguageDownloader.download
|
10
|
+
# unless f_path != nil
|
11
|
+
# return
|
12
|
+
# end
|
13
|
+
# f_path = "./hit_all.xls"
|
14
|
+
# 读取excel到内存
|
15
|
+
file_til = File_util.new
|
16
|
+
hash = file_til.read_excel f_path
|
17
|
+
if File.exist? f_path
|
18
|
+
FileUtils.rm_rf f_path
|
19
|
+
end
|
20
|
+
puts "一共有 #{hash.keys.size} 条文案"
|
21
|
+
|
22
|
+
# 创建文件夹
|
23
|
+
file_til.getLangList.each do |lang|
|
24
|
+
# puts lang
|
25
|
+
localized_file = "./#{lang}.lproj/Localizable.strings"
|
26
|
+
dir = File.dirname localized_file
|
27
|
+
FileUtils.rm_rf localized_file
|
28
|
+
FileUtils.mkdir_p dir
|
29
|
+
end
|
30
|
+
|
31
|
+
#生成资源文件
|
32
|
+
hash.each do |key, stringElement|
|
33
|
+
stringElement.langHash.each do |lang, value|
|
34
|
+
# puts "#{lang}:#{value}"
|
35
|
+
next if lang.downcase === "selfkey"
|
36
|
+
value = self.handleValue value,stringElement
|
37
|
+
localized_file = "./#{lang}.lproj/Localizable.strings"
|
38
|
+
str = %Q|"#{key}" = "#{value}";\n|
|
39
|
+
File.open(localized_file, "a") do |io|
|
40
|
+
io.write str
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
#验证导出的多语言包格式是否正确
|
46
|
+
puts "\e[31m 开始校验多语言包格式\e[0m"
|
47
|
+
file_til.getLangList.each do |lang|
|
48
|
+
localized_file = "./#{lang}.lproj/Localizable.strings"
|
49
|
+
system("plutil #{localized_file}")
|
50
|
+
end
|
51
|
+
|
52
|
+
#拷贝到代码仓库里
|
53
|
+
#查找bundle路径
|
54
|
+
bundPath = ""
|
55
|
+
require 'find'
|
56
|
+
Find.find("./") do |filePath|
|
57
|
+
if filePath.end_with?("LMFramework.bundle")
|
58
|
+
bundPath = filePath
|
59
|
+
break
|
60
|
+
end
|
61
|
+
end
|
62
|
+
unless bundPath != ""
|
63
|
+
puts '没有拷贝'
|
64
|
+
return
|
65
|
+
end
|
66
|
+
|
67
|
+
file_til.getLangList.each do |lang|
|
68
|
+
path = "/#{lang}.lproj/Localizable.strings"
|
69
|
+
FileUtils.mv(".#{path}",bundPath+path)
|
70
|
+
FileUtils.rm_rf File.dirname ".#{path}"
|
71
|
+
end
|
72
|
+
puts "多语言拷贝到目录:#{bundPath}"
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
#对多语言的value进行处理
|
78
|
+
def self.handleValue(value='',stringElement = nil)
|
79
|
+
#替换{=}
|
80
|
+
value = value.gsub(/{#}/,"%@")
|
81
|
+
value = value.gsub(/""/,'"')
|
82
|
+
value = value.gsub(/\\"/,'"')
|
83
|
+
value = value.gsub(/""/,'"')
|
84
|
+
value = value.gsub(/"/,'\"')
|
85
|
+
#fix "common_time_day_with_space" = "\ day \";
|
86
|
+
if value.end_with?"\\"
|
87
|
+
value = value.chop
|
88
|
+
end
|
89
|
+
if value.end_with?"\\"
|
90
|
+
value = value.chop
|
91
|
+
end
|
92
|
+
value
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
#
|
97
|
+
# BundleGenerater.generate
|
98
|
+
# ios_list = ["%@","%d"]
|
99
|
+
# str = "{#}盏灯开着,真的吗{#}"
|
100
|
+
# i = -1
|
101
|
+
# str = str.gsub(/{#}/) do |matched|
|
102
|
+
# i+=1
|
103
|
+
# ios_list[i]
|
104
|
+
# end
|
105
|
+
#
|
106
|
+
# p str
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: cocoapods-localzedLoader
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- jeremylu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-01-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: A short description of cocoapods-localzedLoader.
|
42
|
+
email:
|
43
|
+
- 1509028992@qq.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- lib/File_util.rb
|
49
|
+
- lib/LanguageDownloader.rb
|
50
|
+
- lib/StringElement.rb
|
51
|
+
- lib/cocoapods-localzedLoader.rb
|
52
|
+
- lib/cocoapods-localzedLoader/command.rb
|
53
|
+
- lib/cocoapods-localzedLoader/command/localzedLoader.rb
|
54
|
+
- lib/cocoapods-localzedLoader/gem_version.rb
|
55
|
+
- lib/cocoapods_plugin.rb
|
56
|
+
- lib/ios_bundle_generate.rb
|
57
|
+
homepage: https://github.com/EXAMPLE/cocoapods-localzedLoader
|
58
|
+
licenses:
|
59
|
+
- MIT
|
60
|
+
metadata: {}
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
require_paths:
|
64
|
+
- lib
|
65
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
requirements: []
|
76
|
+
rubygems_version: 3.3.26
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: A longer description of cocoapods-localzedLoader.
|
80
|
+
test_files: []
|