-
Notifications
You must be signed in to change notification settings - Fork 4
/
index7.php
298 lines (280 loc) · 11.1 KB
/
index7.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
<?php
/* Version 0.9, 2017/12/2 10號工程師
請求方式支持get, post;翻譯內容超過2000字符請使用post
功能:把目錄下的檔案全翻譯完
AUTO translation file googleapi
*/
$thisDir = "."; //config.inc.php檔的相對路徑
$_file = basename(__FILE__); //自行取得本程式名稱
require $thisDir . "/config.php"; // 載入主參數設定檔
//==========================================================================
//require_once INCLUDE_PATH . "/inc_password_admin.php"; // 載入管理員密碼驗證
//==========================================================================
require_once INCLUDE_PATH . "/mysql.inc.php"; // 載入資料庫函式
/* ********************************************************************************************* */
/* 參數設置
/* ********************************************************************************************* */
$i_my = '後台';
$br = "<br>\n";
//送出訊息
//支援SSH的抓檔
function curl_get($url)
{
$ch = @curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
$head[] = "Connection: keep-alive";
$head[] = "Keep-Alive: 300";
$head[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
$head[] = "Accept-Language: en-us,en;q=0.5";
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36');
curl_setopt($ch, CURLOPT_ENCODING, '');
curl_setopt($ch, CURLOPT_HTTPHEADER, $head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$page = curl_exec($ch);
curl_close($ch);
return $page;
}
//送出訊息
function curl_post($url, $post)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //是否抓取跳轉後的頁面 //一定要開否則會錯
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //支援HTTPS
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //支援HTTPS
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8); //等代秒數
curl_setopt($ch, CURLOPT_HEADER, false); //不取得返回头信息
curl_setopt($ch, CURLOPT_POST, 1); // 啟用POST
$arrayPOST = http_build_query($post); //送出資料
curl_setopt($ch, CURLOPT_POSTFIELDS, $arrayPOST); //送出資料
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); //抓圖要設2進制1
$file_contents = curl_exec($ch);
curl_close($ch);
return $file_contents;
}
//獲取目錄下所有文件,包括子目錄
function get_allfiles($path, &$files)
{
if (is_dir($path)) {
$dp = dir($path);
while ($file = $dp->read()) {
if ($file != "." && $file != "..") {
get_allfiles($path . "/" . $file, $files); //呼叫自己
}
}
$dp->close();
}
if (is_file($path)) {
$files[] = $path; //只把檔案加進去
}
}
function get_filenamesbydir($dir)
{
$files = array();
get_allfiles($dir, $files);
return $files;
}
//翻譯後的取代工作
function translated_and_replaced($str)
{
if (empty($str)) {
return '';
}
$str = str_replace('%', '%', $str);
$str = str_replace('?', '?', $str);
$str = str_replace('&', '&', $str);
$str = str_replace('!', '!', $str);
return $str;
}
//去除換行字元
function no_r_n($str)
{
$str = str_replace(array("\r\n", "\r", "\n"), "", $str);
return $str;
}
//整篇文章要翻譯的字
function get_translated_word_test($file)
{
$files = array();
$file = fopen($file, "r");
//輸出文本中所有的行,直到文件結束為止。
$key = "=";
while (!feof($file)) {
$strs = fgets($file);
//找出字原位置
$leng = strlen($strs);
$place = 0;
for ($i = 0; $i < $leng; $i++) {
$word[$i] = substr($strs, $i, 1);
if ($word[$i] == $key) {
$place = $i;
break;
}
}
if ($place) {
//該行不空白的話
$a = no_r_n(substr($strs, 0, $place)); //換行字元要拿掉
$b = trim(substr($strs, $place + 3)); //要翻譯的字
$t = array('a' => $a, 'b' => substr($b, 0, -2));
} else {
//沒有=就用原本的字 有可能是<?php或註解
$t = array('a' => no_r_n($strs), 'b' => ''); //換行字元要拿掉
}
$files[] = $t;
}
$a = array();
$b = array();
fclose($file);
for ($i = 0; $i < count($files); $i++) {
$a[] = $files[$i]['a'];
$b[] = $files[$i]['b'];
}
$files2 = array('a' => $a, 'b' => $b);
return $files2;
}
//單引號處理
function addslashesB($str)
{
$str = str_replace("\'", "'", $str);
$str = str_replace("'", "\'", $str);
return $str;
}
//新增資料
function add_mysql($apend,$sourceLanguage,$targetLanguage,$CT_CONFIG)
{
$ss=0;
$db_name = $CT_CONFIG['db_name'] . '.' . $CT_CONFIG['db_sheet']; //資料表名稱
$linkID = $CT_CONFIG['linkID'];
for ($i = 0; $i < count($apend['b']); $i++) {
if ($apend['b'][$i]) {
$dirname = addslashes($apend['f']['dirname']);
$basename = $apend['f']['basename'];
$sourcelanguage = $sourceLanguage; //來源語言
$sourcetext = $apend['b'][$i];
$targetanguage = $targetLanguage; //目標語言;
$targettext = $apend['c'][$i];
//新增資料紀錄
$sql = "INSERT INTO $db_name (`t_id`, `project_name`, `version`, `dirname`, `basename`, `sourcelanguage`, `sourcetext`, `targetanguage`, `targettext`, `priority`, `add_date`) VALUES (NULL, 'opencart', '2.3.0.2','$dirname','$basename','$sourcelanguage','$sourcetext','$targetanguage','$targettext','20', NOW());";
$ok = mysql_insert_i($sql, $linkID);
$oki = ($ok == 1) ? "成功" : "失敗!";
//$sms.="新增資料:".$oki;
$ss++;
if ($ok != 1) {
$sms .= "新增資料錯誤訊息:" . $ok;
}
}
}
return $ss;
}
/*********************************************************************************************/
/*
翻譯超簡單使用
如果你有申請過該API-網址直打就會有返回值
//$url='https://translation.googleapis.com/language/translate/v2?key=[請自己去申請KEY]&q=fuck&q=language&target=zh-TW';
申請KEY的位置
請通過訪問https://console.developers.google.com/apis/api/translate.googleapis來啟用它 這個 AIP名字叫 Google Cloud Translation API
KEY不能用別人的
*/
$url = 'https://translation.googleapis.com/language/translate/v2?key='.googleApiKEY;
/*********************************************************************************************/
$sourceLanguage = 'en-gb'; //來源語言
$targetLanguage = 'zh-TW'; //目標語言
$dir = dirname(__FILE__) . "\\01"; //要開啟的路徑
$dir1 = $dir . "a"; //來源目錄 放有英文檔案
$dir2 = $dir . "b"; //放有 翻譯過的中文檔案
/*********************************************************************************************/
$filenamesA = get_filenamesbydir($dir1); //獲取目錄下所有文件,包括子目錄
$filenamesB = get_filenamesbydir($dir2); //獲取目錄下所有文件,包括子目錄
/*********************************************************************************************/
/* ********************************************************************************************* */
$CT_CONFIG['db_name'] = 't_translation_googleapi'; //要開啟的資料庫
$CT_CONFIG['db_sheet'] = DB_PREFIX . 't'; //子資料表
$linkID = omysql($CT_CONFIG['db_name']); //開資料庫================================================
$CT_CONFIG['linkID']=$linkID;
$z = array('y1' => 0, 'y2' => 0);
//打印所有文件名,包括路徑
foreach ($filenamesA as $value) {
$ss = 0;
//這裡不會有目錄名
//echo $value . "<br />";//開啟檔案
$q = array();
$text_array = array();
$iurlq = "&target=" . $targetLanguage;
$sms = '';
$f = array();
//這裡不會有目錄名只有檔案名
$value2 = str_replace($dir1, $dir2, $value); //要找的檔名
$value2 = str_replace('/', '\\', $value2); //要找的檔名
$value2 = str_replace($sourceLanguage, $targetLanguage, $value2); //要找的檔名
$sms .= "目標檔案可寫入檢查" . $value2;
$sms .= " |結果:";
if (is_file($value2)) {
$sms .= "找到檔案" . $br;
$f['target'] = $value2; //目標檔名
$f['dirname'] = substr(dirname($value2), strlen($dir2) + 1); //路徑要去掉相同部分
$f['basename'] = basename($value2); //檔名
//print_r($f);
$ap = get_translated_word_test($value); //開檔案
$sms .= count($ap['b'])."行送翻譯";
//一次送多組
for ($i = 0; $i < count($ap['b']); $i++) {
$iurlq .= "&q=" . urlencode($ap['b'][$i]); //要翻譯的字要編碼
}
$iurl = $url . $iurlq;
$response = curl_get($iurl);//送翻譯
$data = json_decode($response, true); //接收;
//print_r($iurl);
//print_r($data);
if (isset($data['error'])) {
echo "翻譯失敗";
print_r($data['error']);
exit;
} else {
//翻譯成功
$sms .= "翻譯成功";
//把翻譯內容處理一遍
for ($i = 0; $i < count($data['data']['translations']); $i++) {
$text_array[] = translated_and_replaced($data['data']['translations'][$i]['translatedText']); //翻譯後的取代工作
}
//print_r($text_array);
}
$apend = $ap;
$apend['c'] = $text_array;
$apend['f'] = $f; //檔案相關資訊
//print_r($apend);
//組出檔案內容
$context = '';
$context1p = '';
for ($i = 0; $i < count($apend['a']); $i++) {
$context1p = $apend['a'][$i]; //這沒有換行的
if (trim($apend['c'][$i])) {
//有翻譯才有
$context1p .= " = '" . addslashesB($apend['c'][$i]) . "';"; //由於都用'包覆所以原本有'的要處理
}
if ($context1p == '\n') {
//如果該行是空白只有1個\n
//$context .= "\n";//換行都用\n
} else {
$context .= $context1p . "\n"; //換行都用\n
}
}
$sms .= " 寫入檔案";
file_put_contents($apend['f']['target'], $context); //寫入檔案
$sms .= " 新增資料紀錄";
$ss=add_mysql($apend,$sourceLanguage,$targetLanguage,$CT_CONFIG);//新增資料紀錄
$sms .= $ss . "筆";
echo $sms . $br;
//exit; //測試做1次就停止
$z['y1']++;
} else {
echo "沒找到檔案" . $br;
$z['y2']++;
}
}
cmysql($linkID); //關資料庫==============================================================