express_translate 1.0 → 1.0.1
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.
- 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>
|