class Fastlane::Actions::LokaliseUploadAction

Public Class Methods

authors() click to toggle source
# File Lanes/actions/android/lokalise_upload.rb, line 89
def self.authors
  "simonkarmy"
end
available_options() click to toggle source
# File Lanes/actions/android/lokalise_upload.rb, line 64
def self.available_options
  [
      FastlaneCore::ConfigItem.new(key: :api_token,
                                   env_name: "LOKALISE_API_TOKEN",
                                   description: "API Token for Lokalise",
                                   verify_block: proc do |value|
                                     UI.user_error! "No API token for Lokalise given, pass using `api_token: 'token'`" unless (value and not value.empty?)
                                   end),
      FastlaneCore::ConfigItem.new(key: :project_identifier,
                                   env_name: "LOKALISE_PROJECT_ID",
                                   description: "Lokalise Project ID",
                                   verify_block: proc do |value|
                                     UI.user_error! "No Project Identifier for Lokalise given, pass using `project_identifier: 'identifier'`" unless (value and not value.empty?)
                                   end),
      FastlaneCore::ConfigItem.new(key: :languages,
                                   description: "Languages to download",
                                   optional: true,
                                   is_string: false,
                                   verify_block: proc do |value|
                                     UI.user_error! "Language codes should be passed as array" unless value.kind_of? Array
                                   end),

  ]
end
description() click to toggle source

@!group Documentation

# File Lanes/actions/android/lokalise_upload.rb, line 60
def self.description
  "Upload Android strings.xml to Lokalise"
end
is_supported?(platform) click to toggle source
# File Lanes/actions/android/lokalise_upload.rb, line 93
def self.is_supported?(platform)
  [:android].include? platform
end
run(params) click to toggle source
# File Lanes/actions/android/lokalise_upload.rb, line 4
def self.run(params)
  require 'net/http'
  require 'json'
  require 'base64'

  token = params[:api_token]
  project_identifier = params[:project_identifier]
  languages = params[:languages]

  for lang_code in languages do
    file_path = (lang_code == "en" ? "./app/src/main/res/values/strings.xml" : "./app/src/main/res/values-#{lang_code}/strings.xml")
    self.upload_lang(token, project_identifier, lang_code, file_path)
  end
end
snapshot(params) click to toggle source
# File Lanes/actions/lokalise_upload.rb, line 65
def self.snapshot(params)
  require 'net/http'
  project_identifier = params[:project_identifier]
  uri = URI("https://api.lokalise.com/api2/projects/#{project_identifier}/snapshots")
  request_data = {
    title: params[:snapshot_version],
  }
  request = Net::HTTP::Post.new(uri)
  request.body = request_data.to_json
  request['X-Api-Token'] = params[:api_token]
  request['Content-Type'] = 'application/json'
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  response = http.request(request)
  jsonResponse = JSON.parse(response.body)
  puts jsonResponse
end
upload(lang, name, data, params) click to toggle source
# File Lanes/actions/lokalise_upload.rb, line 83
def self.upload(lang, name, data, params)
  require 'net/http'
  token = params[:api_token]
  project_identifier = params[:project_identifier]
  if lang == "es-419"
    lang = "es_419"
  end
  puts "Lang: #{lang} #{name}"
  request_data = {
    filename: name,
    data: data,
    lang_iso: lang,
    cleanup_mode: true,
  }
  uri = URI("https://api.lokalise.com/api2/projects/#{project_identifier}/files/upload")
  request = Net::HTTP::Post.new(uri)
  request.body = request_data.to_json
  request['X-Api-Token'] = token
  request['Content-Type'] = 'application/json'
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  response = http.request(request)
  jsonResponse = JSON.parse(response.body)
  puts jsonResponse

end
upload_lang(token, project_id, lang_code, lang_file_path) click to toggle source
# File Lanes/actions/android/lokalise_upload.rb, line 19
def self.upload_lang(token, project_id, lang_code, lang_file_path)

  file_data = File.open(lang_file_path, "r").read
  file_data_64 = Base64.encode64(file_data).delete("\n")

  request_data = {
      filename: "strings.xml",
      data: file_data_64 ,
      lang_iso: lang_code,
      convert_placeholders: true ,
      slashn_to_linebreak: true
  }

  uri = URI("https://api.lokalise.com/api2/projects/#{project_id}/files/upload")
  request = Net::HTTP::Post.new(uri)
  request["content-type"] = 'application/json'
  request["x-api-token"] = token
  request.body = request_data.to_json

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  response = http.request(request)

  jsonResponse = JSON.parse(response.body)
  UI.error "Bad response 🉐\n#{response.body}" unless jsonResponse.kind_of? Hash
  if jsonResponse["project_id"].kind_of?(String)  then
    UI.message "Uploaded localization file for #{lang_code} successfully #{jsonResponse["result"]}"
  elsif jsonResponse["error"]["code"].kind_of?(Integer)
    code = jsonResponse["error"]["code"]
    message = jsonResponse["error"]["message"]
    UI.error "Response error code #{code} (#{message}) 📟"
  else
    UI.error "Bad response 🉐\n#{jsonResponse}"
  end
end