express_translate 1.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +53 -43
- data/VERSION +1 -1
- data/app/assets/stylesheets/express_translate/express_translate.css.scss +4 -0
- data/app/controllers/express_translate/account_controller.rb +10 -0
- data/app/controllers/express_translate/ajax/codes_controller.rb +21 -1
- data/app/controllers/express_translate/ajax/languages_controller.rb +16 -0
- data/app/controllers/express_translate/ajax/packages_controller.rb +13 -0
- data/app/controllers/express_translate/base_controller.rb +3 -1
- data/app/controllers/express_translate/files_controller.rb +32 -1
- data/app/controllers/express_translate/options_controller.rb +16 -5
- data/app/controllers/express_translate/services_controller.rb +20 -1
- data/app/views/express_translate/ajax/languages/_content_language.html.erb +1 -1
- data/app/views/express_translate/options/languages.html.erb +69 -1
- data/config/routes.rb +1 -0
- data/express_translate.gemspec +1 -2
- data/lib/express_translate.rb +7 -2
- data/lib/express_translate/account_management.rb +4 -1
- data/lib/express_translate/express_translate_model.rb +39 -5
- data/lib/express_translate/language_detail_management.rb +1 -1
- data/lib/express_translate/languages_management.rb +7 -1
- data/lib/express_translate/package_management.rb +1 -1
- data/lib/generators/express_translate/install_generator.rb +2 -0
- data/lib/generators/express_translate/reset_account_generator.rb +2 -0
- data/lib/generators/express_translate/reset_generator.rb +2 -1
- data/lib/generators/express_translate/seed_generator.rb +1 -0
- metadata +2 -3
- data/app/views/express_translate/options/_language.html.erb +0 -28
data/README.md
CHANGED
@@ -21,57 +21,67 @@ Express Translate
|
|
21
21
|
|
22
22
|
##Installation
|
23
23
|
### 1. Gemfile
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
### 2.
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
24
|
+
```bash
|
25
|
+
gem 'express_translate', '~> 1.0.0'
|
26
|
+
```
|
27
|
+
|
28
|
+
### 2. Setup
|
29
|
+
Run on terminal.
|
30
|
+
```bash
|
31
|
+
bundle install
|
32
|
+
```
|
33
|
+
|
34
|
+
### 3. Install
|
35
|
+
Open terminal and run:
|
36
|
+
|
37
|
+
```bash
|
38
|
+
rails g express_translate:install
|
39
|
+
```
|
40
40
|
|
41
41
|
##Using
|
42
42
|
### Run
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
43
|
+
Start Redis Server
|
44
|
+
```bash
|
45
|
+
redis-server
|
46
|
+
```
|
47
47
|
|
48
48
|
### Reset data
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
```bash
|
50
|
+
rails g express_translate:reset
|
51
|
+
```
|
52
52
|
|
53
53
|
### Reset Account
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
54
|
+
```bash
|
55
|
+
rails g express_translate:reset_account
|
56
|
+
```
|
57
|
+
Account list config in "/config/express_translate.yml"
|
58
|
+
You can add account:
|
59
|
+
```bash
|
60
|
+
account:
|
61
|
+
-
|
62
|
+
username: "abc_name"
|
63
|
+
password: "abc_pass"
|
64
|
+
```
|
65
65
|
### Login page
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
66
|
+
You can see login page at:
|
67
|
+
http://you_domain/express_translate/login
|
68
|
+
|
69
|
+
* e.g: http://localhost:3000/express_translate/login
|
70
70
|
|
71
71
|
### Packages management
|
72
|
-
|
73
|
-
|
72
|
+
You can see at:
|
73
|
+
http://you_domain/express_translate
|
74
|
+
|
75
|
+
* e.g: http://localhost:3000/express_translate
|
74
76
|
|
75
|
-
|
76
|
-
|
77
|
-
|
77
|
+
Note: You can see before login. Account for login in config file ("/config/express_translate.yml").
|
78
|
+
|
79
|
+
##Support
|
80
|
+
|
81
|
+
### Files
|
82
|
+
Export and Import csv file
|
83
|
+
|
84
|
+
### Application
|
85
|
+
Backend for Ruby on Rails
|
86
|
+
|
87
|
+
Get data with json (for Javascript)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.0.1
|
@@ -1,12 +1,19 @@
|
|
1
1
|
class ExpressTranslate::AccountController < ExpressTranslate::BaseController
|
2
|
+
# Check login status for goto page
|
2
3
|
before_filter :check_login
|
3
4
|
|
4
5
|
include ExpressTranslate
|
5
6
|
|
7
|
+
# Login page html code only
|
6
8
|
def login
|
7
9
|
render layout: 'express_translate/login'
|
8
10
|
end
|
9
11
|
|
12
|
+
# Login action
|
13
|
+
# Find account with username
|
14
|
+
# Change exists of account and change password for account (encoding password)
|
15
|
+
# If oke, new token for account login and update token for account
|
16
|
+
# Render json data for client Successful or Error
|
10
17
|
def login_check
|
11
18
|
account = Account.find(params[:username])
|
12
19
|
if account.present? and account["password"] == Account.encoding(params[:password])
|
@@ -18,11 +25,14 @@ class ExpressTranslate::AccountController < ExpressTranslate::BaseController
|
|
18
25
|
end
|
19
26
|
end
|
20
27
|
|
28
|
+
# Create token for login action, random string
|
21
29
|
def new_token
|
22
30
|
o = [('a'..'z'), ('A'..'Z')].map { |i| i.to_a }.flatten
|
23
31
|
string = (0...50).map { o[rand(o.length)] }.join
|
24
32
|
end
|
25
33
|
|
34
|
+
# Check login status function
|
35
|
+
# If logined auto change location for Client
|
26
36
|
def check_login
|
27
37
|
if check_authentication
|
28
38
|
redirect_to controller: "options", action: "index"
|
@@ -1,21 +1,38 @@
|
|
1
|
+
# Ajax action for Codes Controller
|
1
2
|
class ExpressTranslate::Ajax::CodesController < ActionController::Base
|
3
|
+
|
4
|
+
# Include and require Libraries
|
2
5
|
require 'redis'
|
3
6
|
require 'json'
|
4
7
|
require 'csv'
|
5
8
|
include ExpressTranslate
|
6
9
|
|
10
|
+
# Add code
|
11
|
+
# The first: selector LanguageDetail want to add with Language ID and Package ID
|
12
|
+
# After: add code for LanguageDetail selected
|
13
|
+
# The finally: check status add and show html content for Client is successful or json data is error
|
7
14
|
def code_add
|
8
15
|
@lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
|
9
16
|
add = @lang_detail.add(params)
|
10
17
|
add['success'] ? load_content_code(params) : (render :json => add)
|
11
18
|
end
|
12
19
|
|
20
|
+
# Update code
|
21
|
+
# The first: selector LanguageDetail want to add with Language ID and Package ID
|
22
|
+
# Next step: selector code want to update Text for this
|
23
|
+
# Next step: Update if exists data and add for not exists data
|
24
|
+
# The finally: show html content for Client
|
13
25
|
def code_update
|
14
|
-
@lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
|
26
|
+
@lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
|
15
27
|
@lang_detail.find(params[:code]).present? ? @lang_detail.update(params) : @lang_detail.add(params)
|
16
28
|
load_content_code(params)
|
17
29
|
end
|
18
30
|
|
31
|
+
|
32
|
+
# Delete code
|
33
|
+
# The first: selector LanguageDetail want to add with Language ID and Package ID
|
34
|
+
# Next step: find and remove code data
|
35
|
+
# The finally: show html content for Client
|
19
36
|
def code_delete
|
20
37
|
@lang_detail = LanguageDetail.info({'id'=> params[:lang], 'packages'=> params[:pack]})
|
21
38
|
@lang_detail.delete(params[:code])
|
@@ -24,6 +41,9 @@ class ExpressTranslate::Ajax::CodesController < ActionController::Base
|
|
24
41
|
|
25
42
|
private
|
26
43
|
|
44
|
+
# Load html contents code
|
45
|
+
# The first: selector Origin language
|
46
|
+
# The second: selector Language want to show
|
27
47
|
def load_content_code(params)
|
28
48
|
@origin_lang = Language.get_origin(params[:pack])
|
29
49
|
@LanguageDetail = LanguageDetail
|
@@ -1,27 +1,43 @@
|
|
1
|
+
# Ajax action for Languages Controller
|
1
2
|
class ExpressTranslate::Ajax::LanguagesController < ActionController::Base
|
3
|
+
|
4
|
+
# Include and require Libraries
|
2
5
|
require 'redis'
|
3
6
|
require 'json'
|
4
7
|
require 'csv'
|
5
8
|
include ExpressTranslate
|
6
9
|
|
10
|
+
# Add language
|
11
|
+
# Load html content when add Language
|
7
12
|
def language_add
|
8
13
|
load_content_language(params, Language.add(params))
|
9
14
|
end
|
10
15
|
|
16
|
+
# Update language
|
17
|
+
# Load html content when update Language
|
11
18
|
def language_update
|
12
19
|
load_content_language(params, Language.update_by_id_packages(params[:old_id], params[:packages], params))
|
13
20
|
end
|
14
21
|
|
22
|
+
# Delete language
|
23
|
+
# Load html content when delete Language
|
15
24
|
def language_delete
|
16
25
|
load_content_language(params, Language.delete_by_id_packages(params[:id], params[:packages]))
|
17
26
|
end
|
18
27
|
|
28
|
+
# Set origin language
|
29
|
+
# Load html content when set origin Language for package
|
19
30
|
def language_set_origin
|
20
31
|
load_content_language(params, Language.set_origin(params[:id], params[:packages]))
|
21
32
|
end
|
22
33
|
|
23
34
|
private
|
24
35
|
|
36
|
+
# Load language html content
|
37
|
+
# The firstly: check status for action add, update, delete and set origin language
|
38
|
+
# get origin language for know max count => percent complete
|
39
|
+
# get max number language origin
|
40
|
+
# render to html content
|
25
41
|
def load_content_language(params, check)
|
26
42
|
if check['success']
|
27
43
|
origin = Language.get_origin(params[:packages])
|
@@ -1,23 +1,36 @@
|
|
1
|
+
# Ajax action for Package Controller
|
1
2
|
class ExpressTranslate::Ajax::PackagesController < ActionController::Base
|
3
|
+
|
4
|
+
# Include and require Libraries
|
2
5
|
require 'redis'
|
3
6
|
require 'json'
|
4
7
|
require 'csv'
|
5
8
|
include ExpressTranslate
|
6
9
|
|
10
|
+
# Add package
|
11
|
+
# Load html content when add Package
|
7
12
|
def package_add
|
8
13
|
load_content_package(Package.add(params))
|
9
14
|
end
|
10
15
|
|
16
|
+
# Update package
|
17
|
+
# Load html content when update Package
|
11
18
|
def package_update
|
12
19
|
load_content_package(Package.update(params))
|
13
20
|
end
|
14
21
|
|
22
|
+
# Delete package
|
23
|
+
# Load html content when delete Package
|
15
24
|
def package_delete
|
16
25
|
load_content_package(Package.delete(params[:id]))
|
17
26
|
end
|
18
27
|
|
19
28
|
private
|
20
29
|
|
30
|
+
# Load packages html content
|
31
|
+
# The firstly: check status for action add, update, delete package
|
32
|
+
# render to html content for successful
|
33
|
+
# render to json content for error
|
21
34
|
def load_content_package(check)
|
22
35
|
if check['success']
|
23
36
|
@packages = Package.all
|
@@ -1,11 +1,13 @@
|
|
1
1
|
class ExpressTranslate::BaseController < ActionController::Base
|
2
2
|
include ExpressTranslate
|
3
|
-
|
3
|
+
|
4
|
+
# Check login status by cookie
|
4
5
|
def check_authentication
|
5
6
|
token_store = getCookie(request.headers["HTTP_COOKIE"], "token")
|
6
7
|
return (token_store.present? and Account.find_by_token(token_store).present?)
|
7
8
|
end
|
8
9
|
|
10
|
+
# Get cookie form header action
|
9
11
|
def getCookie(string, key)
|
10
12
|
if string.present?
|
11
13
|
string.split(";").each do |cookie|
|
@@ -1,9 +1,12 @@
|
|
1
1
|
class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
2
|
+
|
3
|
+
# Require or include Libraries
|
2
4
|
before_filter :check_login_files
|
3
5
|
require 'redis'
|
4
6
|
require 'json'
|
5
7
|
require 'csv'
|
6
8
|
|
9
|
+
# Export to csv file form redis database
|
7
10
|
def export
|
8
11
|
respond_to do |format|
|
9
12
|
format.csv do
|
@@ -14,6 +17,8 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
20
|
+
# Export form csv file to redis database
|
21
|
+
# Upload csv file
|
17
22
|
def import
|
18
23
|
filename = Rails.root.join('public', "last_import.csv")
|
19
24
|
File.open(filename, 'wb') do |file|
|
@@ -23,8 +28,18 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
23
28
|
render text: "Uploaded"
|
24
29
|
end
|
25
30
|
|
31
|
+
def import_yml
|
32
|
+
filename = Rails.root.join('public', "last_import.yml")
|
33
|
+
File.open(filename, 'wb') do |file|
|
34
|
+
file.write(params[:file_yml].read)
|
35
|
+
end
|
36
|
+
import_yml_file(File.open(filename, 'r').path)
|
37
|
+
render text: "Uploaded"
|
38
|
+
end
|
39
|
+
|
26
40
|
private
|
27
41
|
|
42
|
+
# Check login status when excute with files
|
28
43
|
def check_login_files
|
29
44
|
redirect_to controller: "account", action: "login" if !check_authentication
|
30
45
|
end
|
@@ -42,7 +57,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
42
57
|
csv_string
|
43
58
|
end
|
44
59
|
|
45
|
-
# Import
|
60
|
+
# Import csv file
|
46
61
|
def import_csv(path)
|
47
62
|
@before_row = []
|
48
63
|
@last_package = {}
|
@@ -58,6 +73,14 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
58
73
|
end
|
59
74
|
end
|
60
75
|
|
76
|
+
# Import yml file
|
77
|
+
def import_yml_file(path)
|
78
|
+
data = YAML.load_file(path)
|
79
|
+
data.each do |lang|
|
80
|
+
# puts lang
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
61
84
|
# Processing
|
62
85
|
def exp_pack(csv)
|
63
86
|
csv << [@package["id"], @package["text"]]
|
@@ -74,6 +97,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
74
97
|
csv << []
|
75
98
|
end
|
76
99
|
|
100
|
+
# Export row
|
77
101
|
def exp_rows(csv)
|
78
102
|
all_of_origin = LanguageDetail.info(@origin_lang).all
|
79
103
|
all_of_origin.each_with_index do |item, index|
|
@@ -81,6 +105,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
81
105
|
end
|
82
106
|
end
|
83
107
|
|
108
|
+
# Export header row for file
|
84
109
|
def exp_header(csv)
|
85
110
|
header = ["No.", "Key", @origin_lang["text"]]
|
86
111
|
@package["language"].each do |lang|
|
@@ -89,6 +114,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
89
114
|
csv << header
|
90
115
|
end
|
91
116
|
|
117
|
+
# Export data with row data
|
92
118
|
def exp_row(csv, item, index)
|
93
119
|
row = ["#{index+1}", item["code"], item["text"]]
|
94
120
|
@package["language"].each do |lang|
|
@@ -100,6 +126,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
100
126
|
csv << row
|
101
127
|
end
|
102
128
|
|
129
|
+
# Add row when import file
|
103
130
|
def add_row(row)
|
104
131
|
if row[0].to_i > 0
|
105
132
|
index_col = 0
|
@@ -110,6 +137,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
110
137
|
end
|
111
138
|
end
|
112
139
|
|
140
|
+
# Add details of row when import file
|
113
141
|
def add_row_detail(row, cell_header, index_col)
|
114
142
|
if row[index_col].present?
|
115
143
|
lang_id = lang_text_to_id(cell_header)
|
@@ -117,6 +145,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
117
145
|
end
|
118
146
|
end
|
119
147
|
|
148
|
+
# Set header row for package
|
120
149
|
def is_header_row(row)
|
121
150
|
packages = Package.all.select{|pack| pack["id"] == @before_row[0]}
|
122
151
|
if packages.count > 0
|
@@ -127,6 +156,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
127
156
|
end
|
128
157
|
end
|
129
158
|
|
159
|
+
# Clear old data in language
|
130
160
|
def clear_lang(pack_id, row_header)
|
131
161
|
row_header.each do |cell_header|
|
132
162
|
lang_id = lang_text_to_id(cell_header)
|
@@ -134,6 +164,7 @@ class ExpressTranslate::FilesController < ExpressTranslate::BaseController
|
|
134
164
|
end
|
135
165
|
end
|
136
166
|
|
167
|
+
# Detect language id with text language
|
137
168
|
def lang_text_to_id(text)
|
138
169
|
languages = YAML.load_file("#{ExpressTranslate.root}/config/languages.yml")
|
139
170
|
languages.each do |lang|
|
@@ -1,20 +1,25 @@
|
|
1
1
|
class ExpressTranslate::OptionsController < ExpressTranslate::BaseController
|
2
2
|
|
3
|
+
# Check login status for controller
|
3
4
|
before_filter :check_login
|
4
5
|
|
6
|
+
# Require and include Libraries
|
5
7
|
require 'redis'
|
6
8
|
require 'json'
|
7
9
|
require 'csv'
|
8
|
-
|
9
10
|
include ExpressTranslate
|
10
11
|
|
12
|
+
# Show all packages for client (html code) index page
|
13
|
+
# Get all packages
|
11
14
|
def index
|
12
|
-
# ExpressTranslate.reset
|
13
|
-
# ExpressTranslate.seeds
|
14
15
|
@packages = Package.all
|
15
16
|
render :action => :index, layout: 'express_translate/translate'
|
16
17
|
end
|
17
|
-
|
18
|
+
|
19
|
+
# Show all languages for client (html code) index page
|
20
|
+
# Get all languages of package ID
|
21
|
+
# Get origin languages
|
22
|
+
# Get max count of percent translate
|
18
23
|
def languages
|
19
24
|
@selects = YAML.load_file("#{ExpressTranslate.root}/config/languages.yml")
|
20
25
|
origin = Language.get_origin(params[:packages])
|
@@ -25,6 +30,11 @@ class ExpressTranslate::OptionsController < ExpressTranslate::BaseController
|
|
25
30
|
render :action => :languages, layout: 'express_translate/translate'
|
26
31
|
end
|
27
32
|
|
33
|
+
|
34
|
+
# Show all codes for client (html code) index page
|
35
|
+
# Get all codes of package ID and language ID
|
36
|
+
# Get origin language
|
37
|
+
# Get language for show
|
28
38
|
def language_detail
|
29
39
|
@languages = Package.find(params[:package])['language']
|
30
40
|
@origin_lang = Language.get_origin(params[:package])
|
@@ -34,7 +44,8 @@ class ExpressTranslate::OptionsController < ExpressTranslate::BaseController
|
|
34
44
|
end
|
35
45
|
|
36
46
|
private
|
37
|
-
|
47
|
+
|
48
|
+
# Check login status for controller
|
38
49
|
def check_login
|
39
50
|
if !check_authentication
|
40
51
|
redirect_to controller: "account", action: "login"
|
@@ -1,11 +1,12 @@
|
|
1
1
|
class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
|
2
2
|
|
3
|
+
# Require and include Libraries
|
3
4
|
require 'redis'
|
4
|
-
|
5
5
|
include ExpressTranslate
|
6
6
|
|
7
7
|
# SERVICE
|
8
8
|
|
9
|
+
# Get all languages in package with json data
|
9
10
|
def service_languages
|
10
11
|
respond_to do |format|
|
11
12
|
format.json do
|
@@ -15,6 +16,7 @@ class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
19
|
+
# Get all data of language with json data
|
18
20
|
def service_language
|
19
21
|
respond_to do |format|
|
20
22
|
format.json do
|
@@ -31,6 +33,12 @@ class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
|
|
31
33
|
|
32
34
|
private
|
33
35
|
|
36
|
+
# Convert redis database to json data with key
|
37
|
+
# Nnew arrayfor store value level key
|
38
|
+
# ex: en.home.hello = "Hello"
|
39
|
+
# ["home" => {"hello"=> "Hello"}, {"hello"=> "Hello"}]
|
40
|
+
# Set data for array
|
41
|
+
# Support multi level keys
|
34
42
|
def service_language_detail(key)
|
35
43
|
path = key.split(".")
|
36
44
|
i = path.count - 1
|
@@ -44,6 +52,17 @@ class ExpressTranslate::ServicesController < ExpressTranslate::BaseController
|
|
44
52
|
extendObjects(@data, items[0])
|
45
53
|
end
|
46
54
|
|
55
|
+
# Function for convert redis database to json data (support multi level)
|
56
|
+
# Check type of old data
|
57
|
+
# String: extend value
|
58
|
+
# Object: add attribute for object
|
59
|
+
# Nil: add attribute for object
|
60
|
+
# If type of old and new data is Object
|
61
|
+
# Extend new object for old object
|
62
|
+
# Description:
|
63
|
+
# obj1: old object
|
64
|
+
# obj2: new object
|
65
|
+
# Return: Object
|
47
66
|
def extendObjects(obj1, obj2)
|
48
67
|
if obj1.is_a?(String)
|
49
68
|
if obj2.is_a?(String)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% @languages.each do |lang| %>
|
2
|
-
<a class="lang origin_<%= lang['is_origin'] %>" href="/express_translate/language/<%= params[:packages] %>/<%= lang['id'] %>">
|
2
|
+
<a class="lang add_files origin_<%= lang['is_origin'] %>" href="/express_translate/language/<%= params[:packages] %>/<%= lang['id'] %>">
|
3
3
|
<span><%= lang['text'].slice(0,1).capitalize + lang['text'].slice(1..-1) %></span>
|
4
4
|
<p><%= (@LanguageDetail.info(lang).all.count.to_f / (@max == 0 ? 1 : @max) * 100).to_i %>%</p>
|
5
5
|
<h5><%= @LanguageDetail.info(lang).all.count %>/<%= @max %></h5>
|
@@ -172,7 +172,75 @@
|
|
172
172
|
$(".json").click(function(event) {
|
173
173
|
event.preventDefault();
|
174
174
|
openInNewTab(window.location.origin + "/express_translate/service/" + $(event.target).attr("data") + ".json")
|
175
|
-
})
|
175
|
+
});
|
176
|
+
|
177
|
+
var obj = $(".lang");
|
178
|
+
|
179
|
+
obj.on('dragenter', function (e){
|
180
|
+
e.stopPropagation();
|
181
|
+
e.preventDefault();
|
182
|
+
$(this).removeClass("add_files");
|
183
|
+
});
|
184
|
+
|
185
|
+
obj.on('dragover', function (e){
|
186
|
+
e.stopPropagation();
|
187
|
+
e.preventDefault();
|
188
|
+
$(this).addClass("add_files");
|
189
|
+
});
|
190
|
+
|
191
|
+
obj.on('drop', function (e){
|
192
|
+
$(this).removeClass("add_files");
|
193
|
+
e.preventDefault();
|
194
|
+
var files = e.originalEvent.dataTransfer.files;
|
195
|
+
handleFileUpload(files, obj);
|
196
|
+
});
|
197
|
+
|
198
|
+
obj.on('dragleave', function (e) {
|
199
|
+
$(this).removeClass("add_files");
|
200
|
+
});
|
201
|
+
|
202
|
+
function handleFileUpload(files, obj) {
|
203
|
+
for (var i = 0; i < files.length; i++) {
|
204
|
+
var fd = new FormData();
|
205
|
+
fd.append('file_yml', files[i]);
|
206
|
+
sendFileToServer(fd);
|
207
|
+
}
|
208
|
+
}
|
209
|
+
|
210
|
+
function sendFileToServer(formData) {
|
211
|
+
var uploadURL ="/express_translate/import_yml";
|
212
|
+
var extraData ={};
|
213
|
+
var jqXHR = $.ajax({
|
214
|
+
xhr: function() {
|
215
|
+
var xhrobj = $.ajaxSettings.xhr();
|
216
|
+
if (xhrobj.upload) {
|
217
|
+
xhrobj.upload.addEventListener('progress', function(event) {
|
218
|
+
var percent = 0;
|
219
|
+
var position = event.loaded || event.position;
|
220
|
+
var total = event.total;
|
221
|
+
if (event.lengthComputable) {
|
222
|
+
percent = Math.ceil(position / total * 100);
|
223
|
+
}
|
224
|
+
}, false);
|
225
|
+
}
|
226
|
+
return xhrobj;
|
227
|
+
},
|
228
|
+
url: uploadURL,
|
229
|
+
type: "POST",
|
230
|
+
contentType:false,
|
231
|
+
processData: false,
|
232
|
+
cache: false,
|
233
|
+
data: formData,
|
234
|
+
success: function(data){
|
235
|
+
console.log(data)
|
236
|
+
$(".import").html("Import");
|
237
|
+
setTimeout(function(){
|
238
|
+
// window.location.reload();
|
239
|
+
}, 100);
|
240
|
+
}
|
241
|
+
});
|
242
|
+
}
|
243
|
+
|
176
244
|
}
|
177
245
|
|
178
246
|
runJavascriptsLanguage();
|
data/config/routes.rb
CHANGED
@@ -6,6 +6,7 @@ Rails.application.routes.draw do
|
|
6
6
|
|
7
7
|
get "/export" => "express_translate/files#export"
|
8
8
|
post "/import" => "express_translate/files#import"
|
9
|
+
post "/import_yml" => "express_translate/files#import_yml"
|
9
10
|
|
10
11
|
get "/login" => "express_translate/account#login"
|
11
12
|
post "/login" => "express_translate/account#login_check"
|
data/express_translate.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "express_translate"
|
8
|
-
s.version = "1.0"
|
8
|
+
s.version = "1.0.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Karl"]
|
@@ -147,7 +147,6 @@ Gem::Specification.new do |s|
|
|
147
147
|
"app/views/express_translate/ajax/packages/_content_index.html.erb",
|
148
148
|
"app/views/express_translate/ajax/packages/package_update.html.erb",
|
149
149
|
"app/views/express_translate/options/.DS_Store",
|
150
|
-
"app/views/express_translate/options/_language.html.erb",
|
151
150
|
"app/views/express_translate/options/index.html.erb",
|
152
151
|
"app/views/express_translate/options/language_detail.html.erb",
|
153
152
|
"app/views/express_translate/options/languages.html.erb",
|
data/lib/express_translate.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# Class in my gem
|
1
2
|
require 'express_translate/express_translate_model'
|
2
3
|
require 'express_translate/database_management'
|
3
4
|
require 'express_translate/account_management'
|
@@ -13,6 +14,7 @@ require 'seeds/accounts_seed'
|
|
13
14
|
# Lib
|
14
15
|
require 'redis'
|
15
16
|
|
17
|
+
# Main module for my gem
|
16
18
|
module ExpressTranslate
|
17
19
|
|
18
20
|
class << self; attr_accessor :package, :language, :url end
|
@@ -21,6 +23,8 @@ module ExpressTranslate
|
|
21
23
|
@language = ""
|
22
24
|
@url = ""
|
23
25
|
|
26
|
+
# Change language locals for I18N
|
27
|
+
# lang: is a code of language want to change for backend
|
24
28
|
def language(lang)
|
25
29
|
I18n.locale = "#{YAML.load_file(Rails.root.to_s + '/config/express_translate.yml')['package']['id']}#{lang}"
|
26
30
|
end
|
@@ -51,9 +55,10 @@ module ExpressTranslate
|
|
51
55
|
end
|
52
56
|
|
53
57
|
# def initialize
|
54
|
-
#
|
55
|
-
#
|
58
|
+
#
|
59
|
+
# end
|
56
60
|
|
61
|
+
# Setup My gem
|
57
62
|
def self.setup
|
58
63
|
yield self
|
59
64
|
end
|
@@ -4,21 +4,24 @@ module ExpressTranslate
|
|
4
4
|
# password:
|
5
5
|
require "base64"
|
6
6
|
|
7
|
-
class Account <
|
7
|
+
class Account < ExpressTranslateModel
|
8
8
|
@name = "account"
|
9
9
|
@primary = "username"
|
10
10
|
@attr = "password", "token"
|
11
11
|
|
12
|
+
# Modify account when add (Encoding password)
|
12
13
|
def self.add(params)
|
13
14
|
params[:password] = self.encoding(params[:password])
|
14
15
|
super(params)
|
15
16
|
end
|
16
17
|
|
18
|
+
# Find account with token, check status login bt cookie
|
17
19
|
def self.find_by_token(token)
|
18
20
|
_find = self.all.select{|s| (s["token"] == token)}
|
19
21
|
return _find.count > 0 ? _find[0] : nil
|
20
22
|
end
|
21
23
|
|
24
|
+
# Ecoding password
|
22
25
|
def self.encoding(string)
|
23
26
|
encode = Base64.encode64(string)
|
24
27
|
encode = encode.split("=").join()
|
@@ -4,16 +4,24 @@ module ExpressTranslate
|
|
4
4
|
# ......
|
5
5
|
# ......
|
6
6
|
|
7
|
-
class
|
8
|
-
|
7
|
+
class ExpressTranslateModel
|
8
|
+
# Attributes for table
|
9
9
|
class << self; attr_accessor :name, :primary, :has_many, :attr, :unique end
|
10
10
|
# attr_accessor :
|
11
|
+
|
12
|
+
# Config for item
|
13
|
+
# List table relationship
|
11
14
|
@has_many = []
|
15
|
+
# Table name
|
12
16
|
@name = "express_translate"
|
17
|
+
# Primary key for table
|
13
18
|
@primary = "id"
|
19
|
+
# All attributes
|
14
20
|
@attr = ""
|
21
|
+
# @unique for options check when add data
|
15
22
|
@unique = ""
|
16
23
|
|
24
|
+
# get all item in table
|
17
25
|
def self.all
|
18
26
|
data = Database.get(@name)
|
19
27
|
data = data.nil? ? [] : (data.is_a?(Array) ? data : [].push(data))
|
@@ -22,14 +30,21 @@ module ExpressTranslate
|
|
22
30
|
data
|
23
31
|
end
|
24
32
|
|
33
|
+
# Save obj to redis database
|
34
|
+
# Synchronize data to redis database
|
25
35
|
def self.save(obj)
|
26
36
|
Database.set(@name, self.protect_attr_items(obj))
|
27
37
|
end
|
28
38
|
|
39
|
+
# Clear all data of table
|
29
40
|
def self.destroy
|
30
41
|
Database.del(@name)
|
31
42
|
end
|
32
43
|
|
44
|
+
# Add item with params
|
45
|
+
# Check primary key for present
|
46
|
+
# Check unique data
|
47
|
+
# Return messages
|
33
48
|
def self.add(params)
|
34
49
|
if JSON.parse(params.to_json)[@primary] == ""
|
35
50
|
return self.primary_nil
|
@@ -43,13 +58,19 @@ module ExpressTranslate
|
|
43
58
|
end
|
44
59
|
end
|
45
60
|
|
61
|
+
# Delete item by id
|
62
|
+
# Remove item with primary key
|
46
63
|
def self.delete(id)
|
47
64
|
all = self.all
|
48
65
|
count_before = all.count
|
49
66
|
all.reject!{|package| package[@primary] == id}
|
50
67
|
return self.change_data(count_before, all.count, all)
|
51
68
|
end
|
52
|
-
|
69
|
+
|
70
|
+
# Update item by params
|
71
|
+
# Remove old item
|
72
|
+
# Add new item with exsits data
|
73
|
+
# Return json data for status
|
53
74
|
def self.update(params)
|
54
75
|
all = self.all
|
55
76
|
count_before = all.count
|
@@ -59,6 +80,9 @@ module ExpressTranslate
|
|
59
80
|
return self.change_data(count_before, count_after, all)
|
60
81
|
end
|
61
82
|
|
83
|
+
# Find item by code
|
84
|
+
# Select item with primary key
|
85
|
+
# return limit items selected
|
62
86
|
def self.find(code)
|
63
87
|
data = self.all
|
64
88
|
search = data.select{|package| package[@primary] == code}
|
@@ -72,6 +96,7 @@ module ExpressTranslate
|
|
72
96
|
|
73
97
|
private
|
74
98
|
|
99
|
+
# Check duplicate primary key or list unique
|
75
100
|
def self.check_unique_allow_add(item)
|
76
101
|
if @unique.present?
|
77
102
|
@unique = @unique.is_a?(Array) ? @unique : [@unique]
|
@@ -86,6 +111,7 @@ module ExpressTranslate
|
|
86
111
|
end
|
87
112
|
end
|
88
113
|
|
114
|
+
# Check attributes for allow store for list items
|
89
115
|
def self.protect_attr_items(items)
|
90
116
|
items_copy = []
|
91
117
|
items.each do |item|
|
@@ -94,6 +120,7 @@ module ExpressTranslate
|
|
94
120
|
return items_copy
|
95
121
|
end
|
96
122
|
|
123
|
+
# Check attributes for allow store only one item
|
97
124
|
def self.protect_attr(item)
|
98
125
|
if item.to_json == ""
|
99
126
|
puts item.inspect
|
@@ -111,12 +138,14 @@ module ExpressTranslate
|
|
111
138
|
return item_copy
|
112
139
|
end
|
113
140
|
|
141
|
+
# Add relationship for model for item list
|
114
142
|
def self.add_has_many(items)
|
115
143
|
items.each do |item|
|
116
144
|
self.add_has_many_item(item)
|
117
145
|
end
|
118
146
|
end
|
119
147
|
|
148
|
+
# Add relationship for model only one item
|
120
149
|
def self.add_has_many_item(item)
|
121
150
|
if @has_many.present?
|
122
151
|
@has_many = @has_many.is_a?(Array) ? @has_many : [@has_many]
|
@@ -128,8 +157,9 @@ module ExpressTranslate
|
|
128
157
|
end
|
129
158
|
end
|
130
159
|
|
131
|
-
# Return
|
160
|
+
# Return messages
|
132
161
|
|
162
|
+
# Messages for change data
|
133
163
|
def self.change_data(before, after, data)
|
134
164
|
if before > after
|
135
165
|
self.save(data)
|
@@ -138,19 +168,23 @@ module ExpressTranslate
|
|
138
168
|
return self.notfound
|
139
169
|
end
|
140
170
|
end
|
141
|
-
|
171
|
+
|
172
|
+
# Messages for not found data
|
142
173
|
def self.notfound
|
143
174
|
return {"success"=> false, "error"=> "Data is not found!"}
|
144
175
|
end
|
145
176
|
|
177
|
+
# Messages for duplicate primary key
|
146
178
|
def self.primary_key
|
147
179
|
return {"success" => false, "error" => "Duplicate primary key"}
|
148
180
|
end
|
149
181
|
|
182
|
+
# Messages for primary key is nil
|
150
183
|
def self.primary_nil
|
151
184
|
return {"success" => false, "error" => "Primary data is nil!"}
|
152
185
|
end
|
153
186
|
|
187
|
+
# Messages for successful
|
154
188
|
def self.successful(data)
|
155
189
|
return {"success" => true, "#{@name}" => data}
|
156
190
|
end
|
@@ -4,16 +4,18 @@ module ExpressTranslate
|
|
4
4
|
# text: English
|
5
5
|
# packages: be
|
6
6
|
|
7
|
-
class Language <
|
7
|
+
class Language < ExpressTranslateModel
|
8
8
|
@name = "languages"
|
9
9
|
@primary = "id"
|
10
10
|
@attr = "text", "packages", "is_origin"
|
11
11
|
@unique = "id", "packages"
|
12
12
|
|
13
|
+
# Remove package by ID package
|
13
14
|
def self.delete_by_id_packages(id, packages)
|
14
15
|
return self.reject_with_id_packages(id, packages)
|
15
16
|
end
|
16
17
|
|
18
|
+
# Update package by item id and ID package
|
17
19
|
def self.update_by_id_packages(old_id, packages, params)
|
18
20
|
all = self.all
|
19
21
|
return self.primary_key if self.get_with_id_packages(params[:id], packages).present?
|
@@ -21,6 +23,7 @@ module ExpressTranslate
|
|
21
23
|
return self.check_update_data(old_id, packages, params, self.add(params))
|
22
24
|
end
|
23
25
|
|
26
|
+
# Set origin language id and packages id
|
24
27
|
def self.set_origin(id, packages)
|
25
28
|
all = self.all
|
26
29
|
origin_old = self.get_origin(packages)
|
@@ -33,6 +36,7 @@ module ExpressTranslate
|
|
33
36
|
return self.notfound
|
34
37
|
end
|
35
38
|
|
39
|
+
# Get origin language id and packages id
|
36
40
|
def self.get_origin(packages)
|
37
41
|
origin = self.all.select{|lang| (lang["packages"] == packages and lang["is_origin"] == true)}
|
38
42
|
return origin[0] if origin.count > 0
|
@@ -41,6 +45,7 @@ module ExpressTranslate
|
|
41
45
|
|
42
46
|
private
|
43
47
|
|
48
|
+
# Remove Language by ID and Package ID
|
44
49
|
def self.reject_with_id_packages(id, packages)
|
45
50
|
all_reject = self.all
|
46
51
|
count_before = all_reject.count
|
@@ -48,6 +53,7 @@ module ExpressTranslate
|
|
48
53
|
return self.change_data(count_before, all_reject.count, all_reject)
|
49
54
|
end
|
50
55
|
|
56
|
+
# Update status origin for language
|
51
57
|
def self.update_origin_only(id, packages, is_true)
|
52
58
|
this = self.get_with_id_packages(id, packages)
|
53
59
|
this["is_origin"] = is_true
|
@@ -8,10 +8,12 @@ module ExpressTranslate
|
|
8
8
|
|
9
9
|
include ExpressTranslate
|
10
10
|
|
11
|
+
# Copy config file for my gem
|
11
12
|
def create_file_config
|
12
13
|
template "config/express_translate.yml", "config/express_translate.yml"
|
13
14
|
end
|
14
15
|
|
16
|
+
# Seed data for redis database
|
15
17
|
def seeds_data
|
16
18
|
ExpressTranslate.seeds
|
17
19
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: express_translate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -261,7 +261,6 @@ files:
|
|
261
261
|
- app/views/express_translate/ajax/packages/_content_index.html.erb
|
262
262
|
- app/views/express_translate/ajax/packages/package_update.html.erb
|
263
263
|
- app/views/express_translate/options/.DS_Store
|
264
|
-
- app/views/express_translate/options/_language.html.erb
|
265
264
|
- app/views/express_translate/options/index.html.erb
|
266
265
|
- app/views/express_translate/options/language_detail.html.erb
|
267
266
|
- app/views/express_translate/options/languages.html.erb
|
@@ -356,7 +355,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
356
355
|
version: '0'
|
357
356
|
segments:
|
358
357
|
- 0
|
359
|
-
hash:
|
358
|
+
hash: -3049154278621812228
|
360
359
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
361
360
|
none: false
|
362
361
|
requirements:
|
@@ -1,28 +0,0 @@
|
|
1
|
-
<ul>
|
2
|
-
<!-- <% en_list.each do |key,value| %>
|
3
|
-
<% if value.class != Array %>
|
4
|
-
<li key='<%= key %>'>
|
5
|
-
<%= @trans[key] %>
|
6
|
-
<input type='text' value='<%= @trans[key] %>' readonly='readonly' class='translate-box hidden' />
|
7
|
-
</li>
|
8
|
-
<% else %>
|
9
|
-
<li>
|
10
|
-
<ol>
|
11
|
-
<% value.each_with_index do |from_text_section, index| %>
|
12
|
-
<%
|
13
|
-
from_text_section = from_text_section.to_s
|
14
|
-
line_size = 100
|
15
|
-
# this is needed so the controller doesn't freak out when there is no translations found
|
16
|
-
# for this element yet...
|
17
|
-
to_text = Array.new if to_text.blank?
|
18
|
-
%>
|
19
|
-
<li key='<%= key %>[<%=index%>]'>
|
20
|
-
<%= @trans[key][index] if @trans[key] %>
|
21
|
-
<input type='text' value='<%= trans[key] ? [index] : '' %>' readonly='readonly' class='translate-box hidden' />
|
22
|
-
</li>
|
23
|
-
<% end %>
|
24
|
-
</ol>
|
25
|
-
</li>
|
26
|
-
<% end %>
|
27
|
-
<% end %> -->
|
28
|
-
</ul>
|