Adding Crowdin commands for upload/download process.
diff --git a/.gitignore b/.gitignore
index 01d58e9..72f0eec 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,3 +18,4 @@
 
 node_modules
 Gemfile.lock
+crowdin-jail
diff --git a/Gemfile b/Gemfile
index 55e56c2..8dd7478 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,4 +1,5 @@
 source 'https://rubygems.org'
 gem 'jekyll', '= 2.5.3'
 gem 'redcarpet', '= 3.3.2'
-gem 'rouge', '= 1.9.1'
\ No newline at end of file
+gem 'rouge', '= 1.9.1'
+gem 'crowdin-cli', '= 0.5.1'
diff --git a/Makefile b/Makefile
index ca7e388..c14c01d 100644
--- a/Makefile
+++ b/Makefile
@@ -77,6 +77,7 @@
 
 # executables
 NODE       = node
+CROWDIN    = crowdin-cli
 GULP       = $(NODE_BIN_DIR)/gulp
 LESSC      = $(NODE_BIN_DIR)/lessc
 SASSC      = $(NODE_BIN_DIR)/node-sass
@@ -90,6 +91,7 @@
 SASSC      := $(subst /,\,$(SASSC))
 BROWSERIFY := $(subst /,\,$(BROWSERIFY))
 UGLIFY     := $(subst /,\,$(UGLIFY))
+MAKE       := $(subst /,\,$(MAKE))
 endif
 
 # existing files
@@ -102,6 +104,13 @@
 PLUGINS_SRC         = $(PLUGINS_SRC_DIR)/app.js
 VERSION_FILE        = VERSION
 FETCH_SCRIPT        = $(BIN_DIR)/fetch_docs.js
+CROWDIN_CONFIG      = $(CONFIG_DIR)/crowdin.yml
+
+ifdef WINDOWS
+CROWDIN_IDENTITY_FILE = %HOME%/.crowdin.yml
+else
+CROWDIN_IDENTITY_FILE = $$HOME/.crowdin.yml
+endif
 
 # NOTE:
 #      the .scss files are separate because they combine into MAIN_STYLE_FILE,
@@ -285,8 +294,47 @@
 	echo --->> $@
 	$(call printfile,$<) >> $@
 
+# crowdin
+CROWDIN_SRC      = www/docs/en/dev
+CROWDIN_JAIL     = crowdin-jail
+CROWDIN_COPY_DIR = $(CROWDIN_JAIL)/cordova-docs/docs/en
+CROWDIN_COPY     = $(CROWDIN_COPY_DIR)/dev
+
+$(CROWDIN_JAIL) $(CROWDIN_COPY_DIR):
+ifdef WINDOWS
+	-$(MKDIRP) $(subst /,\,$@)
+else
+	$(MKDIRP) $@
+endif
+
+$(CROWDIN_COPY): $(CROWDIN_SRC) $(CROWDIN_COPY_DIR) $(FETCHED_FILES)
+	cp -R $(CROWDIN_SRC) $(CROWDIN_COPY_DIR)
+
+cw_project: CW_COMMAND = list project
+cw_translations: CW_COMMAND = list translations
+cw_sources: CW_COMMAND = list sources
+cw_upload: CW_COMMAND = upload sources --auto-update
+cw_download: CW_COMMAND = download en
+cw_project cw_translations cw_sources cw_upload cw_download: crowdin
+
+crowdin: $(CROWDIN_JAIL) $(CROWDIN_COPY)
+	(cd $(CROWDIN_JAIL) && $(CROWDIN) --identity=$(CROWDIN_IDENTITY_FILE) --config=../$(CROWDIN_CONFIG) $(CW_COMMAND))
+
+on_disk.txt: $(CROWDIN_COPY)
+	$(MAKE) cw_sources | grep "^/cordova-docs" | sort > $@
+
+on_crowdin.txt: $(CROWDIN_COPY)
+	$(MAKE) cw_project | grep "^/cordova-docs" | sort > $@
+
+cw_diff: on_disk.txt on_crowdin.txt
+	comm -3 $^
+	$(RM) $^
+
 # maintenance
 clean:
+
+	$(RM) -r $(CROWDIN_JAIL)
+	$(RM) -r $(PROD_DIR) $(DEV_DIR)
 	$(RM) $(VERSION_CONFIG)
 	$(RM) $(DEFAULTS_CONFIG)
 	$(RM) $(DOCS_PAGE_LIST)
diff --git a/conf/crowdin.yml b/conf/crowdin.yml
new file mode 100644
index 0000000..251cac0
--- /dev/null
+++ b/conf/crowdin.yml
@@ -0,0 +1,28 @@
+# Reference:
+#       https://github.com/crowdin/crowdin-cli/blob/master/README.md
+
+# environment variables for the three values below
+project_identifier_env: CROWDIN_PROJECT_ID
+api_key_env:            CROWDIN_API_KEY
+base_path_env:          CROWDIN_BASE_PATH
+
+# the ID of the project; found on the API settings page
+project_identifier: cordova
+
+# key required for using this tool; found on the API settings page
+# WARNING:
+#         DO NOT PUT A VALUE HERE; put it into $HOME/.crowdin.yml
+#         or into the environment variable defined above
+api_key:
+
+# Crowdin by default truncates the common prefix of all source paths
+# and this flag tells it to keep it instead of truncating it
+preserve_hierarchy: true
+
+# prefix for source paths
+base_path: .
+
+# patterns for file translation
+files:
+    -   source: '/**/*.md'
+        translation: '/cordova-docs/docs/%locale%/dev/**/%original_file_name%'