fastlane-plugin-google_sheet_localize 0.1.5 → 0.1.6
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:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 87a4897b4267a2b1ec85e0decd035d4bbcaeec53b481a9c9d672476aad6065b6
         | 
| 4 | 
            +
              data.tar.gz: ea0718e1d745c797e1ccf9c79d08dd299f8848381521652f4a524ad5f2a2ff47
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e252a54b79b9728660ad3307d99caaec6500219fd11dbd4ffbf437340a9ae791be4e2879278c2f77fadfb1ecc5c787eac168883f0db2ced044ffeca68d67e031
         | 
| 7 | 
            +
              data.tar.gz: 06e2fbf3ab587f03d94fd915abd7268daabaeef07a3a4bc9738aaf78eb87a48bb940de0ecfc3524ac9a123138cc64f01d8696d592bd2ee915660ec8361a023c8
         | 
| @@ -13,41 +13,42 @@ module Fastlane | |
| 13 13 | 
             
                    tabs = params[:tabs]
         | 
| 14 14 | 
             
                    platform = params[:platform]
         | 
| 15 15 | 
             
                    path = params[:localization_path]
         | 
| 16 | 
            +
                    language_titles = params[:language_titles]
         | 
| 17 | 
            +
                    default_language = params[:default_language]
         | 
| 16 18 |  | 
| 17 19 | 
             
                    spreadsheet = session.spreadsheet_by_url(spreadsheet_id)
         | 
| 18 | 
            -
             | 
| 19 | 
            -
                    # Get the first worksheet
         | 
| 20 20 | 
             
                    worksheet = spreadsheet.worksheets.first
         | 
| 21 21 |  | 
| 22 | 
            -
                    languages = self.numberOfLanguages(worksheet)
         | 
| 23 | 
            -
             | 
| 24 22 | 
             
                    result = []
         | 
| 25 23 |  | 
| 26 | 
            -
                    for i in  | 
| 24 | 
            +
                    for i in 0..worksheet.max_cols
         | 
| 25 | 
            +
             | 
| 27 26 | 
             
                      title = worksheet.rows[0][i]
         | 
| 28 27 |  | 
| 29 | 
            -
                       | 
| 30 | 
            -
                        'language' => title,
         | 
| 31 | 
            -
                        'items' => []
         | 
| 32 | 
            -
                      }
         | 
| 28 | 
            +
                      if language_titles.include?(title)
         | 
| 33 29 |  | 
| 34 | 
            -
             | 
| 30 | 
            +
                        language = {
         | 
| 31 | 
            +
                          'language' => title,
         | 
| 32 | 
            +
                          'items' => []
         | 
| 33 | 
            +
                        }
         | 
| 35 34 |  | 
| 36 | 
            -
             | 
| 37 | 
            -
                        filterdWorksheets = spreadsheet.worksheets
         | 
| 38 | 
            -
                      else
         | 
| 39 | 
            -
                        filterdWorksheets = spreadsheet.worksheets.select { |item| tabs.include?(item.title) }
         | 
| 40 | 
            -
                      end
         | 
| 35 | 
            +
                        filterdWorksheets = []
         | 
| 41 36 |  | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
                         | 
| 45 | 
            -
             | 
| 37 | 
            +
                        if tabs.count == 0
         | 
| 38 | 
            +
                          filterdWorksheets = spreadsheet.worksheets
         | 
| 39 | 
            +
                        else
         | 
| 40 | 
            +
                          filterdWorksheets = spreadsheet.worksheets.select { |item| tabs.include?(item.title) }
         | 
| 41 | 
            +
                        end
         | 
| 46 42 |  | 
| 47 | 
            -
             | 
| 43 | 
            +
                        filterdWorksheets.each { |worksheet|
         | 
| 44 | 
            +
                          contentRows = worksheet.rows.drop(1)
         | 
| 45 | 
            +
                          language['items'].concat(self.generateJSONObject(contentRows, i))
         | 
| 46 | 
            +
                        }
         | 
| 48 47 |  | 
| 48 | 
            +
                        result.push(language)
         | 
| 49 | 
            +
                      end
         | 
| 49 50 | 
             
                    end
         | 
| 50 | 
            -
                    self.createFiles(result, platform, path)
         | 
| 51 | 
            +
                    self.createFiles(result, platform, path, default_language)
         | 
| 51 52 | 
             
                  end
         | 
| 52 53 |  | 
| 53 54 | 
             
                  def self.generateJSONObject(contentRows, index)
         | 
| @@ -64,12 +65,6 @@ module Fastlane | |
| 64 65 |  | 
| 65 66 | 
             
                  end
         | 
| 66 67 |  | 
| 67 | 
            -
                  def self.writeToJSONFile(languages)
         | 
| 68 | 
            -
                    File.open("output.json","w") do |f|
         | 
| 69 | 
            -
                      f.write(JSON.pretty_generate(languages))
         | 
| 70 | 
            -
                    end
         | 
| 71 | 
            -
                  end
         | 
| 72 | 
            -
             | 
| 73 68 | 
             
                  def self.generateSingleObject(row, column)
         | 
| 74 69 | 
             
                    identifierIos = row[0]
         | 
| 75 70 | 
             
                    identifierAndroid = row[1]
         | 
| @@ -87,8 +82,15 @@ module Fastlane | |
| 87 82 |  | 
| 88 83 | 
             
                  end
         | 
| 89 84 |  | 
| 90 | 
            -
                  def  | 
| 91 | 
            -
             | 
| 85 | 
            +
                  def filterUnusedRows(items, identifier)
         | 
| 86 | 
            +
                    return items.select { |item|
         | 
| 87 | 
            +
                        iosIdentifier = item[identifier]
         | 
| 88 | 
            +
                        iosIdentifier != "NR" && iosIdentifier != ""
         | 
| 89 | 
            +
                    }
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  def self.createFiles(languages, platform, destinationPath, defaultLanguage)
         | 
| 93 | 
            +
                      self.createFilesForLanguages(languages, platform, destinationPath, defaultLanguage)
         | 
| 92 94 |  | 
| 93 95 | 
             
                      if platform == "ios"
         | 
| 94 96 |  | 
| @@ -135,35 +137,43 @@ module Fastlane | |
| 135 137 | 
             
                      end
         | 
| 136 138 | 
             
                  end
         | 
| 137 139 |  | 
| 138 | 
            -
                  def self. | 
| 139 | 
            -
                    if platform == "ios"
         | 
| 140 | 
            +
                  def self.createFilesForLanguages(languages, platform, destinationPath, defaultLanguage)
         | 
| 140 141 |  | 
| 141 | 
            -
             | 
| 142 | 
            -
                      swiftFilepath = "#{destinationPath}/#{swiftFilename}"
         | 
| 142 | 
            +
                    languages.each { |language|
         | 
| 143 143 |  | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
                      }
         | 
| 144 | 
            +
                    if platform == "ios"
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                      filteredItems = self.filterUnusedRows(language["items"],'identifierIos')
         | 
| 148 147 |  | 
| 149 148 | 
             
                      filename = "Localizable.strings"
         | 
| 150 149 | 
             
                      filepath = "#{destinationPath}/#{language['language']}.lproj/#{filename}"
         | 
| 151 | 
            -
                      FileUtils.mkdir_p language['language']
         | 
| 150 | 
            +
                      FileUtils.mkdir_p "#{destinationPath}/#{language['language']}.lproj"
         | 
| 152 151 | 
             
                      File.open(filepath, "w") do |f|
         | 
| 153 | 
            -
                        filteredItems. | 
| 152 | 
            +
                        filteredItems.each_with_index { |item, index|
         | 
| 154 153 |  | 
| 155 154 | 
             
                          text = self.mapInvalidPlaceholder(item['text'])
         | 
| 156 155 | 
             
                          comment = item['comment']
         | 
| 157 156 | 
             
                          identifier = item['identifierIos']
         | 
| 158 157 |  | 
| 159 158 | 
             
                          line = ""
         | 
| 160 | 
            -
             | 
| 161 159 | 
             
                          if identifier.include?('//')
         | 
| 162 160 | 
             
                            line = "\n\n#{identifier}\n"
         | 
| 163 161 | 
             
                          else
         | 
| 162 | 
            +
             | 
| 163 | 
            +
                            if text == "" || text == "TBD"
         | 
| 164 | 
            +
                              default_language_object = languages.select { |languageItem| languageItem['language'] == defaultLanguage }.first["items"]
         | 
| 165 | 
            +
                              default_language_object = self.filterUnusedRows(default_language_object,'identifierIos')
         | 
| 166 | 
            +
             | 
| 167 | 
            +
                              defaultLanguageText = default_language_object[index]['text']
         | 
| 168 | 
            +
                              puts "found empty text for identifier: #{identifier} for language:#{language['language']}, replaceing it with #{defaultLanguageText}"
         | 
| 169 | 
            +
                              text = self.mapInvalidPlaceholder(defaultLanguageText)
         | 
| 170 | 
            +
                            end
         | 
| 171 | 
            +
             | 
| 164 172 | 
             
                            line = "\"#{identifier}\" = \"#{text}\";"
         | 
| 165 173 | 
             
                          if !comment.to_s.empty?
         | 
| 166 174 | 
             
                             line = line + " //#{comment}\n"
         | 
| 175 | 
            +
                           else
         | 
| 176 | 
            +
                             line = line + "\n"
         | 
| 167 177 | 
             
                          end
         | 
| 168 178 | 
             
                          end
         | 
| 169 179 |  | 
| @@ -173,16 +183,40 @@ module Fastlane | |
| 173 183 | 
             
                    end
         | 
| 174 184 |  | 
| 175 185 | 
             
                    if platform == "android"
         | 
| 176 | 
            -
                       | 
| 177 | 
            -
             | 
| 186 | 
            +
                      languageDir = language['language']
         | 
| 187 | 
            +
             | 
| 188 | 
            +
                      if languageDir == "en"
         | 
| 189 | 
            +
                        languageDir = "values"
         | 
| 190 | 
            +
                      else
         | 
| 191 | 
            +
                        languageDir = "values-#{languageDir}"
         | 
| 192 | 
            +
                      end
         | 
| 193 | 
            +
             | 
| 194 | 
            +
                      FileUtils.mkdir_p "#{destinationPath}/#{languageDir}"
         | 
| 195 | 
            +
                      File.open("#{destinationPath}/#{languageDir}/strings.xml", "w") do |f|
         | 
| 178 196 | 
             
                        f.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
         | 
| 179 197 | 
             
                        f.write("<resources>\n")
         | 
| 180 198 | 
             
                        language["items"].each { |item|
         | 
| 181 | 
            -
             | 
| 199 | 
            +
             | 
| 200 | 
            +
                          comment = item['comment']
         | 
| 201 | 
            +
                          identifier = item['identifierAndroid']
         | 
| 202 | 
            +
                          text = item['text']
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                          if !identifier.to_s.empty? && identifier != "NR"
         | 
| 205 | 
            +
                            line = ""
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                            if !comment.to_s.empty?
         | 
| 208 | 
            +
                              line = line + "\t<!--#{comment}-->\n"
         | 
| 209 | 
            +
                            end
         | 
| 210 | 
            +
             | 
| 211 | 
            +
                            line = line + "\t<string name=\"#{identifier}\"><![CDATA[#{text}]]></string>\n"
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                            f.write(line)
         | 
| 214 | 
            +
                          end
         | 
| 182 215 | 
             
                        }
         | 
| 183 216 | 
             
                        f.write("</resources>\n")
         | 
| 184 217 | 
             
                      end
         | 
| 185 218 | 
             
                    end
         | 
| 219 | 
            +
                    }
         | 
| 186 220 | 
             
                  end
         | 
| 187 221 |  | 
| 188 222 | 
             
                  def self.createiOSFileEndString()
         | 
| @@ -243,15 +277,10 @@ module Fastlane | |
| 243 277 | 
             
                  end
         | 
| 244 278 |  | 
| 245 279 | 
             
                  def self.mapInvalidPlaceholder(text)
         | 
| 246 | 
            -
                    filtered = text.gsub('%s', '%@')
         | 
| 280 | 
            +
                    filtered = text.gsub('%s', '%@').gsub('"', '\"')
         | 
| 247 281 | 
             
                    return filtered
         | 
| 248 282 | 
             
                  end
         | 
| 249 283 |  | 
| 250 | 
            -
                  def self.numberOfLanguages(worksheet)
         | 
| 251 | 
            -
                    i = worksheet.num_cols
         | 
| 252 | 
            -
                    return i - 3
         | 
| 253 | 
            -
                  end
         | 
| 254 | 
            -
             | 
| 255 284 | 
             
                  def self.description
         | 
| 256 285 | 
             
                    "Creates .strings files for iOS and strings.xml files for Android"
         | 
| 257 286 | 
             
                  end
         | 
| @@ -292,6 +321,16 @@ module Fastlane | |
| 292 321 | 
             
                                           description: "Array of all Google Sheet Tabs",
         | 
| 293 322 | 
             
                                              optional: false,
         | 
| 294 323 | 
             
                                                  type: Array),
         | 
| 324 | 
            +
                      FastlaneCore::ConfigItem.new(key: :language_titles,
         | 
| 325 | 
            +
                                              env_name: "LANGUAGE_TITLES",
         | 
| 326 | 
            +
                                           description: "Alle language titles",
         | 
| 327 | 
            +
                                              optional: false,
         | 
| 328 | 
            +
                                                  type: Array),
         | 
| 329 | 
            +
                      FastlaneCore::ConfigItem.new(key: :default_language,
         | 
| 330 | 
            +
                                              env_name: "DEFAULT_LANGUAGE",
         | 
| 331 | 
            +
                                           description: "Default Language",
         | 
| 332 | 
            +
                                              optional: false,
         | 
| 333 | 
            +
                                                  type: String),
         | 
| 295 334 | 
             
                      FastlaneCore::ConfigItem.new(key: :localization_path,
         | 
| 296 335 | 
             
                                              env_name: "LOCALIZATION_PATH",
         | 
| 297 336 | 
             
                                           description: "Output path",
         |