terrestrial-cli 0.6.1 → 0.6.2
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 +4 -4
 - data/lib/terrestrial/cli.rb +3 -0
 - data/lib/terrestrial/cli/android_xml_formatter.rb +1 -1
 - data/lib/terrestrial/cli/detects_project_type.rb +2 -0
 - data/lib/terrestrial/cli/editor.rb +1 -1
 - data/lib/terrestrial/cli/editor/android_xml.rb +1 -1
 - data/lib/terrestrial/cli/editor/{printer.rb → custom_printer.rb} +11 -11
 - data/lib/terrestrial/cli/editor/storyboard.rb +35 -17
 - data/lib/terrestrial/cli/flight.rb +1 -6
 - data/lib/terrestrial/cli/init.rb +3 -1
 - data/lib/terrestrial/cli/language_name.rb +64 -0
 - data/lib/terrestrial/cli/pull.rb +9 -0
 - data/lib/terrestrial/cli/pull/processes_translations.rb +6 -0
 - data/lib/terrestrial/cli/string_registry.rb +2 -0
 - data/lib/terrestrial/cli/unity_formatter.rb +20 -0
 - data/lib/terrestrial/cli/unity_parser.rb +17 -0
 - data/lib/terrestrial/cli/version.rb +1 -1
 - metadata +6 -4
 - data/lib/terrestrial/creates_terrestrial_yml.rb +0 -9
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: ec8435d8164544f6ad8189497150081967d15eeb
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 6d009683f9fa3f714afba2565251a0f595528167
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: ebe46a52b38c1b783d9dcce80a59c96ea7aca70e1d9f46f08b92eb4b27b7004f465270492e01f6e860462d8dfdb8983076ee7e9b6b14fd280a6441db996c3aa8
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2ae0304f7b6ff1eac841e28d6845cba14a8ccaf65ca3c0dd2351e98d7c9181690dfc8363f440cbdac9d331a9bda96523c68c9f3bf7817d3d50461254c846a14c
         
     | 
    
        data/lib/terrestrial/cli.rb
    CHANGED
    
    | 
         @@ -10,6 +10,7 @@ require "terrestrial/cli/version_checker" 
     | 
|
| 
       10 
10 
     | 
    
         
             
            require "terrestrial/cli/version"
         
     | 
| 
       11 
11 
     | 
    
         
             
            require "terrestrial/cli/variable_normalizer"
         
     | 
| 
       12 
12 
     | 
    
         
             
            require "terrestrial/cli/terminal_ui"
         
     | 
| 
      
 13 
     | 
    
         
            +
            require "terrestrial/cli/language_name"
         
     | 
| 
       13 
14 
     | 
    
         
             
            require "terrestrial/cli/entry_collection_differ"
         
     | 
| 
       14 
15 
     | 
    
         
             
            require "terrestrial/cli/detects_project_type"
         
     | 
| 
       15 
16 
     | 
    
         
             
            require "terrestrial/cli/file_picker"
         
     | 
| 
         @@ -20,6 +21,8 @@ require "terrestrial/cli/android_xml_parser" 
     | 
|
| 
       20 
21 
     | 
    
         
             
            require "terrestrial/cli/android_xml_formatter"
         
     | 
| 
       21 
22 
     | 
    
         
             
            require "terrestrial/cli/dot_strings_parser"
         
     | 
| 
       22 
23 
     | 
    
         
             
            require "terrestrial/cli/dot_strings_formatter"
         
     | 
| 
      
 24 
     | 
    
         
            +
            require "terrestrial/cli/unity_parser"
         
     | 
| 
      
 25 
     | 
    
         
            +
            require "terrestrial/cli/unity_formatter"
         
     | 
| 
       23 
26 
     | 
    
         
             
            require "terrestrial/cli/parser"
         
     | 
| 
       24 
27 
     | 
    
         
             
            require "terrestrial/cli/editor"
         
     | 
| 
       25 
28 
     | 
    
         
             
            require "terrestrial/cli/engine_mapper"
         
     | 
| 
         @@ -28,7 +28,7 @@ module Terrestrial 
     | 
|
| 
       28 
28 
     | 
    
         
             
                                                        %Q[#@expanded_name="#{to_s().gsub(/"/, '"')}"]
         
     | 
| 
       29 
29 
     | 
    
         
             
                                                      end
         
     | 
| 
       30 
30 
     | 
    
         
             
                                                  ^)
         
     | 
| 
       31 
     | 
    
         
            -
                    formatter =  
     | 
| 
      
 31 
     | 
    
         
            +
                    formatter = CustomPrinter.new(4) # See editor/printer
         
     | 
| 
       32 
32 
     | 
    
         
             
                    formatter.compact = true
         
     | 
| 
       33 
33 
     | 
    
         
             
                    formatter.write(document,"") + "\n"
         
     | 
| 
       34 
34 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # Common fixes for editors that use 
         
     | 
| 
       2 
2 
     | 
    
         
             
            # REXML
         
     | 
| 
       3 
     | 
    
         
            -
            class  
     | 
| 
      
 3 
     | 
    
         
            +
            class CustomPrinter < REXML::Formatters::Pretty
         
     | 
| 
       4 
4 
     | 
    
         
             
              # The point of this little thing is to keep
         
     | 
| 
       5 
5 
     | 
    
         
             
              # the order of attributes when we flush the 
         
     | 
| 
       6 
6 
     | 
    
         
             
              # storyboard back to disk.
         
     | 
| 
         @@ -14,17 +14,17 @@ class Printer < REXML::Formatters::Pretty 
     | 
|
| 
       14 
14 
     | 
    
         
             
              #   fmt = OrderedAttributes.new
         
     | 
| 
       15 
15 
     | 
    
         
             
              #   fmt.write(xmldoc, $stdout)
         
     | 
| 
       16 
16 
     | 
    
         
             
              #
         
     | 
| 
       17 
     | 
    
         
            -
              def write_element(elm, out)
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
             
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
      
 17 
     | 
    
         
            +
              # def write_element(elm, out)
         
     | 
| 
      
 18 
     | 
    
         
            +
              #   att = elm.attributes
         
     | 
| 
      
 19 
     | 
    
         
            +
              #   class <<att
         
     | 
| 
      
 20 
     | 
    
         
            +
              #     alias _each_attribute each_attribute
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
             
     | 
| 
       26 
     | 
    
         
            -
             
     | 
| 
       27 
     | 
    
         
            -
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
              #     def each_attribute(&b)
         
     | 
| 
      
 23 
     | 
    
         
            +
              #       to_enum(:_each_attribute).sort_by {|x| x.name}.each(&b)
         
     | 
| 
      
 24 
     | 
    
         
            +
              #     end
         
     | 
| 
      
 25 
     | 
    
         
            +
              #   end
         
     | 
| 
      
 26 
     | 
    
         
            +
              #   super(elm, out)
         
     | 
| 
      
 27 
     | 
    
         
            +
              # end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
29 
     | 
    
         
             
              # This genious is here to stop the damn thing from wrapping
         
     | 
| 
       30 
30 
     | 
    
         
             
              # lines over 80 chars long >.<
         
     | 
| 
         @@ -24,63 +24,81 @@ module Terrestrial 
     | 
|
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                    def initialize(entry)
         
     | 
| 
       26 
26 
     | 
    
         
             
                      @path          = entry.file
         
     | 
| 
      
 27 
     | 
    
         
            +
                      @document      = REXML::Document.new(File.new(@path))
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       27 
29 
     | 
    
         
             
                      @type          = entry.type
         
     | 
| 
       28 
30 
     | 
    
         
             
                      @string        = entry.string
         
     | 
| 
       29 
31 
     | 
    
         
             
                      @storyboard_id = entry.metadata["storyboard_element_id"]
         
     | 
| 
       30 
32 
     | 
    
         
             
                      @identifier    = entry.identifier
         
     | 
| 
       31 
33 
     | 
    
         | 
| 
       32 
     | 
    
         
            -
                       
     | 
| 
      
 34 
     | 
    
         
            +
                      set_document_to_double_quotes
         
     | 
| 
       33 
35 
     | 
    
         
             
                    end
         
     | 
| 
       34 
36 
     | 
    
         | 
| 
       35 
37 
     | 
    
         
             
                    def self.insert_runtime_attribute(entry)
         
     | 
| 
       36 
     | 
    
         
            -
                      self.new(entry) 
     | 
| 
      
 38 
     | 
    
         
            +
                      editor = self.new(entry)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      editor.insert_attribute
         
     | 
| 
      
 40 
     | 
    
         
            +
                      editor.save_document
         
     | 
| 
       37 
41 
     | 
    
         
             
                    end
         
     | 
| 
       38 
42 
     | 
    
         | 
| 
       39 
43 
     | 
    
         
             
                    def insert_attribute
         
     | 
| 
       40 
     | 
    
         
            -
                      node = find_node
         
     | 
| 
      
 44 
     | 
    
         
            +
                      node = find_node(@storyboard_id, @type)
         
     | 
| 
       41 
45 
     | 
    
         | 
| 
       42 
46 
     | 
    
         
             
                      # TODO, There was a case when "node" was nil in this point, after
         
     | 
| 
       43 
47 
     | 
    
         
             
                      # trying to find it by type + ID.
         
     | 
| 
       44 
48 
     | 
    
         
             
                      #
         
     | 
| 
       45 
49 
     | 
    
         
             
                      # Keep an eye out for it to see if reproducible
         
     | 
| 
       46 
50 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
                      node. 
     | 
| 
      
 51 
     | 
    
         
            +
                      if node.nil?
         
     | 
| 
      
 52 
     | 
    
         
            +
                        puts "Warning: Was not able to find #{@type} with string '#{@string}' and ID '#{@storyboard_id}' in #{@path}."
         
     | 
| 
      
 53 
     | 
    
         
            +
                        puts "It will not be added to your Localizable.strings file automatically."
         
     | 
| 
      
 54 
     | 
    
         
            +
                      else
         
     | 
| 
      
 55 
     | 
    
         
            +
                        node.add(create_element)
         
     | 
| 
      
 56 
     | 
    
         
            +
                      end
         
     | 
| 
       48 
57 
     | 
    
         
             
                      refresh_document(node)
         
     | 
| 
       49 
     | 
    
         
            -
                      save_document
         
     | 
| 
       50 
58 
     | 
    
         
             
                    end
         
     | 
| 
       51 
59 
     | 
    
         | 
| 
       52 
     | 
    
         
            -
                     
     | 
| 
      
 60 
     | 
    
         
            +
                    def find_node(id, type)
         
     | 
| 
      
 61 
     | 
    
         
            +
                      REXML::XPath.first(@document, query_for(type, storyboard_id: id))
         
     | 
| 
      
 62 
     | 
    
         
            +
                    end
         
     | 
| 
       53 
63 
     | 
    
         | 
| 
       54 
     | 
    
         
            -
                    def  
     | 
| 
       55 
     | 
    
         
            -
                       
     | 
| 
      
 64 
     | 
    
         
            +
                    def save_document
         
     | 
| 
      
 65 
     | 
    
         
            +
                      File.open(@path, "w") do |f|
         
     | 
| 
      
 66 
     | 
    
         
            +
                        f.write format_document
         
     | 
| 
      
 67 
     | 
    
         
            +
                      end 
         
     | 
| 
      
 68 
     | 
    
         
            +
                    end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                    def format_document
         
     | 
| 
      
 71 
     | 
    
         
            +
                      printer = CustomPrinter.new(4)
         
     | 
| 
      
 72 
     | 
    
         
            +
                      printer.width = 1000
         
     | 
| 
      
 73 
     | 
    
         
            +
                      printer.compact = true
         
     | 
| 
      
 74 
     | 
    
         
            +
                      printer.write(@document.root, "")
         
     | 
| 
       56 
75 
     | 
    
         
             
                    end
         
     | 
| 
       57 
76 
     | 
    
         | 
| 
      
 77 
     | 
    
         
            +
                    private
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
       58 
79 
     | 
    
         
             
                    def refresh_document(node)
         
     | 
| 
       59 
80 
     | 
    
         
             
                      # This is a bit ridiculous, but necessary because
         
     | 
| 
       60 
81 
     | 
    
         
             
                      # &*£(*$)£@*$!£ REXML
         
     | 
| 
       61 
82 
     | 
    
         | 
| 
       62 
83 
     | 
    
         
             
                      @document = REXML::Document.new(node.document.to_s)
         
     | 
| 
       63 
     | 
    
         
            -
             
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                    def save_document
         
     | 
| 
       66 
     | 
    
         
            -
                      File.open(@path, "w") do |f|
         
     | 
| 
       67 
     | 
    
         
            -
                        printer = Printer.new(2)
         
     | 
| 
       68 
     | 
    
         
            -
                        printer.width = 1000
         
     | 
| 
       69 
     | 
    
         
            -
                        printer.write(@document, f)
         
     | 
| 
       70 
     | 
    
         
            -
                      end 
         
     | 
| 
      
 84 
     | 
    
         
            +
                      set_document_to_double_quotes
         
     | 
| 
       71 
85 
     | 
    
         
             
                    end
         
     | 
| 
       72 
86 
     | 
    
         | 
| 
       73 
87 
     | 
    
         
             
                    def query_for(type, storyboard_id: "")
         
     | 
| 
       74 
88 
     | 
    
         
             
                      # Find element of said type, with the ID, that does not
         
     | 
| 
       75 
89 
     | 
    
         
             
                      # have a userDefinedRuntimeAttribute as a child
         
     | 
| 
       76 
90 
     | 
    
         | 
| 
       77 
     | 
    
         
            -
                      QUERIES[type] + "[@id=\"#{storyboard_id}\" and not(userDefinedRuntimeAttributes)] 
     | 
| 
      
 91 
     | 
    
         
            +
                      QUERIES[type] + "[@id=\"#{storyboard_id}\" and not(userDefinedRuntimeAttributes[@Terrestrial])]"
         
     | 
| 
       78 
92 
     | 
    
         
             
                    end
         
     | 
| 
       79 
93 
     | 
    
         | 
| 
       80 
94 
     | 
    
         
             
                    def text_attribute(type)
         
     | 
| 
       81 
95 
     | 
    
         
             
                      Parser::Storyboard::Engine::TEXT_ATTRIBUTE[type]
         
     | 
| 
       82 
96 
     | 
    
         
             
                    end
         
     | 
| 
       83 
97 
     | 
    
         | 
| 
      
 98 
     | 
    
         
            +
                    def set_document_to_double_quotes
         
     | 
| 
      
 99 
     | 
    
         
            +
                      @document.context[:attribute_quote] = :quote
         
     | 
| 
      
 100 
     | 
    
         
            +
                    end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
       84 
102 
     | 
    
         
             
                    def create_element
         
     | 
| 
       85 
103 
     | 
    
         
             
                      REXML::Element.new("userDefinedRuntimeAttributes")
         
     | 
| 
       86 
104 
     | 
    
         
             
                            .add_element("userDefinedRuntimeAttribute", 
         
     | 
| 
         @@ -68,12 +68,7 @@ module Terrestrial 
     | 
|
| 
       68 
68 
     | 
    
         
             
                    if Config[:platform] == "ios"
         
     | 
| 
       69 
69 
     | 
    
         
             
                      puts "Looks like you already have Localizable.strings files."
         
     | 
| 
       70 
70 
     | 
    
         
             
                      puts "'flight' scans your source code for human readable strings that have not been translated"
         
     | 
| 
       71 
     | 
    
         
            -
                      puts "and helps you quickstart your internaionalization process."
         
     | 
| 
       72 
     | 
    
         
            -
                      puts ""
         
     | 
| 
       73 
     | 
    
         
            -
                      puts "If you want to new strings into your .strings file, run 'terrestrial gen'. It will:"
         
     | 
| 
       74 
     | 
    
         
            -
                      puts "  1. Scan your source code for .translated and NSLocalizedString calls."
         
     | 
| 
       75 
     | 
    
         
            -
                      puts "  2. Determine if the strings already exist in Localizable.strings."
         
     | 
| 
       76 
     | 
    
         
            -
                      puts "  3. Append any new strings to your base Localizable.strings."
         
     | 
| 
      
 71 
     | 
    
         
            +
                      puts "and helps you quickstart your internaionalization process and is works with unlocalized projects only."
         
     | 
| 
       77 
72 
     | 
    
         
             
                      puts ""
         
     | 
| 
       78 
73 
     | 
    
         
             
                      puts "For more information, visit http://docs.terrestrial.io/, or jump on our Slack via https://terrestrial-slack.herokuapp.com/"
         
     | 
| 
       79 
74 
     | 
    
         
             
                      abort
         
     | 
    
        data/lib/terrestrial/cli/init.rb
    CHANGED
    
    | 
         @@ -50,7 +50,7 @@ module Terrestrial 
     | 
|
| 
       50 
50 
     | 
    
         
             
                      puts "For more information, see http://docs.terrestrial.io or jump on Slack at https://terrestrial-slack.herokuapp.com/ if you have any questions."
         
     | 
| 
       51 
51 
     | 
    
         
             
                    else
         
     | 
| 
       52 
52 
     | 
    
         
             
                      puts "Oh snap. There was an error initializing your project."
         
     | 
| 
       53 
     | 
    
         
            -
                      puts response.body.inspect
         
     | 
| 
      
 53 
     | 
    
         
            +
                      puts @response.body.inspect
         
     | 
| 
       54 
54 
     | 
    
         
             
                      abort
         
     | 
| 
       55 
55 
     | 
    
         
             
                    end
         
     | 
| 
       56 
56 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -79,6 +79,8 @@ module Terrestrial 
     | 
|
| 
       79 
79 
     | 
    
         
             
                      Dir[Config[:directory] + "/**/*.strings"].map {|f| relative_path(f) }
         
     | 
| 
       80 
80 
     | 
    
         
             
                    elsif @platform == "android"
         
     | 
| 
       81 
81 
     | 
    
         
             
                      Dir[Config[:directory] + "/**/*/res/values/strings.xml"].map {|f| relative_path(f) }
         
     | 
| 
      
 82 
     | 
    
         
            +
                    elsif @platform == "unity"
         
     | 
| 
      
 83 
     | 
    
         
            +
                      [] # Not tracking files now
         
     | 
| 
       82 
84 
     | 
    
         
             
                    else
         
     | 
| 
       83 
85 
     | 
    
         
             
                      raise "Unknown platform #{@platform}"
         
     | 
| 
       84 
86 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -0,0 +1,64 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Terrestrial
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Cli
         
     | 
| 
      
 3 
     | 
    
         
            +
                module LanguageName
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  LANGUAGES = {
         
     | 
| 
      
 6 
     | 
    
         
            +
                    "af" => "Afrikaans",
         
     | 
| 
      
 7 
     | 
    
         
            +
                    "ar" => "Arabic",
         
     | 
| 
      
 8 
     | 
    
         
            +
                    "eu" => "Basque",
         
     | 
| 
      
 9 
     | 
    
         
            +
                    "be" => "Belarusian",
         
     | 
| 
      
 10 
     | 
    
         
            +
                    "bg" => "Bulgarian",
         
     | 
| 
      
 11 
     | 
    
         
            +
                    "ca" => "Catalan",
         
     | 
| 
      
 12 
     | 
    
         
            +
                    "cs" => "Czech",
         
     | 
| 
      
 13 
     | 
    
         
            +
                    "da" => "Danish",
         
     | 
| 
      
 14 
     | 
    
         
            +
                    "nl" => "Dutch",
         
     | 
| 
      
 15 
     | 
    
         
            +
                    "en" => "English",
         
     | 
| 
      
 16 
     | 
    
         
            +
                    "et" => "Estonian",
         
     | 
| 
      
 17 
     | 
    
         
            +
                    "fo" => "Faroese",
         
     | 
| 
      
 18 
     | 
    
         
            +
                    "fi" => "Finnish",
         
     | 
| 
      
 19 
     | 
    
         
            +
                    "fr" => "French",
         
     | 
| 
      
 20 
     | 
    
         
            +
                    "de" => "German",
         
     | 
| 
      
 21 
     | 
    
         
            +
                    "el" => "Greek",
         
     | 
| 
      
 22 
     | 
    
         
            +
                    "he" => "Hebrew",
         
     | 
| 
      
 23 
     | 
    
         
            +
                    "is" => "Icelandic",
         
     | 
| 
      
 24 
     | 
    
         
            +
                    "id" => "Indonesian",
         
     | 
| 
      
 25 
     | 
    
         
            +
                    "it" => "Italian",
         
     | 
| 
      
 26 
     | 
    
         
            +
                    "ja" => "Japanese",
         
     | 
| 
      
 27 
     | 
    
         
            +
                    "ko" => "Korean",
         
     | 
| 
      
 28 
     | 
    
         
            +
                    "lv" => "Latvian",
         
     | 
| 
      
 29 
     | 
    
         
            +
                    "lt" => "Lithuanian",
         
     | 
| 
      
 30 
     | 
    
         
            +
                    "no" => "Norwegian",
         
     | 
| 
      
 31 
     | 
    
         
            +
                    "pl" => "Polish",
         
     | 
| 
      
 32 
     | 
    
         
            +
                    "pt" => "Portuguese",
         
     | 
| 
      
 33 
     | 
    
         
            +
                    "ro" => "Romanian",
         
     | 
| 
      
 34 
     | 
    
         
            +
                    "ru" => "Russian",
         
     | 
| 
      
 35 
     | 
    
         
            +
                    "sr" => "SerboCroatian",
         
     | 
| 
      
 36 
     | 
    
         
            +
                    "sk" => "Slovak",
         
     | 
| 
      
 37 
     | 
    
         
            +
                    "sl" => "Slovenian",
         
     | 
| 
      
 38 
     | 
    
         
            +
                    "es" => "Spanish",
         
     | 
| 
      
 39 
     | 
    
         
            +
                    "sv" => "Swedish",
         
     | 
| 
      
 40 
     | 
    
         
            +
                    "th" => "Thai",
         
     | 
| 
      
 41 
     | 
    
         
            +
                    "tr" => "Turkish",
         
     | 
| 
      
 42 
     | 
    
         
            +
                    "uk" => "Ukrainian",
         
     | 
| 
      
 43 
     | 
    
         
            +
                    "vi" => "Vietnamese",
         
     | 
| 
      
 44 
     | 
    
         
            +
                    "zh" => "ChineseSimplified",
         
     | 
| 
      
 45 
     | 
    
         
            +
                    "zh-tw" => "ChineseTraditional",
         
     | 
| 
      
 46 
     | 
    
         
            +
                    "hu" => "Hungarian"
         
     | 
| 
      
 47 
     | 
    
         
            +
                  }
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                  def initialize(language_code)
         
     | 
| 
      
 50 
     | 
    
         
            +
                    @code = language_code
         
     | 
| 
      
 51 
     | 
    
         
            +
                  end
         
     | 
| 
      
 52 
     | 
    
         
            +
                 
         
     | 
| 
      
 53 
     | 
    
         
            +
                  def human_readable_name
         
     | 
| 
      
 54 
     | 
    
         
            +
                    LANGUAGES.fetch(code) { abort "Unkown language '#{code}' encountered." }
         
     | 
| 
      
 55 
     | 
    
         
            +
                  end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                  private
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                  def code
         
     | 
| 
      
 60 
     | 
    
         
            +
                    @code
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
                end
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/terrestrial/cli/pull.rb
    CHANGED
    
    | 
         @@ -41,6 +41,8 @@ module Terrestrial 
     | 
|
| 
       41 
41 
     | 
    
         
             
                      ios_translation_file_path(language)
         
     | 
| 
       42 
42 
     | 
    
         
             
                    elsif Config[:platform] == "android"
         
     | 
| 
       43 
43 
     | 
    
         
             
                      android_translation_file_path(language) 
         
     | 
| 
      
 44 
     | 
    
         
            +
                    elsif Config[:platform] == "unity"
         
     | 
| 
      
 45 
     | 
    
         
            +
                      Config[:directory] + "/Assets/Terrestrial/" + human_readable_language_name(language) + ".xml"
         
     | 
| 
       44 
46 
     | 
    
         
             
                    end
         
     | 
| 
       45 
47 
     | 
    
         
             
                  end
         
     | 
| 
       46 
48 
     | 
    
         | 
| 
         @@ -72,6 +74,9 @@ module Terrestrial 
     | 
|
| 
       72 
74 
     | 
    
         
             
                      elsif Config[:platform] == "android"
         
     | 
| 
       73 
75 
     | 
    
         
             
                        f.write "<!-- Updated by Terrestrial #{Time.now.to_s} -->\n\n"
         
     | 
| 
       74 
76 
     | 
    
         
             
                        f.write AndroidXmlFormatter.new(translations).format_foreign_translation
         
     | 
| 
      
 77 
     | 
    
         
            +
                      elsif Config[:platform] == "unity"
         
     | 
| 
      
 78 
     | 
    
         
            +
                        f.write "<!-- Updated by Terrestrial #{Time.now.to_s} -->\n\n"
         
     | 
| 
      
 79 
     | 
    
         
            +
                        f.write UnityFormatter.new(translations).format_foreign_translation
         
     | 
| 
       75 
80 
     | 
    
         
             
                      end
         
     | 
| 
       76 
81 
     | 
    
         
             
                    end
         
     | 
| 
       77 
82 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -86,6 +91,10 @@ module Terrestrial 
     | 
|
| 
       86 
91 
     | 
    
         
             
                    end
         
     | 
| 
       87 
92 
     | 
    
         
             
                  end
         
     | 
| 
       88 
93 
     | 
    
         | 
| 
      
 94 
     | 
    
         
            +
                  def human_readable_language_name(language_code)
         
     | 
| 
      
 95 
     | 
    
         
            +
                    LanguageName.new(language_code).human_readable_name
         
     | 
| 
      
 96 
     | 
    
         
            +
                  end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
       89 
98 
     | 
    
         
             
                  def fetch_translations
         
     | 
| 
       90 
99 
     | 
    
         
             
                    @response = web_client.get_translations(Config[:project_id], Config[:app_id])
         
     | 
| 
       91 
100 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -18,11 +18,17 @@ module Terrestrial 
     | 
|
| 
       18 
18 
     | 
    
         
             
                        process_ios
         
     | 
| 
       19 
19 
     | 
    
         
             
                      when "android"
         
     | 
| 
       20 
20 
     | 
    
         
             
                        process_android
         
     | 
| 
      
 21 
     | 
    
         
            +
                      when "unity"
         
     | 
| 
      
 22 
     | 
    
         
            +
                        process_unity
         
     | 
| 
       21 
23 
     | 
    
         
             
                      else
         
     | 
| 
       22 
24 
     | 
    
         
             
                        raise "Unknown platform"
         
     | 
| 
       23 
25 
     | 
    
         
             
                      end
         
     | 
| 
       24 
26 
     | 
    
         
             
                    end
         
     | 
| 
       25 
27 
     | 
    
         | 
| 
      
 28 
     | 
    
         
            +
                    def process_unity
         
     | 
| 
      
 29 
     | 
    
         
            +
                      process_android
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
       26 
32 
     | 
    
         
             
                    def process_android
         
     | 
| 
       27 
33 
     | 
    
         
             
                      translations
         
     | 
| 
       28 
34 
     | 
    
         
             
                        .reject {|entry| entry["translation"].nil? || entry["translation"].empty? }
         
     | 
| 
         @@ -9,6 +9,8 @@ module Terrestrial 
     | 
|
| 
       9 
9 
     | 
    
         
             
                          DotStringsParser.parse_file(Config[:directory] + "/#{file}")
         
     | 
| 
       10 
10 
     | 
    
         
             
                        elsif Config[:platform] == "android"
         
     | 
| 
       11 
11 
     | 
    
         
             
                          AndroidXmlParser.parse_file(Config[:directory] + "/#{file}")
         
     | 
| 
      
 12 
     | 
    
         
            +
                        elsif Config[:platform] == "unity"
         
     | 
| 
      
 13 
     | 
    
         
            +
                          UnityParser.parse_file(Config[:directory] + "/#{file}")
         
     | 
| 
       12 
14 
     | 
    
         
             
                        end
         
     | 
| 
       13 
15 
     | 
    
         
             
                      rescue Errno::ENOENT
         
     | 
| 
       14 
16 
     | 
    
         
             
                        abort "Could not find #{file}. If the file is no longer in your project, remove it from your tracked files in terrestrial.yml." 
         
     | 
| 
         @@ -0,0 +1,20 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Terrestrial
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Cli
         
     | 
| 
      
 3 
     | 
    
         
            +
                class UnityFormatter
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  def initialize(entries)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    @formatter = AndroidXmlFormatter.new(entries)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                  def format_foreign_translation
         
     | 
| 
      
 10 
     | 
    
         
            +
                    formatter.format_foreign_translation
         
     | 
| 
      
 11 
     | 
    
         
            +
                  end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  private
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                  def formatter
         
     | 
| 
      
 16 
     | 
    
         
            +
                    @formatter
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module Terrestrial
         
     | 
| 
      
 2 
     | 
    
         
            +
              module Cli
         
     | 
| 
      
 3 
     | 
    
         
            +
                class UnityParser
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                  def self.parse_file(file)
         
     | 
| 
      
 6 
     | 
    
         
            +
                    # Same file format as Android, so we delegate directly.
         
     | 
| 
      
 7 
     | 
    
         
            +
                    result = AndroidXmlParser.parse_file(file)
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    # Map over the results to change the types
         
     | 
| 
      
 10 
     | 
    
         
            +
                    # to be unity instead of the Android default.
         
     | 
| 
      
 11 
     | 
    
         
            +
                    result.map do |entry|
         
     | 
| 
      
 12 
     | 
    
         
            +
                      entry["type"] = "unity"
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
                end
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: terrestrial-cli
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.6. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.6.2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Niklas Begley
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2016-02- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2016-02-22 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: terminal-table
         
     | 
| 
         @@ -126,8 +126,8 @@ files: 
     | 
|
| 
       126 
126 
     | 
    
         
             
            - lib/terrestrial/cli/editor.rb
         
     | 
| 
       127 
127 
     | 
    
         
             
            - lib/terrestrial/cli/editor/android_xml.rb
         
     | 
| 
       128 
128 
     | 
    
         
             
            - lib/terrestrial/cli/editor/base_editor.rb
         
     | 
| 
      
 129 
     | 
    
         
            +
            - lib/terrestrial/cli/editor/custom_printer.rb
         
     | 
| 
       129 
130 
     | 
    
         
             
            - lib/terrestrial/cli/editor/objc.rb
         
     | 
| 
       130 
     | 
    
         
            -
            - lib/terrestrial/cli/editor/printer.rb
         
     | 
| 
       131 
131 
     | 
    
         
             
            - lib/terrestrial/cli/editor/storyboard.rb
         
     | 
| 
       132 
132 
     | 
    
         
             
            - lib/terrestrial/cli/editor/swift.rb
         
     | 
| 
       133 
133 
     | 
    
         
             
            - lib/terrestrial/cli/engine_mapper.rb
         
     | 
| 
         @@ -139,6 +139,7 @@ files: 
     | 
|
| 
       139 
139 
     | 
    
         
             
            - lib/terrestrial/cli/flight/table_workflow.rb
         
     | 
| 
       140 
140 
     | 
    
         
             
            - lib/terrestrial/cli/ignite.rb
         
     | 
| 
       141 
141 
     | 
    
         
             
            - lib/terrestrial/cli/init.rb
         
     | 
| 
      
 142 
     | 
    
         
            +
            - lib/terrestrial/cli/language_name.rb
         
     | 
| 
       142 
143 
     | 
    
         
             
            - lib/terrestrial/cli/mixpanel_client.rb
         
     | 
| 
       143 
144 
     | 
    
         
             
            - lib/terrestrial/cli/parser.rb
         
     | 
| 
       144 
145 
     | 
    
         
             
            - lib/terrestrial/cli/parser/android_xml.rb
         
     | 
| 
         @@ -154,11 +155,12 @@ files: 
     | 
|
| 
       154 
155 
     | 
    
         
             
            - lib/terrestrial/cli/scan.rb
         
     | 
| 
       155 
156 
     | 
    
         
             
            - lib/terrestrial/cli/string_registry.rb
         
     | 
| 
       156 
157 
     | 
    
         
             
            - lib/terrestrial/cli/terminal_ui.rb
         
     | 
| 
      
 158 
     | 
    
         
            +
            - lib/terrestrial/cli/unity_formatter.rb
         
     | 
| 
      
 159 
     | 
    
         
            +
            - lib/terrestrial/cli/unity_parser.rb
         
     | 
| 
       157 
160 
     | 
    
         
             
            - lib/terrestrial/cli/variable_normalizer.rb
         
     | 
| 
       158 
161 
     | 
    
         
             
            - lib/terrestrial/cli/version.rb
         
     | 
| 
       159 
162 
     | 
    
         
             
            - lib/terrestrial/cli/version_checker.rb
         
     | 
| 
       160 
163 
     | 
    
         
             
            - lib/terrestrial/config.rb
         
     | 
| 
       161 
     | 
    
         
            -
            - lib/terrestrial/creates_terrestrial_yml.rb
         
     | 
| 
       162 
164 
     | 
    
         
             
            - lib/terrestrial/web.rb
         
     | 
| 
       163 
165 
     | 
    
         
             
            - lib/terrestrial/web/response.rb
         
     | 
| 
       164 
166 
     | 
    
         
             
            - lib/terrestrial/yaml_helper.rb
         
     |